組合語言 彙編指令

2022-09-01 08:15:10 字數 4600 閱讀 4902

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

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

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

功能:用來做加法。

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

具有的形式,和 mov 一樣。

功能:用來做減法。

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

具有的形式,和 mov 一樣。

功能:用來自增,自減

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

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

功能:入棧

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

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

功能:出棧

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

具有形式和push相同

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

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

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

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

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

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

功能:乘法指令

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

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

功能:除法指令

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

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

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

1. 依據位移進行轉移的 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 標號

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

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

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

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

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

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指令

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 記憶體單元位址

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

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

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

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

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

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

cmp是比較指令,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

功能:將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

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

一般和movsb,movsw聯動

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

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

功能:引發中斷過程。

指令格式: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)。

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

相當於:

pop ip

pop cs

popf

在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埠寫入乙個位元組

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

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

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

(3)最低位用0補充。

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

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

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

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

(3)最高位用0補充。

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

sti,設定if=1

cli,設定if=0

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

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

組合語言 傳送指令

一.傳送指令 1.通用傳送指令mov mov dst,src 將src傳送到dst中 dstsrc操作位數 mem reg imm8 16 mem reg seg reg8 16 reg seg mem 8 16 mem reg seg 8 16 imm是立即數,reg是暫存器,seg是段暫存器,m...

組合語言常用指令

上次說到組合語言十分重要,所以又為了避免忘記,貼上一些常用彙編指令 mov 指令範例 mov r1,8 mov r2,r1 mov r3,10 mvn 傳送取反賦值 mvn r1,0b10 mvn r2,5 mvn r3,r1 sub 減法 目的暫存器 被減數 不能是立即數 減數 mov r2,4 ...