三 常用的彙編指令

2021-09-08 16:10:01 字數 1286 閱讀 1922

常用的彙編指令:

push :把乙個32位的運算元壓入堆疊中。這個操作導致esp被減4.esp被形象地稱為棧頂。我們認為頂部位址是位址小的區域,那麼,

壓入堆疊的資料越多,這個堆疊也就越堆越高,esp也就越來越小。在32位平台上,esp每次減少4(位元組)。

pop :相反,esp被加4,乙個資料出棧。pop的引數一般是乙個暫存器,棧頂的資料被彈出到這個暫存器中。

一般不會把sub、add這樣的算術指令,以及call、ret這樣的跳轉指令歸入堆疊相關指令中。但實際上在函式引數傳遞過程中,sub和add最常用來操作

堆疊;call和ret對堆疊也有影響。所以這裡作為特殊處理。

sub :減法。格式為:sub 被減數,減數

add :加法。格式與sub類似。

ret :返回。實際返回位址是當前call對應的下一行**,這個返回的位址一般會在call執行時被壓入堆疊。

call:呼叫函式。

1 call的本質相當於push+jmp      ret的本質相當於pop+jmp

如果需要在堆疊中分配4個4位元組長整型的空間,則用esp減去4*4=16即可。

同時,也可以用add來恢復。常用於分配函式區域性變數空間。

mov 資料移動指令,或者說資料複製命令。

用法是 mov 移到哪(到哪去),移動誰(從哪來)

xor 異或指令,通常用於代替mov eax,0

lea指令

lea edi,[ebp-0cch] 表示將[ebp-0cch]資料單元對應的內容賦值給edi

不過,lea取的是位址,也就是說,相當於mov edi,ebp-0cch(注意,這條指令是不能被執行的,這裡只是用來作說明而已)

stos指令:

先來看看上次實驗的**

1

movecx,30h

2mov

eax,0ccccccch

3rep stos dword ptr es:[edi]

stos是串儲存指令,它的功能是將eax中的資料放入edi所指的位址中(edi中內容為位址),同時,edi會增加4位元組數(dword表示4位元組),執行到ecx的值為零為止。這裡的stos其實是stosd,對應的還有stosb、stosw,分別對應處理4、1、2個位元組,這裡對堆疊中30*4(0c0h)個位元組初始化為0cch(也就是int3指令的機器碼),這樣發生意外時執行堆疊裡面的內容會引發除錯中斷。

jmp 無條件跳轉,有去無回

jg 大於時跳轉

gl 小於是跳轉

jge 大於等於時跳轉

cmp 比較(相減比較)

彙編常用指令三

絕對轉移指令ajmp addr11 相對轉移指令sjmp rel hrer sjmp here 動態停機 長轉移指令ljmp addr16 間接轉移指令jmp a dptr 進製 無進製轉移指令jc rel jnc rel 累加器內容為零 非零轉移指令jz rel jnz rel 比較不相等轉移指令...

彙編 常用指令

一 資料傳送指令 mov 傳送資料 兩個運算元 xchg 交換指令 兩個運算元 movsx 擴充套件資料指令 兩個運算元 movzx 擴充套件資料指令 兩個運算元 xlat 查表指令 無運算元 push pop 入棧,出棧 乙個運算元 lea 位址傳送指令 兩個運算元 in out 輸入輸出指令 兩...

彙編常用指令

一 資料傳輸指令i.4.標誌傳送指令.lahf 標誌暫存器傳送,把標誌裝入ah.sahf 標誌暫存器傳送,把ah內容裝入標誌暫存器.pushf 標誌入棧.popf 標誌出棧.pushd 32位標誌入棧.popd 32位標誌出棧.二 算術運算指令 add 加法.adc 帶進製加法.inc 加 1.aa...