1.如何確定當前要執行指令在記憶體中的位置 IP:instruction pointer.指令指標寄存器。IP寄存器是CPU內部的一個寄存器,用來儲存將要執行的下一條指令的位移量。
CS:Code Segment.程式碼片段寄存器。CS也是CPU內部的一個寄存器,用來存放當前程式碼段的地址。
這裡涉及到8086處理器的定址方式,即 段:位移量 定址方式。一條指令(資料)再記憶體中的物理地址等於對應的段值×16再加上位移量。這樣作的原因是為了擴大16為地址線的定址空間。16根地址線只能直接定址2的16次方個位元組。用段加位移量的方式可以定址1M位元組。
CPU 通過兩個寄存器來指向程式碼片段
CS:IP 這兩個寄存器就是用來表示當前要執行的機器指令在記憶體中的位置 2. 段內直接定址8088中這種定址方式用於條件轉移和無條件轉移指令,但是,當它用於條件轉移時,位移量只允許8位。無條件轉移指令在位移量為8位時,叫短跳轉。
指令的組合語言格式為:
JMP NEAR PTR PROGIA
JMP SHORT QUEST
其中,PROGIA和QUEST均為轉向的符號地址,在機器指令中,用位移量來表示。在彙編指令中,如果位移量為16位,則在符號地址前加操作符NEAR PTR。如果位移量為8位,則在符號地址前加操作符SHORT。3.段內間接定址
轉向有效地址是一個寄存器或是儲存單元的內容,這個寄存器或儲存單元的內容可以用資料定址方式中除立即數以外的任何一種定址方式取得,所得到的轉向的有效地址用來取代IP寄存器的內容。
注意:這種定址方式以及以下的兩種段間定址方式都不能用於條件轉移指令。也就是說,條件轉移指令只能使用段內直接定址的8位位移量,而JMP和CALL指令則可以使用任何跳轉方式。
段內間接定址轉移指令的彙編格式可以表示為
JMP BX
JMP WORD PTR[BP+TABLE]
等。其中WORD PTR又稱為操作符(偽),用以指出其後的定址方式所取得的轉向地址是一個字的有效地址,也就是說它是一種段內轉移。
以上兩種定址方式均為段內轉移,所以直接把求得的轉移的有效地址送到IP寄存器就可以了。如果需要計算轉移的物理地址,則計算公式應該是:
物理地址=l 6d×(CS)十EA
其中EA即為上述轉移的有效地址
4.段間直接轉移
指令中直接提供了轉向段地址和位移地址,所以只要用指令中指定的位移地址取代IP寄存器的內容,用指令中指定的段地址取代CS寄存器的內容就完成了從一個段到另一個段的轉移操作,
這種指令的組合語言格式可表示為:
JMP FAR PTR NEXTROUTINT
其中,NEXTROUTINT為轉向的符號地址,PAR FAR 則是表示段間轉移的操作符。 5.段間間接轉移
用儲存空間中的二個相繼字的內容來取代IP和CS寄存器中的原始內容以達到段間轉移約目的。這裡儲存單元的地址是由指令指定除立即數方式和寄存器方式以外的任何一種資料定址方式取得,如所示。
這種指令的組合語言格式可表示為:
JMP DWORD PTR[INTERS+BX]
其中,[INTERS+BX]說明資料定址方式為直接變址定址方式,DWORD PTR為雙字操作符,
Ptr相當於顯示聲明,跳轉到的地址以DWORD雙字的形式訪問。說明轉向地址需要取雙字為段間轉移指令。