__asm在编译器中报错
时间: 2023-10-17 21:05:16 浏览: 51
__asm 是一种内嵌汇编语句,它可以用于在 C/C++ 代码中嵌入汇编语句。如果在编译器中出现错误,可能是因为 __asm 的语法有误或者编译器不支持该语句。为了解决这个问题,你可以检查 __asm 语句的语法是否正确,或者尝试使用其他编译器来编译你的代码。另外,你也可以查看编译器的文档,了解该编译器对 __asm 语句的支持情况。
相关问题
__ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc");用编译器V6下为什么会报错
在编译器V6下,代码中的__ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc");可能会报错,原因是编译器V6不再支持GCC风格的内联汇编语法。所以,您需要使用新的内联汇编语法。
新的内联汇编语法如下:
```
__asm volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc");
```
其中,__asm是GCC扩展关键字,volatile表示汇编代码是具有副作用的,"VMSR fpscr, %0"表示汇编代码,":"表示分隔符,"r" (fpscr)表示将C语言变量fpscr传递给汇编代码,"vfpcc"表示使用vfpcc寄存器。
请注意,新的内联汇编语法在GCC和Clang编译器中都适用,但在其他编译器中可能会有所不同。
那为什么会报错 function "_nop_" declared implicitly
如果你在程序中直接使用_nop_()指令,而不是使用__asm__关键字嵌入汇编代码,那么编译器会认为_nop_()是一个函数或宏,并尝试在程序中查找该函数或宏的定义。由于_nop_()不是一个标准的C/C++函数或宏,因此编译器会报错,提示找不到该函数或宏的定义。
为了解决这个问题,可以使用__asm__关键字将_nop_()指令嵌入汇编代码,如上一个回答所示。另外,也可以使用其他方式实现空操作,例如使用空循环或空语句等。例如:
```c++
for(int i=0; i<10; i++) {} // 空循环
```
```c++
; 空语句
```
这些方法都可以实现空操作,避免了使用_nop_()指令时可能出现的问题。