程序与处理器控制指令
程序控制指令
一、转移指令
通过修改指令的偏移地址或段地址及偏移地址实现程序的转移
- 无条件转移指令 ——>条件转移指令
- 无条件转移到目标地址 ——>当具备一定条件时转移到目标地址
1.无条件转移指令
1)无条件段内转移
- 转移的目标地址在当前代码段内,段地址不改变。
- 即目标地址是16位偏移地址。
段内直接寻址
- 转移的目标地址由指令直接给出
- 格式:JMP Label(近地址标号)
- 下一条要执行的指令的偏移地址=当前IP+位移量
段内间接转移
- 转移的目标地址存放在某个16位寄存 器或存储器的某两个单元中
- 例:
- JMP MOV BX,1200H
- JMP BX
- 执行完上述指令后:
- IP=1200H
2)无条件段间转移
- 转移的目标地址不在当前代码段内。
- 目标地址为32位,包括段地址和偏移地址
段间直接转移
-
转移的目标地址由指令直接给出
-
格式:
- JMP FAR Label
段间间接转移
-
段间间接寻址
- 转移的目标地址由指令中的32位操作数给出
- 32位目标地址须存放于内存中
-
例:
- JMP DWORD PTR[BX]
2.条件转移指令
- 在满足一定条件下,程序转移到目标地址继续执行
- 条件转移指令均为段内短转移,即转移范围为: -128------+127
- 基于1个标志位状态实现转移的指令
-
JC/JNC
- 判断CF的状态。常用于两个无符号数大小比较
-
JZ/JNZ
- 判断ZF的状态。常用于循环体的结束判断
-
JO/JNO
- 判断OF的状态。常用于有符号数溢出的判断
-
JP/JPE
- 判断PF的状态。用于判断运算结果低8位中1的个数是否为偶数
-
JS /JNS
- 判断SF的状态。常用于判断数的性质
-
具体判断见书 P113