8086中的jmp相關指令
能修改CS以及IP的指令都是轉移指令。它分為段內轉移,段間轉移。
段內轉移:只修改IP的值
段間轉移:同時修改CS以及IP的值
段內轉移根據轉移的距離遠近分為:短轉移,近轉移
短轉移:轉移範圍為-128 – 127
近轉移:轉移範圍為-32768 –32767
根據轉移情況又分為:
無條件轉移指令
條件轉移指令
迴圈指令
過程
中斷
<1> jmp short xxx(行號)
這個是短轉移指令,實現段內的轉移,在翻譯成機器碼的時候,碼內並沒有目標地址,有的只是轉移位移,這樣做的好處就是防止目標地址過大的時候超出轉移的範圍。所以
jmp short xxx 本質上是 令 (IP)= (IP)+ 8bit( 轉移位移)
<2>jmp near ptr xxx(行號)
Jmp near xxx本質上是令(IP)= (IP)+16bit(轉移位移)
<3>jmp far ptr xxx(行號)
同時修改CS以及IP,能在機器碼中找到目標地址
<4>jmp reg
(IP) = (reg),修改IP的地址
<5>jmp word ptr 記憶體單元地址(段內轉移)
含義:記憶體單元存放一個字也就是兩個位元組,用來表示一個目標地址
如:
Jmp word ptr ds:[0]
Jmp word ptr [bx]
<6>jmp dword ptr 記憶體單元地址(段間轉移)
含義:記憶體單元處存放兩個字也就是4個位元組,用來表示一個目標地址
Jmp dword ptr ds:[0]
Jmp dword ptr [bx]
<7> jcxz xxx(行號)
這個顧名思義很簡單,就是當cx = 0的時候,jump,所以就是 jcxz。
這個實現的是段內的短轉移,當cx =0的時候,(IP)= (IP)+ 8bit偏移地址
<8>loop xxx(行號)
它是迴圈指令,也是短轉移指令。每次執行的過程如下:
(cx) = (cx) -1; if cx ==0,(IP) = (IP) +8bit(位移)
如果cx=0的話,程式什麼都不做,直接往下執行