首页 > 代码库 > 汇编中的跳转指令
汇编中的跳转指令
能修改CS以及IP的指令都是转移指令。它分为段内转移,段间转移。
段内转移:只修改IP的值
段间转移:同时修改CS以及IP的值
段内转移根据转移的距离远近分为:短转移,近转移
短转移:转移范围为-128 – 127
近转移:转移范围为-32768 –32767
根据转移情况又分为:
无条件转移指令
条件转移指令
循环指令
过程
中断
<1> jmp short xxx(行号)
这个是短转移指令,实现段内的转移,在翻译成机器码的时候,码内并没有目标地址,有的只是转移位移,这样做的好处就是防止目标地址过大的时候超出转移的范围。所以
jmp short xxx 本质上是 令 (IP)= (IP)+ 8bit( 转移位移)
<2>jmp near 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的话,程序什么都不做,直接往下执行