修改CS、IP的指令(學習匯編)


在CPU中,程序員能夠用指令讀寫的部件只有寄存器,程序員可以通過改變寄存器中的內容實現對CPU的控制。CPU從何處執行指令是由CS、IP中的內容決定的,程序員可以通過改變CS、IP中的內容來控制CPU執行目標指令。

我們如何改變CS、IP的值呢?顯然,8086CPU必須提供相應的指令。我們如何修改AX中的值?可以用mov指令,如mov ax,123將ax中的值設為123,顯然,我們也可以用同樣的方法設置其他寄存器的值,如mov bx,123,mov cx,123,mov dx,123等。其實,8086CPU大部分寄存器的值,都可以用mov指令來改變,mov指令被稱為傳送指令。

但是,mov指令不能用於設置CS、IP的值,原因很簡單,因為8086CPU沒有提供這樣的功能。8086CPU為CS、IP提供了另外的指令來 改變它們的值。能夠改變CS、IP的內容的指令被統稱為轉移指令(我們以后會深入研究)。我們現在介紹一個最簡單的可以修改CS、IP的指令:jmp指 令。

若想同時修改CS、IP的內容,可用形如"jmp段地址:偏移地址"的指令完成,如

jmp 2AE3:3,執行后:CS=2AE3H,IP=0003H,CPU將從2AE33H處讀取指令。

jmp 3:0B16,執行后:CS=0003H,IP=0B16H,CPU將從00B46H處讀取指令。

"jmp 段地址:偏移地址"指令的功能為:用指令中給出的段地址修改CS,偏移地址修改IP。

若想僅修改IP的內容,可用形如"jmp 某一合法寄存器"的指令完成,如

jmp ax,指令執行前:ax=1000H,CS=2000H,IP=0003H
指令執行后:ax=1000H,CS=2000H,IP=1000H
jmp bx,指令執行前:bx=0B16H,CS=2000H,IP=0003H
指令執行后:bx=0B16H,CS=2000H,IP=0B16H

"jmp 某一合法寄存器"指令的功能為:用寄存器中的值修改IP。

jmp ax,在含義上好似:mov IP,ax。

注意,我們在適當的時候,會用已知的匯編指令的語法來描述新學的匯編指令的功能。采用一種"用匯編解釋匯編"的方法來使讀者更好地理解匯編指令的功 能,這樣做有助於讀者進行知識的相互融會。要強調的是,我們是用"已知的匯編指令的語法"進行描述,並不是用"已知的匯編指令"來描述,比如,我們用 mov IP,ax來描述jmp ax,並不是說真有mov IP,ax這樣的指令,而是用mov指令的語法來說明jmp指令的功能。我們可以用同樣的方法描述jmp 3:01B6的功能:jmp 3:01B6 在含義上好似mov CS,3  mov IP,01B6。

內存中存放的機器碼和對應的匯編指令情況如圖2.27所示,設CPU初始狀態:CS=2000H,IP=0000H,請寫出指令執行序列。思考后看分析。

 
圖2.27  內存中存放的機器碼和對應的匯編指令

分析:

CPU對圖2.27中的指令的執行過程如下。

(1) 當前CS=2000H,IP=0000H,則CPU從內存2000H×16+0=20000H處讀取指令,讀入的指令是:B8 22 66(mov ax,6622H),讀入后IP=IP+3=0003H;

(2) 指令執行后,CS=2000H,IP=0003H,則CPU從內存2000H×16+0003H =20003H處讀取指令,讀入的指令是:EA 03 00 00 10(jmp 1000:0003),讀入后IP=IP+5=0008H;

(3) 指令執行后,CS=1000H,IP=0003H,則CPU從內存1000H×16+0003H =10003H處讀取指令,讀入的指令是:B8 00 00(mov ax,0000),讀入后IP=IP+3=0006H;

(4) 指令執行后,CS=1000H,IP=0006H,則CPU從內存1000H×16+0006H =10006H處讀取指令,讀入的指令是:8B D8(mov bx,ax),讀入后IP=IP+2=0008H;

(5) 指令執行后,CS=1000H,IP=0008H,則CPU從內存1000H×16+0008H =10008H處讀取指令,讀入的指令是:FF E3(jmp bx),讀入后IP=IP+2=000AH;

(6) 指令執行后,CS=1000H,IP=0000H,CPU從內存10000H處讀取指令……

經分析后,可知指令執行序列為:

(1) mov ax,6622H

(2) jmp 1000:3

(3) mov ax,0000

(4) mov bx,ax

(5) jmp bx

(6) mov ax,0123H

(7) 轉到第3步執行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM