我正在使用mingw 4.7.2。
有人可以告诉我这个MACRO有什么问题
我想做的只是一个简单的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
提前致谢
答案 0 :(得分: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) )
标记的行以"
开头,然后将所有其他字符串偏移到宏的末尾。摆脱这个。
即。你的最后两行实际上是:
" :"=r"(result) :"r"(a),"r"(b) )
<----str-----> <----str---> <----> <-----.... No end
当你真的想要
:"=r"(result) :"r"(a),"r"(b) )
<--> <-> <->
答案 1 :(得分:4)
这是一个更灵活的实现:
__asm__ ("addl %2, %k0" : "=r" (result) : "%0" (a), "g" (b) : "cc")
此外,在此上下文中完全没有__volatile__
关键字。