彙編09 轉移指令的原理

2022-08-19 15:06:09 字數 2061 閱讀 5192

可以修改ip,或同時修改cs和ip的指令統稱為轉移指令。

轉移行為有很多種不同的分類方法:

根據只修改ip和同時修改cs和ip,可以分為段內轉移(jmp ax)和段間轉移(jmp 1000:0)

根據指令對ip的修改範圍不同,段內轉移又分為短轉移(ip的修改範圍為-128-127)和近轉移(ip的修改範圍-32768-32767)

8086cpu的轉移指令分為以下幾類:

1、無條件轉移指令,如jmp

2、條件轉移指令

3、迴圈指令,如loop

4、過程

5、中斷

assume cs:codesg

codesg segment

start: mov ax,offset start

s: mov ax,offset s

codesg ends

end start

第三行語句中的offset start就相當於0,因為start標號的偏移位址為0;第四句中的offset s就相當於3,因為s標號的偏移位址為3,這是由於第一條指令長度為3個位元組。

s0:	nop

nop

然後再將其他標號s處的指令直接複製過去:

mov si,offset s

mov di,offset s0

mov ax,cs:[si]

mov cs:[di],ax

使用格式:

jmp short 標號
它實現的是段內短轉移,對ip的修改範圍為-128-127,也就是說它向前轉移時最多可以越過128個位元組,向後轉移時可以最多越過127個位元組,轉移指令結束後,cs:ip應該指向標號處的指令。

值得注意的是,這個指令對應的機器碼中是沒有轉移的目的位址的,而是包含轉移的位移,編譯器根據兩點的距離計算出位移量,然後修改ip暫存器中的值,在編譯結束後的機器指令中就包含轉移位移了。相當於該指令的作用其實是(ip)=(ip)+8位位移。

對應的段內近轉移指令:

jmp near ptr 標號
他對ip的修改範圍為-32768-32767.相當於(ip)=(ip)+16位位移。

對應的遠轉移指令(段間轉移):

jmp far ptr 標號
這個指令對應的機器碼中就包含了轉移的目的位址了。

jmp可以直接加16位reg:

jmp 16位reg
它的意思就是修改ip暫存器的值,修改為對應暫存器中的值。

1、只修改ip的段內轉移:

jmp word ptr ds:[0]
相當於把對應位址的值賦值給ip暫存器,完成轉移。

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

jmp dword ptr ds:[0]
從對應記憶體位址單元中取出兩個字,低位址的那個字賦值給ip,高位址的那個字賦值給cs,完成轉移。

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

使用格式:

jcxz 標號
相當於如果cx暫存器中的值是0,就執行:

jmp short 標號
loop指令是迴圈指令,所有的迴圈指令都是短轉移,基本使用用法:

loop 標號
相當於:

(cx)--

if((cx)!=0)jmp short 標號

在上述段內轉移指令中,我們可以發現這些指令對應的機器碼中只有轉移的相對位移,而不包含轉移的目的位址,這種設計是為了方便程式段在記憶體中的浮動裝配。

如果我們自定義的程式要直接引用某個寫好的目標檔案,這個檔案內部的轉移寫成段內轉移,這樣就可以保證在連線時不會出錯,不會因為該目的位址有其他內容而覆蓋。

此外還要注意位移超界的問題,如果轉移範圍出現超界,編譯器會報錯。

彙編 (七)轉移指令原理

轉移指令 可以修改ip或同時修改cs和ip的指令。概括講,就是可以控制cpu執行記憶體中某處 的指令。8086cpu轉移行為 根據轉移指令對ip的修改範圍不同,段內轉移分為 短轉移,ip修改範圍為 128 127 近轉移,ip修改範圍為 32768 32767 8086cpu轉移指令分為以下幾類 1...

9 轉移指令的原理

1 可以修改ip,或同時修改cs和ip的指令統稱為轉移指令。概括的講,轉移指令就是可以控制cpu執行記憶體中某處 的指令,8086cpu的轉移行為有兩種 1 只修改ip時,稱為段內轉移,比如 jmp ax 2 同時修改cs和ip時,稱為段間轉移,比如 jmp 1000 0 段內轉移又分為 1 短轉移...

9 轉移指令的原理

1.可以修改ip,或同時修改cs和ip的指令統稱轉移指令。概括地講,轉移指令就是可以控制cpu執行記憶體中某處 的指令。2.8086cpu的轉移行為有以下幾種 1 只修改ip時,稱為段內轉移。例如 jmp ax 2 同時修改cs和ip時,成為 段間轉移。例如 jmp 1000 0 3.由於轉移指令對...