第九章
转移指令的分类
只修改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