asm和asm volatile的区别
时间: 2023-08-10 20:45:31 浏览: 313
在C/C++中,asm关键字用于嵌入汇编代码。而asm volatile与asm的区别在于,后者会被编译器优化器优化,可能会导致汇编代码执行顺序或结果不符合预期。而asm volatile则告诉编译器不要对汇编代码进行优化,确保汇编代码按照预期执行。因此,如果需要确保汇编代码的执行顺序或结果,应该使用asm volatile。
相关问题
asm volatile
"asm volatile" 是 GCC 内嵌汇编语句的关键字,其中 "asm" 表示后面的代码是汇编语句,"volatile" 用于告诉编译器这段代码可能会被其他线程或硬件修改,需要强制编译器在每次使用时都重新读取,不能对代码进行优化。这个关键字通常用于实现一些底层的系统级别的功能,比如嵌入式系统的驱动程序。
../CORE\core_cmFunc.h(616): error: unknown register name 'vfpcc' in asm __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc");
这个错误是由于使用了不存在的寄存器名称 "vfpcc"。在ARM架构中,"vfpcc"是一个条件码寄存器,只能在VFP指令中使用。但是在这个错误中,"vfpcc"被用作内联汇编中的限定符,它应该被替换为适当的限定符,例如"cc"或"memory"。请检查您的代码,找出使用了"vfpcc"的地方并进行修改。
阅读全文