这是一个使用扩展汇编代码的C函数:
static inline uint
xchg(volatile uint *addr, uint newval)
{
uint result;
asm volatile("lock; xchgl %0, %1" :
"+m" (*addr), "=a" (result) :
"1" (newval) :
"cc");
return result;
}
我阅读this codeproject link以了解如何在C代码中使用Extended Assembly,但我对此代码感到困惑。
我不明白这段代码中的内容:
1)汇编代码中(newval)
用作输入的地方? (%0
引用(*addr)
而%1
引用(result)
权利?然后"1" (newval)
从未在代码中使用过(我们从未见过%2
在代码中。或者我错了?)
2)输入操作数中"1"
中的"1" (newval)
是什么?
3)"+m"
中"+m" (*addr)
符号的含义是什么?
答案 0 :(得分:1)
关于GCC asm
的问题的所有答案都可以来自6.41 Assembler Instructions with C Expression Operands和6.42 Constraints for asm Operands。