9 轉移指令的原理

2021-08-28 07:26:44 字數 2121 閱讀 9656

1、可以修改ip,或同時修改cs和ip的指令統稱為轉移指令。概括的講,轉移指令就是可以控制cpu執行記憶體中某處**的指令,8086cpu的轉移行為有兩種

(1)只修改ip時,稱為段內轉移,比如:jmp ax

(2)同時修改cs和ip時,稱為段間轉移,比如:jmp 1000:0

段內轉移又分為

(1)短轉移:ip的修改範圍為-128~127

(2)近轉移:ip的修改範圍為-32768~32767

2、操作符offset在組合語言中是由編譯器處理的符號,他的功能是取得標號的偏移位址

3、jmp指令

jmp為無條件轉移指令,可以只修改ip,也可以同時修改cs和ip

jmp指令要給出兩種資訊

(1)轉移的目的位址

(2)轉移的距離(段間轉移、段內短轉移,段內近轉移)

4、依據位移進行轉移的jmp指令

給下面一段程式:

assume cs:codesg

codesg segment

start:mov ax,0

mov bx,0

jmp short s

add ax,1

s: inc ax

為什麼?

我們先簡單回憶一下cpu執行指令的過程

(1)從cs:ip指向記憶體單元讀取指令,讀取的指令進入指令緩衝器;

(2)(ip) = (ip)+ 所讀取指令的長度,從而指向下一條指令;

(3)執行指令。轉到1,重複這個過程。

按照這個步驟,jmp short s指令的過程如下:

(1)(cs)= 0bbdh,(ip)=0006h,cs:ip指向eb 03(jmp short s 的機器碼);

(2)讀取指令碼eb 03 進入指令緩衝器;

(3)(ip) = (ip)+ 所讀取指令的長度 = (ip)+ 2 = 0008h,cs:ip指向add ax,1;

(4)cpu執行指令緩衝器中的指令eb 03;

(5)指令eb 03執行後,(ip) = 000bh,cs:ip指向inc ax

從上面的過程中我們看到,cpu將指令eb 03 讀入後,ip指向了下一條指令,接著執行eb 03 如果沒有對ip進行修改的話,那麼,接下來cpu將執行add ax,1,可是,cpu執行的eb 03卻是一條修改ip的轉移指令,執行後cs:ip指向inc ax ,cs:0008處的add ax,1沒有被執行

在轉移指令eb 03中並沒有告訴cpu要轉移的目的位址,卻告訴了cpu要轉移的位移

實際上  ,「jmp short 符號」的功能為:(ip) = (ip)+8位位移

「jmp near ptr 標號」的功能為:(ip) = (ip)+16位位移

5、轉移的目的位址在指令中的jmp指令

「jmp far ptr 標號」實現的是段間轉移,又稱遠轉移

6、轉移位址在暫存器中的jmp指令

指令格式:jmp 16位 reg

功能: (ip) = 16位reg

7、轉移位址在記憶體中的jmp指令

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

(2)jmp dword ptr 記憶體單元位址(段間轉移) 

8、jcxz指令

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

操作:當(cx)=0時,(ip)

jcxz的功能相當於c語言中的:

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

9、loo[指令

操作:(1)(cx)= (cx)-1

(2)如果(cx)!=0,(ip) = (ip)+8位位移。

用c語言的語法表示為

(cx)--;

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

10、根據位移轉移的意義

這種設計,方便了程式段在記憶體中的浮動裝配

如果存的時位址,那麼當裝配位址發生改變時,固定位址後找不到要轉移的位址會發生報錯,如果依據位移進行轉移,就不存在這個問題

11、編譯器對轉移位移超界的檢測

根據位移進行轉移的指令,他們的轉移範圍收到轉移位移的限制,如果在源程式中出現了轉移範圍超界的問題,在編譯的時候,編譯器會報錯

9 轉移指令的原理

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

彙編 (七)轉移指令原理

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

彙編09 轉移指令的原理

可以修改ip,或同時修改cs和ip的指令統稱為轉移指令。轉移行為有很多種不同的分類方法 根據只修改ip和同時修改cs和ip,可以分為段內轉移 jmp ax 和段間轉移 jmp 1000 0 根據指令對ip的修改範圍不同,段內轉移又分為短轉移 ip的修改範圍為 128 127 和近轉移 ip的修改範圍...