1. 程式人生 > >匯編語言常用指令

匯編語言常用指令

AD 字節 返回 一個數 常常 edi 好處 地址 壓入

1、堆棧相關指令

push:把一個32位的操作數壓入堆棧中。這個操作導致esp被減4。esp被形象地稱為棧頂。我們認為頂部是地址小的區域,那麽,壓入堆棧的數據越多,這個堆棧也就越堆越高,esp也就越來越小。在32位平臺上,esp每次減少4(字節)。

pop:相反,esp被加4,一個數據出棧。pop的參數一般是一個寄存器,棧頂的數據被彈出到這個寄存器中。

sub:減法。第一個參數是被減數所在的寄存器;第二個參數是減數。(對應的還有add指令。)

add:加法。

ret:返回。相當於跳轉回調用函數的地方。(對應的call指令來調用函數,返回到call之後的下一條指令。)(本質相當於pop+jmp)

call:調用函數。(本質相當於push+jmp)

2、數據傳送指令

mov:數據移動。第一個參數是目的,第二個參數是來源。在C語言中相當於賦值號。

xor:異或。這雖然是邏輯運算的指令,但是有趣的是,xor eax,eax這樣的操作常常用來代替mov eax,0。好處是速度更快,占用字節數更少。(見到xor eax,eax,應該馬上明白這是清零操作。)

lea:取得地址(第二個參數)後放入到前面的寄存器(第一個參數)中。(mov不支持後一個操作數寫成寄存器減去數字,但是lea支持,所以可以用lea來代替它。)

stos:看如下例子

mov ecx,30h

mov eax,0CCCCCCCCh

rep stos dword ptr es:[edi]

stos是串存儲指令,它的功能是將eax中的數據放入edi所指的地址中,同時,edi會增加4(字節數)。rep使指令重復執行中填寫的次數。方括弧表示存儲器,這個地址實際上就是edi的內容所指向的地址。

3、跳轉與比較指令

jmp:無條件跳轉。

jg:大於的時候跳轉。

jl:小於的時候跳轉。

jge:大於等於的時候跳轉。

cmp:比較。往往是jg、jl、jge、之類的條件跳轉指令的執行條件。

匯編語言常用指令