簡體   English   中英

我不明白這個擴展程序集內聯代碼在C中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM