#include <stdlib.h>
static inline uint
xchg(volatile unsigned int *addr, unsigned int newval)
{
uint result;
asm volatile("lock; xchgl %0, %1" : "+m" (*addr), "=a" (result) : "1" (newval) : "cc");
return result;
}
有人能告訴我這段代碼究竟做了什麼嗎?我的意思是我有一個想法或這個命令的一部分。 「1」newval是輸入,「= a」是清除其先前的值並更新它。 「m」用於內存操作,但我對這個函數的功能感到困惑。 「+ m」牌做什麼?這個函數做類似m = a的事情嗎? m = newval;退貨在GCC中調用程序集?
也在這裏http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#s6 – osgx 2012-06-29 09:05:03