2

我正在使用 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

提前致谢

4

2 回答 2

4
#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) )

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

即你的最后两行实际上是:

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

当你真正的意思

            :"=r"(result) :"r"(a),"r"(b) )
             <-->          <->    <->
于 2013-06-07T09:20:52.510 回答
4

这是一个更灵活的实现:

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

此外,__volatile__在这种情况下,关键字是完全没有必要的。

于 2013-06-07T10:00:23.690 回答