X86彙編5.高級指令詳解

最近學習了X86彙編,其實無論是古老的8086還是現在i3/5/7/9,Xeon3/5,在最基本原理上,都是相通的,只是CPU位數,尋址空間,寄存器個數,指令集的擴充等方面有所不同,對於學習,8086永不過時。

轉移指令
1.轉移指令分類:
(1)無條件轉移指令,如: jmp
(2)條件轉移指令
(3)循環指令,如: loop
(4)過程
(5)中斷

操作符
1.offset
釋義:由編譯器處理的符號,功能是取得標號的偏移地址
start: mov ax,offset start ;相當於mov ax, 0
s: mov ax, offset s ;相當於mov ax, 3

高級指令
1.jmp指令
釋義: 無條件轉移指令,可以只修改IP,也可以同時修改CS和IP。
jmp指令要給出兩種信息:
(1)轉移的目的地址
(2)轉移的距離(段時間轉移、段內短轉移,段內近轉移)
1)依據位移進行轉移的jmp指令:
jmp short 標號(轉到標號處執行指令)
這種指令格式的jmp指令實現的是段內轉移,它對IP的修改範圍是:-128 ~ 127,也就是說,它向前轉移時最多128字節,向後最多127.
jmp near ptr 標號,功能爲:(IP)= (IP)+ 16
2)轉移的目的地址在指令中的jmp指令
jmp far ptr 標號,實現段間轉移,又稱遠轉移
(CS) = 標號所在段的段地址,(IP) = 標號在段中的偏移地址
far ptr指明瞭指令用標號的段地址和偏移地址修改CS和IP
3)轉移地址在寄存器中的jmp指令
指令格式:jmp 16位 reg
4)轉移地址在內存中的jmp指令
jmp word ptr 內存單元地址(段內轉移) ;功能:從內存單元地址處開始存放一個字,是轉移的目的偏移地址
內存單元地址可用尋址方式的任一格式給出
jmp dword ptr 內存單元地址(段間轉移) ;功能:從內存單元地址處開始存放兩個字,高地址處的字是轉移的目的段地址,低地址處是轉移的目的偏移地址。

2.jcxz指令
jcxz指令是有條件轉移指令,所有的有條件轉移指令都是短轉移,在對應的機器碼中包含轉移的位移,而不是目的地址。對於IP的修改範圍都是:-128 ~ 127
指令格式:jcxz 標號

3.loop指令
loop指令爲循環指令,所有的循環指令都是短轉移,在對應的機器碼中包含轉移的位移,而不是目的地址。對IP的修改範圍都是:-128 ~ 127。
指令格式:loop 標號

3.call指令
執行call指令時,進行兩步操作
(1)將當前IP或CS和IP壓入棧,(sp) = (sp)-2 , ((ss)*16 + (sp)) = IP
(2)轉移, (IP) = (IP)+ 16
指令格式:call 標號
call指令不能實現短轉移,除此之外,call和jmp原理相同。
call far ptr 標號 ;實現段間轉移
call 16位reg ;轉移地址在寄存器中的call指令
call word ptr 內存單元地址 ;轉移地址在內存單元中的call指令
call dword ptr 內存單元地址 ;轉移地址在內存單元中的call指令

4.ret指令
ret指令用棧中的數據,修改IP的內容,從而實現近轉移
指令格式:ret

5.retf指令
retf指令用棧中的數據,修改CS和IP的內容,從而實現元轉移
指令格式:retf

6.movsb指令
將ds:si指向的內存單元中的字節送入es:di,然後根據df值遞增或遞減
執行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
指令格式:movsb
相關指令:movsw、cld(df置0)、std(df置1)

7.pushf
將標誌寄存器的值壓棧

8.popf
從棧中彈出數據,放入標誌寄存器

9.int指令
銀髮中斷過程
指令格式:int n
執行過程:
(1)取中斷號n
(2)標誌寄存器入棧,IF=0,TF=0
(3)CS、IP入棧
(4)(IP) = (n4) , (CS)=(n4 +2)

10.iret指令
中斷返回
指令格式:iret
int指令和iret指令的配合使用,與call和ret指令的配合使用類似。

11.in指令
讀端口
in al,20h

12.out指令
寫端口
out 20h,al

13.shl和shr指令
shl是左移指令,shr是右移指令
shl al,1 ;將al中的數據左移一位
shr al,1 ;將al中的數據右移一位

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章