GCC在我的以下代码注册错误后告诉垃圾“-4(%ebp)”:
static __inline__ int xchg_asm(int* lock, int val)
{
int ret;
__asm__ __volatile__(
LOCK "movl %1,%%eax; xchg (%1),%2 ; movl %%eax %0"
:"=m" (ret)
:"d"(lock), "c"(val));
return ret;
}
我看不出如何修改它。
答案 0 :(得分:1)
gas
(gcc使用的GNU汇编程序)期望换行符为行结尾,而不是分号。您是否尝试使用"\n"
代替";"
?
答案 1 :(得分:0)
尝试添加' \ n'在每次asm insruction之后:
__asm__ __volatile__(
LOCK "movl %1,%%eax \n xchg (%1),%2 \n movl %%eax, %0 \n"
:"=m" (ret)
:"d"(lock), "c"(val));
return ret;
}
如果出现此类错误,请将源代码编译为汇编程序文件 - 使用GCC的-S
选项并检查气体报告的行。
答案 2 :(得分:0)
此行缺失
LOCK" movl%1,%% eax; xchg(%1),%2; movl %% eax%0"
缺少分号,因为它的最后一个论点。