我在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");
如何解决问题?
答案 0 :(得分:1)
无法直接交换两个内存位置的值。英特尔只是没有提供这种指示。
您必须使用寄存器作为中介将其编码为load-exchange-store。
在这种情况下,你也可以用C语言编写代码......