9.1 转移 综述
转移按转移行为分为段内转移和段间转移:
- 段内转移:只修改IP,jmp ax
- 段间转移:修改CS:IP,jmp,1000:0
转移按IP修改范围不同分为段内短转移和段内近转移: - 段内短转移:-128~127
- 段内近转移:-32768~32767
转移按转移指令不同分为: - 无条件转移指令:jmp
- 条件转移指令:jcxz
- 循环指令:loop
- 过程
- 中断
9.2 offset 标号
利用:如果不知道当前代码位置的偏移地址就可以在这段代码前加上标号,然后offset 标号,就会显示当前代码的偏移地址。
9.3 jmp指令
段内/段间转移区别
jmp命令对于段内
的转移并不是直接跳转到目标地址,而是包含着跳转到指令的相对位置。
例如:源IP=0003,jmp 0008的内存单元中存储的是EB05(内存单元数据)+0003(jmp下条指令的IP)=0008(目标转移地址)。
对于段间的转移
就是直接通过CS:IP的直接指定来进行跳转,直接跳转到目标地址。
段内短转移与近转移
jmp小结
9.4 jcxz
如果cx=0,则转移到标号执行,cx!=0,向下执行程序。
9.5 loop
loop也不是直接转移到目的地址而是用的包含着跳转到指令的相对位置。
用跳转到的地址减去loop指令的后一个地址,即0006-000A=-4,得0-4=FC。FC+0A=06