dx 彙編dec 組合語言 彙編指令

2021-10-13 11:56:48 字數 4841 閱讀 3475

mov

功能:用來進行資料傳輸。

以 「mov a, b」為例,相當於a=b。

具有以下形式:mov 暫存器, 資料;mov 暫存器, 暫存器;mov 暫存器, 記憶體單元;mov 記憶體單元, 暫存器;mov 段暫存器,暫存器;

add功能:用來做加法。

以「add a, b」為例,相當於a=a+b。

具有的形式,和 mov 一樣。

sub功能:用來做減法。

以「sub a, b」為例,相當於a=a-b。

具有的形式,和 mov 一樣。

inc,dec

功能:用來自增,自減

以「inc a」為例,相當於a=a+1。

以「dec a」為例,相當於a=a-1。

push

功能:入棧

以「push a」為例,大概相當於:sp=sp-2 ;將a中的內容送入ss:sp指向的記憶體單元處。

具有以下形式:push 暫存器;push 記憶體單元;push 段暫存器

pop功能:出棧

以「pop a」為例,大概相當於:將ss:sp指向的記憶體單元處的資料送入a中;sp=sp+2。

具有形式和push相同

loop

功能:實現基於cx的迴圈功能

以「loop s「為例,大概相當於:cx=cx-1,判斷cx中的值,不為0則轉至標號處執行程式。

and功能:邏輯與指令,按位進行與運算。

通過該指令可將操作物件的相應位設定為0,其他位不變。

or功能:邏輯或指令,按位進行或運算。

通過該指令可將操作物件的相應位設定為1,其他位不變。

mul功能:乘法指令

當乘數是位元組運算元時,把al中的無符號數與乘數相乘,結果16位放入ax中

當乘數是字運算元時,把ax中的無符號數與乘數相乘,結果32位,高位放入dx中,低位放入ax中。

div功能:除法指令

除數:有8位和16位兩種,在乙個reg或記憶體單元中。

被除數:預設放在ax或dx和ax中,如果除數為8位,被除數則為16位,預設在ax中存放;如果除數為16位,被除數則為32位,在dx和ax中存放,dx存放高16位,ax存放低16位。

結果:如果除數為8位,則al儲存除法操作的商,ah儲存除法操作的餘數;如果除數為16位,則ax儲存除法操作的商,dx儲存除法操作的餘數。

jmp1. 依據位移進行轉移的 jmp 指令:

(1) jmp short 標號

這種 jmp指令實現的是段內短轉移,它對ip的修改範圍為 -128-127 。

實際上,「jmp short 標號」的功能為:(ip)=(ip)+8位位移

8位位移=標號處的位址-jmp指令後的第乙個位元組的位址。

short指明此處的位移為8位位移。

8位位移用補碼表示。

8位位移由編譯程式在編譯時算出。

(2)jmp near ptr 標號

這種 jmp 指令實現的是段內近轉移。

實際上,「jmp near 標號」的功能為:(ip)=(ip)+16位位移

2. 轉移的目的位址在指令中的 jmp 指令

jmp far ptr 標號  實現的是段間轉移,又稱為遠轉移。

3. 轉移位址在暫存器中的 jmp 指令

指令格式:jmp 16位 reg

功能:(ip)=(16位reg)

4.轉移位址在記憶體單元中的 jmp 指令

(1)jmp word ptr 記憶體單元位址

(2)jmp dword ptr 記憶體單元位址(段間轉移)

jcxz(jump if cx = zero)

指令格式:jcxz 標號

操作:當 cx=0 時,(ip)=(ip)+8位位移

retret指令用棧中的資料,修改ip的內容,從而實現近轉移;

cpu執行 ret 指令時,進行下面兩步操作:

(1)(ip)=((ss)*16+(sp))

(2)(sp)=(sp)+ 2

retf

retf指令用棧中的資料,修改cs和ip的內容,從而實現遠轉移;

cpu執行 retf 指令時,進行下面4步操作:

(1)(ip)=((ss)*16 + (sp))

(2)(sp)=(sp)+ 2

(3)(cs)=((ss)*16 + (sp))

(4)(sp)=(sp)+ 2

call

一.  依據位移進行轉移的call指令

1. call 標號(將當前的 ip 壓棧後,轉到標號處執行指令)

cpu執行這種格式的call指令後,進行如下的操作:

(1)(sp)=(sp)- 2

((ss)* 16 +(sp))=(ip)

(2)(ip)=(ip)+ 16位位移

二.  轉移的目的位址在指令中的call指令

1. call far ptr 標號

cpu執行此種格式的call指令時,進行如下的操作:

(1)(sp)=(sp)- 2

((ss)*16 + (sp))=(cs)

(sp)=(sp)- 2

((ss)*16 + (sp))=(ip)

(2)(cs)=標號所在段的段位址

(ip)=標號在段中的偏移位址

三. 轉移位址在暫存器中的call指令

call 16位 reg

功能:(sp)=(sp)- 2

((ss)*16 +(sp))=(ip)

(ip)=(reg)

四. 轉移位址在記憶體中的call指令

1. call word ptr 記憶體單元位址

功能:push ip

jmp word ptr 記憶體單元位址

2. call dwordd ptr 記憶體單元位址

功能:push cs

push ip

jmp dword ptr 記憶體單元位址

adcadc是帶進製加法指令,它利用了cf位上記錄的進製值。

指令格式:adc 操作物件1,操作物件2

功能:操作物件1=操作物件1+操作物件2+cf

sbbsbb是帶借位減法指令,它利用了cf位上記錄的借位值。

指令格式:sbb 操作物件1,操作物件2

功能:操作物件1=操作物件1-操作物件2-cf

cmpcmp是比較指令,cmp的功能相當於減法指令,只是不儲存結果,關鍵作用是對標誌暫存器的影響。

指令格式:cmp 操作物件1,操作物件2

功能:計算操作物件1-操作物件2但不儲存結果,僅僅根據計算結果對標誌暫存器進行設定。

檢測比較結果的條件轉移指令

指令含義

檢測的相關標誌位

je等於則跳轉

zf=1

jne不等於則跳轉

zf=0

jb小於則跳轉

cf=1

jnb不小於則跳轉

cf=0

ja大於則跳轉

cf=0且zf=0

jna不大於則跳轉

cf=1且zf=1

movsb

格式:movsb

功能:將ds:si指向的記憶體單元中的位元組送入es:di中,然後根據df的值,將si和di遞增1或遞減1。

執行movsb指令相於進行下面幾步操作

(1)((es)*16+(di))=((ds)*16+(si))

(2)如果df=0則:(si)=(si)+ 1;(di)=(di)+ 1

如果df=1則:(si)=(si)- 1;(di)=(di)- 1

movsw

格式:movsw

功能:將ds:si指向的記憶體字單元中的字送入es:di中,然後根據標誌暫存器df的值,將si和di遞增2或遞減2 。

rep一般和movsb,movsw聯動

功能:rep的作用是根據cx的值,重複執行後面的串傳送指令。

pushf ,popf

pushf的功能是將標誌暫存器的值壓棧,popf的功能是從棧中彈出資料,放入標誌暫存器中。

int功能:引發中斷過程。

指令格式:int n  (n為中斷型別碼)

cpu執行int n指令,相當於引發乙個n號中斷的中斷過程,執行過程如下。

(1)取中斷型別碼n;

(2)標誌暫存器入棧,if=0,tf=0;

(3)cs、ip入棧;

(4)(ip)=(n*4),(cs)=(n*4+2)。

iret

功能:從中斷例程返回到應用程式。

相當於:

pop ip

pop cs

popf

in   out

在in和out指令中,只能使用ax或al來存放從埠中讀入的資料或要傳送到埠中的資料。訪問8位埠時,要用al;訪問16位埠時,要用ax。

對0~255以內的埠進行讀寫時:

in al,20h  ;從20h埠讀入乙個位元組

out 20h,al  ;往20h埠寫入乙個位元組

對256~65535的埠進行讀寫時,埠號放在dx中:

mov dx,3f8h  ;將埠號3f8h放入dx

in al,dx  ;從3f8h埠讀入乙個位元組

out dx,al  ;往3f8h埠寫入乙個位元組

shlshl是邏輯左移指令,它的功能為:

(1)將乙個暫存器或記憶體單元中的資料向左移位;

(2)將最後移出的一位寫入cf中;

(3)最低位用0補充。

如果移動位數大於1時,必須將移動位數放在cl中。

shrshr是邏輯右移指令,它的功能為:

(1)將乙個暫存器或記憶體單元中的資料向右移位;

(2)將最後移出的一位寫入cf中;

(3)最高位用0補充。

如果移動位數大於1時,必須將移動位數放在cl中。

sti  cli

sti,設定if=1

cli,設定if=0

組合語言 彙編指令

功能 用來進行資料傳輸。以 mov a,b 為例,相當於a b。具有以下形式 mov 暫存器,資料 mov 暫存器,暫存器 mov 暫存器,記憶體單元 mov 記憶體單元,暫存器 mov 段暫存器,暫存器 功能 用來做加法。以 add a,b 為例,相當於a a b。具有的形式,和 mov 一樣。功...

組合語言 AT T組合語言

這兩天的pwn題環境都是在linux中,採用的組合語言是 at t 格式。之前學習的是intel格式的8086彙編,今天學習了下at t組合語言。基於x86 架構的處理器所使用的彙編指令一般有兩種格式 操作intel格式at t格式 暫存器命名 push eax pushl eax 常數 立即運算元...

彙編(三)組合語言的指令格式

本篇介紹匯程式設計序功能 偽操作及組合語言的指令格式。一 匯程式設計序的主要功能 1.檢查源程式 2.檢測源程式中的語法錯誤,並給出錯誤資訊 3.產生源程式的目標程式,並給出列表檔案 lst檔案,同時給出組合語言和機器語言的檔案 4.展開巨集檔案 二 偽操作 硬指令 使cpu產生動作 並在程式執行時...