參考資料
intel code
at&t code
mov eax,1
movl $1,%eax
mov ebx,0ffh
movl $0xff,%ebx
int 80h
int $0x80
mov ebx, eax
movl %eax, %ebx
mov eax,[ecx]
movl (%ecx),%eax
mov eax,[ebx+3]
movl 3(%ebx),%eax
mov eax,[ebx+20h]
movl 0x20(%ebx),%eax
add eax,[ebx+ecx*2h]
addl (%ebx,%ecx,0x2),%eax
lea eax,[ebx+ecx]
leal (%ebx,%ecx),%eax
sub eax,[ebx+ecx*4h-20h]
subl -0x20(%ebx,%ecx,0x4),%eax
asm
("assembly code"
);
asm
asm-qualifiers ( assemblertemplate
://outputoperands
://inputoperands
://clobbers
)asm
asm-qualifiers ( assemblertemplate
://outputoperands
://inputoperands
://clobbers
://gotolabels
)
outputoperands/inputoperands(運算元):」asm」內部使用c語言字串作為運算元。運算元都要放在雙引號中。對於輸出運算元,還要用「=」修飾。constraint和修飾都放在雙引號內。之後是c表示式了。
"constraint"
(c expression)
"=r"
(result)
//outputoperands
"r"(a)
,"r"
(b)//inputoperands
clobbers(被刪除的暫存器):在此註明被改動的暫存器,防止當成原有值使用。
例子:
#include
intmain()
GCC內聯彙編
有時為了高效,有時為了直接控制硬體,有些模組我們不得不直接用組合語言來編寫,並且對外提供呼叫的介面,隱藏細節,這其實就是內聯彙編。如何使用內聯彙編?我們就以 gcc 為例,一窺其中奧秘!一 關鍵字 如何讓 gcc 知道 中內嵌的彙編呢?借助 關鍵字!來看下面的例子 asm volatile hlt ...
gcc內聯彙編
有時為了高效,有時為了直接控制硬體,有些模組我們不得不直接用組合語言來編寫,並且對外提供呼叫的介面,隱藏細節,這其實就是內聯彙編。如何使用內聯彙編?我們就以 gcc 為例,一窺其中奧秘!一 關鍵字 如何讓 gcc 知道 中內嵌的彙編呢?借助關鍵字!來看下面的例子 a volatile hlt a 表...
GCC 內聯彙編
有時為了高效,有時為了直接控制硬體,有些模組我們不得不直接用組合語言來編寫,並且對外提供呼叫的介面,隱藏細節,這其實就是內聯彙編。如何使用內聯彙編?我們就以 gcc 為例,一窺其中奧秘!一 關鍵字 如何讓 gcc 知道 中內嵌的彙編呢?借助關鍵字!來看下面的例子 asm volatile hlt a...