1. 程式人生 > >內嵌彙編 %0,%1 是什麼

內嵌彙編 %0,%1 是什麼

使用內嵌彙編,要先編寫彙編指令模板,然後將C語言表示式與指令的運算元相關聯,並告訴GCC對這些操作有哪些限制條件。例如在下面的彙編語句:


__asm__ __violate__
("movl %1,%0" : "=r" (result) : "m" (input));


“movl %1,%0”是指令模板;“%0”和“%1”代表指令的運算元,稱為佔位符,內嵌彙編靠它們將C語言表示式與指令運算元相對應。

指令模板後面用小括號括起來的是C語言表示式,本例中只有兩個:“result”和“input”,他們按照出現的順序分別與指令運算元“%0”,“%1,”對應;注意對應順序:第一個C表示式對應“%0”;第二個表示式對應“%1”,依次類推,運算元至多有10個,分別用“%0”,“%1”….“%9,”表示。

在每個運算元前面有一個用引號括起來的字串,字串的內容是對該運算元的限制或者說要求。

“result”前面的限制字串是“=r”,其中“=”表示“result”是輸出運算元,“r”表示需要將“result”與某個通用暫存器相關聯,先將運算元的值讀入暫存器,然後在指令中使用相應暫存器,而不是“result”本身,當然指令執行完後需要將暫存器中的值存入變數“result”,從表面上看好像是指令直接對“result”進行操作,實際上GCC做了隱式處理,這樣我們可以少寫一些指令。

“input”前面的“r”表示該表示式需要先放入某個暫存器,然後在指令中使用該暫存器參加運算。

轉載自:http://fgsink.blog.163.com/blog/static/16716997020115177215560/