1

在我的以下代码注册错误后,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;
    }

我看不到如何修改它。

4

3 回答 3

0

这条线不见了

LOCK "movl %1,%%eax; xchg (%1),%2 ; movl %%eax %0"

在最后一个参数之前缺少一个分号。

于 2014-12-23T13:27:58.370 回答
0

gas(gcc 使用的 GNU 汇编程序)期望换行符作为行尾,而不是分号。您是否尝试使用"\n"而不是";"

于 2012-06-30T13:05:10.990 回答
0

尝试在每个 asm 指令后添加 '\n':

 __asm__ __volatile__(
                LOCK "movl %1,%%eax \n  xchg (%1),%2 \n movl %%eax, %0 \n"
                :"=m" (ret)
                :"d"(lock), "c"(val));
    return ret;
}

如果出现此类错误,请将源代码编译为汇编文件 - 使用-SGCC 选项并检查 gas 报告的行。

于 2012-06-30T13:06:06.353 回答