在C宏中添加内联asm

add inline asm into C macro

本文关键字:asm 添加      更新时间:2023-10-16

我使用的是mingw 4.7.2。

有人能告诉我这个宏有什么问题吗我想做的只是一个简单的asm宏,它将两个int相加,并将结果放入result变量

#define add(result,a,b) 
   __asm__ __volatile__( 
"           movl %1, %%eax n" 
"           addl %2, %%eax n" 
"           movl %%eax, %0 n" 
"           :"=r"(result) 
            :"r"(a),"r"(b) )

编译器说error: missing terminating " character

Thanks in advance

#define add(result,a,b) 
__asm__ __volatile__( 
"           movl %1, %%eax n" 
"           addl %2, %%eax n" 
"           movl %%eax, %0 n" 
"           :"=r"(result)   // <---- This line starts with a " for no reason.
            :"r"(a),"r"(b) )

标记的行以"开头,然后将所有其他字符串偏移到宏的末尾。把这个删掉。

。最后两行实际上是:

"           :"=r"(result) :"r"(a),"r"(b) )
<----str----->  <----str---> <----> <-----.... No end

当你真正的意思

            :"=r"(result) :"r"(a),"r"(b) )
             <-->          <->    <->

这里有一个更灵活的实现:

__asm__ ("addl %2, %k0" : "=r" (result) : "%0" (a), "g" (b) : "cc")

此外,__volatile__关键字在本文中是完全不需要的。