我不太了解C中的这个扩展汇编内联代码

时间:2014-01-06 08:34:13

标签: c assembly inline-assembly

这是一个使用扩展汇编代码的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)符号的含义是什么?

1 个答案:

答案 0 :(得分:1)

关于GCC asm的问题的所有答案都可以来自6.41 Assembler Instructions with C Expression Operands6.42 Constraints for asm Operands