可以修改IP(段内转移),或者能够同时修改IP和CS的指令(段间转移)称为转移指令
8086汇编中的转移指令可以分为以下几类:
- 无条件转移指令(eg. jmp)
- 条件转移指令
- 循环指令(eg. loop)
- 过程
- 中断
jmp 指令
jmp指令是无条件转移指令,根据转移的范围,可以分为3类
- jmp short 段内短转移指令(对IP的修改范围为-128~127)
- jmp near ptr 段内近转移指令(对IP的修改范围为-32768~32767)
- jmp far ptr 远转移指令(实现段间转移) *在emu8086中无法使用
在实际的处理中,编译器会根据实际的转移距离选择合适的指令,所以只需要使用 jmp label/reg 即可
jmp指令还可以用内存单元中的地址修改IP与CS
- jmp word ptr [Address] 用内存单元中的地址实现段内转移
- jmp dword ptr [Address] 用内存单元中的地址实现段间转移(低位修改IP,高位修改CS)
jcxz 条件转移指令
jcxz执行的是短转移,对IP的修改范围是-128~127
跳转由cx控制,当 cx == 0 时进行跳转,否则继续执行
用C的风格描述则是:
if (cx == 0) jmp short label
loop 循环指令
loop指令也是短转移语句,它可以分为两步:
- dec cx
- if (cx != 0) jmp short label