第九章

转移指令的分类

只修改IP ,称作 段内转移
同时修改cs和ip 称作 段间转移

由于转移指令对IP的修改范围不同
短转移 : IP 8位补码 -128 ~ 127
近转移 : IP 16位补码 -32768 ~ 32767

8086CPU的转移指令可分为以下几类:

  • 无条件转移指令
  • 条件转移指令
  • 循环转移指令
  • 过程
  • 中断

offset

offset是汇编的一个操作符, 它的作用是获得 标号的偏移地址

jmp指令

依据位移进行短转移

jmp short 标号
jmp是无条件转移指令, 它的作用是修改 IP
jmp指令原理:
复习CPU 执行指令的过程:

  • 将CS:IP 对应的机器码放入 指令缓冲器
  • 将IP 设置为下一条指令的偏移量
  • 执行指令缓冲器里的内容

在编译的过程中, 编译器通过计算得到jmp指令的下一条指令的偏移量和目标偏移量的距离, 然后让IP = IP + 计算出的偏移量 实现修改IP

jmp指令是8位补码的短位移

转移的目的地址在指令中

jmp far ptr 标号
实现的是段间转移, 又称为远转移
功能: (CS) = 标号所在的段地址;
(IP) = 标号所在的偏移地址;

转移地址在寄存器

jmp 16位大小的register
功能: (IP) = ( register)

转移地址在内存中

格式1: ** **jmp word ptr 内存单元地址(段内地址)
功能: 16位的字的近转移
(IP) = (目标单元)

格式2: jmp dword ptr 内存单元地址(段间地址)
功能: 得到目标地址两个字32位的内存内容, 高地址处的字是转移的目标段地址, 低字是目标偏移地址
(CS) = (目标单元+2)
(IP) = (目标单元)

jcxz指令

jcxz是条件转移指令, 到这一行时, 如果cx的值为0 , 则修改IP为目标段的偏移
所有的条件转移指令都是8 位 的短转移指令

loop指令

所有的循环指令都是短转移. ip修改范围都是 -128~127