首页 > 代码库 > 汇编中的跳转指令

汇编中的跳转指令

能修改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的话,程序什么都不做,直接往下执行