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:codesgcodesg 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的修改範圍...