0

我在 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");

如何解决问题?

4

1 回答 1

1

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

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

在那种情况下,你也可以用 C 来编写代码......

于 2012-12-28T09:53:43.407 回答