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存儲除法操作的餘數。
jmp
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 标号 實作的是段間轉移,又稱為遠轉移。
功能:(CS)= 标号所在段的段位址,(IP)= 标号所在段中的偏移位址
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位位移
ret
ret指令用棧中的資料,修改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 記憶體單元位址
adc
adc是帶進位加法指令,它利用了CF位上記錄的進位值。
指令格式:adc 操作對象1,操作對象2
功能:操作對象1=操作對象1+操作對象2+CF
sbb
sbb是帶借位減法指令,它利用了CF位上記錄的借位值。
指令格式:sbb 操作對象1,操作對象2
功能:操作對象1=操作對象1-操作對象2-CF
cmp
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
格式: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端口寫入一個位元組
shl
shl是邏輯左移指令,它的功能為:
(1)将一個寄存器或記憶體單元中的資料向左移位;
(2)将最後移出的一位寫入CF中;
(3)最低位用0補充。
如果移動位數大于1時,必須将移動位數放在cl中。
shr
shr是邏輯右移指令,它的功能為:
(1)将一個寄存器或記憶體單元中的資料向右移位;
(2)将最後移出的一位寫入CF中;
(3)最高位用0補充。
如果移動位數大于1時,必須将移動位數放在cl中。
sti cli
sti,設定IF=1
cli,設定IF=0