moj*_*ntu 5 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;
}
Run Code Online (Sandbox Code Playgroud)
我读了这个codeproject链接,了解如何在C代码中使用Extended Assembly,但我对此代码感到困惑.我不明白这段代码中的内容:
1)(newval)汇编代码中哪里用作输入?(%0是指(*addr)与%1被参考(result)吧?然后"1" (newval)从来没有在代码中使用(我们从来没有看到%2在代码).或者我错了?)
2)什么是"1"在"1" (newval)输入操作数?
3)什么是"+m"标志意味着"+m" (*addr)什么?
| 归档时间: |
|
| 查看次数: |
477 次 |
| 最近记录: |