語法解釋
__asm__ __violate__ ("movl %1,%0" : "=r" (result) : "m" (input));
movl %1,%0"是指令模板;"%0"和"%1"代表指令的運算元,稱為佔位符,本例中只有兩個:"result"和"input",他們按照出現的順序分 別與指令運算元"%0","%1"對應;
注意對應順序:第乙個c 表示式對應"%0";第二個表示式對應"%1",依次類推,運算元至多有10 個,分別用"%0","%1"...."%9"表示。
"result"前面的限制字串是"=r",其中"="表示"result"是輸出運算元
"r" 表示需要將"result"與某個通用暫存器相關聯,先將運算元的值讀入暫存器,然後在指令中使用相應暫存器,當然指令執行 完後需要將暫存器中的值存入變數"result",從表面上看好像是指令直接對"result"進行操作,實際上gcc做了隱式處理,這樣我們可以少寫一 些指令。"input"前面的"m"表示該表示式需要先放入記憶體,然後在指令中使用參加運算。
asm ( assembler template /* 彙編語句 */
: output operands /* 輸出暫存器 */
: input operands /* 輸入暫存器 */
: list of clobbered registers //會被修改的暫存器
);// 先輸入 再彙編指令 再輸出
int result = 50;
int input = 20;
int num =0;
// 從右邊複製到左邊
__asm__ __volatile__ ("movl %1,%0" : "=r" (result),"=r"(num) : "m" (input),"r"(result));
cout << "result := " << result << endl;
cout << "input := " << input << endl;
cout << "num := " << num << endl;
result := 50
input := 20
num := 50
int c = 15;
int exchange_value = 5;
int compare_value = 10;
int num = 25;;
int num1 = 30;;
int * dest = #
__asm__ volatile ( "lock cmpxchgl %1,(%3)" // 彙編語句
: "=b" (exchange_value) // 輸出暫存器
: "r" (c),"a" (num)/*eax*/,"r" (dest)
: "cc", "memory"); //會被修改的暫存器
cmpxchg source, destination
如果destination和eax/ax/al相等,把source載入到destination;
否則,把destination載入到eax/ax/al中
如果a的值num==*dest,則把c的值賦給*dest列印dest := 15
int c = 15;
int exchange_value = 5;
int compare_value = 10;
int num = 25;;
int num1 = 30;;
int * dest = #
__asm__ volatile ( "lock cmpxchgl %1,(%3)" // 彙編語句
: "=b" (exchange_value) // 輸出暫存器
: "r" (c),"a" (num1)/*eax*/,"r" (dest)
: "cc", "memory"); //會被修改的暫存器
如果a的值num!=*dest,則*dest不會賦值列印dest := 25
VB內嵌彙編
vb簡單易用,但功能有時候受限制。vc,delphi可以直接在程式中寫彙編 可惱的是,vb不行。我看過網上也有關於vb嵌入彙編的,不過有些方法,過於複雜,而且也沒相應 的介紹。我這裡提供一種方法,也許大家以後可能有用!基本思路 彙編 可以存在乙個byte型別的陣列中,然後,通過某種手段,把系統控制權...
關於內嵌彙編
最近才發現原來noi不給用內嵌彙編 那麼這篇文章除了平常做做oj以外就沒什麼意義了 參考自 嗯 搞oi久了應該都會碰到這麼一種問題 爆棧 當然,手寫棧是最普遍的一種解決方法 比如noi2011 day2 t1,ms是臨時換的一道水題,只要會手寫棧就可以水過 pascal黨是很舒服的,因為可以在 中手...
GCC內嵌彙編
gcc內嵌彙編 限制字元 限制字元有很多種,有些是與特定體系結構相關,此處僅列出常用的限定字元和i386中可能用到的一些常用的限定符。它們的作用是指示編譯器如何處理其後的c語言變數與指令運算元之間的關係,例如是將變數放在暫存器中還是放在記憶體中等,下表列出了常用的限定字母。b 將輸入變數放入ebx ...