“在asm语句中需要左值”错误

时间:2012-12-28 06:49:36

标签: c gcc netbeans assembly inline-assembly

我在Windows 7中使用netbeans作为我的IDE。以下是我的汇编代码:

/* Atomic exchange (of various sizes) */
inline void *xchg_64(void *ptr, void *x)
{
    __asm__ __volatile__("xchgq %0,%1"
                :"=r" ((unsigned long long) x)
                :"m" (*(volatile long long *)ptr), "0" ((unsigned long long) x)
                :"memory");

    return x;
}

编译项目时,会出现一个错误:

tklock.h:29:15: error: lvalue required in asm statement

第15行是:

:"memory");

如何解决问题?

1 个答案:

答案 0 :(得分:1)

无法直接交换两个内存位置的值。英特尔只是没有提供这种指示。

您必须使用寄存器作为中介将其编码为load-exchange-store。

在这种情况下,你也可以用C语言编写代码......