手冊 GCC內聯彙編

2021-10-11 14:43:11 字數 1293 閱讀 8107

參考資料

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...