[英]I don't understand this extend assembly inline code in C
這是一個使用擴展匯編代碼的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;
}
我讀了這個codeproject鏈接 ,了解如何在C代碼中使用Extended Assembly,但我對此代碼感到困惑。 我不明白這段代碼中的內容:
1)匯編代碼中哪里(newval)
用作輸入? ( %0
是指(*addr)
, %1
是指(result)
對嗎?那么"1" (newval)
從未在代碼中使用過(我們從未在代碼中看到%2
)。或者我錯了?)
2)什么是"1"
在"1" (newval)
在輸入操作數?
3)什么是"+m"
符號表示"+m" (*addr)
?
關於GCC asm
所有問題的答案可以來自6.41具有C表達式操作數的匯編程序指令和用於asm操作數的6.42約束 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.