王爽組合語言學習筆記(九) 轉移指令的原理

2021-06-27 11:47:20 字數 1933 閱讀 9458



1 可以修改ip

,或者同時修改cs和

ip的指令統稱為轉移指令。

2 段內轉移:只修改

ip 段間轉移:同時修改cs和

ip 3 offset 取得標號的偏移位址

4 jmp為無條件轉移指令,可以只修改

ip,也可以同時修改cs和

ip a)依據位移進行轉移的

jmp指令

jmp short 標號 段內短轉移

由圖中可發現,jmp 0008

的機器碼為

eb03

,這個機器碼中不包含轉移的目的位址,

cpu在執行

jmp指令的時候並不需要轉移的目的位址,包含的是轉移的位置,這個位移是編譯器根據彙編指令中的「標號」計算出來的。

jmp short 標號的功能: 

ip = ip+8

1) 8位位移 

= 標號處的位址 

- jmp

指令後的第乙個位元組的位址; 2)

short指明此處的位移為

8位位移; 3)

8位位移的範圍

-128~12

,用補碼表示; 4)

8位位移由編譯程式在編譯時算出。

jmp near ptr 標號

1) 16位位移 

= 標號處的位址 

- jmp

指令後的第乙個位元組的位址;

2) near ptr 指明此處的位移為

16位位移,進行段內近轉移;

3) 16位位移的範圍為

-32768~32767,

用補碼表示;

4) 16位位移由編譯程式在編譯時算出。

b) 轉移的目的位址在指令中的

jmp指令

jmp far ptr 標號 段間轉移 

1) cs=標號所在的段的短位址 

ip = 

標號所在段的偏移位址

far ptr 指明了指令用標號的短位址和偏移位址修改cs和

ip c) 轉移位址在暫存器中的指令

jmp 16位 

reg

d) 轉移位址在記憶體中的

jmp指令 

jmp word ptr 記憶體單元位址(段內轉移)

功能:從記憶體單元位址處開始存放著乙個字,記憶體單元位址可用定址方式的任一格式給出。

jmp dword ptr 記憶體單元位址

(段間轉移

功能:從記憶體單元位址處開始存放著兩個字,高位址處的字是轉移目的位址的段位址,低位址處是轉移的目的位址的偏移位址。

cs = 記憶體單元位址+2

ip = 記憶體單元位址

5 jcxz

jcxz指令為有條件轉移指令,所有的有條件轉移指令都是短轉移,在對應的機器碼中包含轉移的位移,而不是目的位址。

jcxz 標號 如果

cx = 0

,則轉移到標號處執行;

8 位位移 

= 標號處的位址 

- jcxz

指令後的第乙個位元組的位址;

8位位移的範圍

-128~127

,用補碼表示;

6 loop指令

loop指令為迴圈指令,所有的迴圈指令都是短轉移,在對應的機器碼中包含轉移的位移,而不是目的位址。

指令格式:loop 標號

1)cx = cx-1; 2) 如果

cx != 0 ip = ip + 8

位位移;

7 根據位移進行轉移的意義

jmp short 標號    

jmp near ptr 

標號 loop 

標號  

jcxz 標號

他們對ip

的修改是根據轉移目的位址和轉移起始位址之間的位移來進行的。在他們對應的機器碼中不包含轉移的目的位址,而包含的是到目的位址的位移。這種設計方便了程式段在記憶體中的浮動裝配。

《學習筆記》王爽組合語言 轉移指令原理

可以修改ip,或者可以同時修改cs和ip的指令統稱為轉移指令。8086cpu的轉移行為有以下幾類 只修改ip時,稱為段內轉移,比如 jmp ax 同時修改cs和ip時,稱為段間轉移,比如 jmp 1000 0 由於轉移指令對ip的修改範圍不同,段內轉移又分為 短轉移和近轉移 短轉移ip的修改範圍為 ...

組合語言學習筆記3(王爽)

乙個字 兩個位元組,即乙個字需要兩個記憶體單元儲存。高位址放高位位元組,低位址放低位位元組。8086cpu為16位結構,有16位資料線,一次性可傳輸16位資料,也就是說對記憶體一次性操作兩記憶體單元即為乙個字。ds暫存器通常用來存放cpu要訪問資料的段位址,eg 0 表示記憶體單元的偏移位址。mov...

組合語言 王爽 學習筆記

1 mov a,b a b不能同時為一記憶體位址!2 bx bp si di 在 中,這4個暫存器可以單個出現,或只能以4種組合出現 bx和si bx和di bp和si bp和di。如組合 bx si idata 就是合法的。另外,順便說明一點,si di不能分成兩個8位暫存器使用。3 div指令 ...