7. 程序控制指令
-
转移指令
1.无条件转移指令
格式: JMP OPRD 1> 无条件段内转移 (目标地址在当前代码段内,段地址不变,即目标地址为16位偏移地址) 1.段内直接转移:转移目标地址直接由指令给出(下一条指令地址 = IP + 位移量) JMP Lable(近地址标号) 2.段内间接转移:转移目标地址存放在某个16位寄存器或存储器的某两个单元中 例1: MOV BX,1200H JMP BX 例2: MOV BX,1200 JMP WORD PTR[BX] (取1200和1201作为转移的目) 2>无条件段间转移(转移的目标地址不在当前的代码段,目标地址为32位,包括段地址和偏移地址) 1.段间直接转移:转移目标地址由指令直接给出 JMP FAR Lable(远地址符号) 2.短间间接寻址:转移的目标地址由指令中的32位操作数给出,32位目标地址须放在内存中 例: JMP DWORD PTR[BX] (double word: IP:低16位 CS:高16位)
2.条件转移指令
1>基于一个标志位状态实现转移的指令 (1/0) JC/JNZ 判断 CF 状态,常用于两个无符号数比较大小 (1/0) JZ/JNZ 判断 ZF 状态,常用于循环体的结束判断 (1/0) JO/JNO 判断 OF 状态,常用于有符号溢出的判断 (1) JP/JPE (0) JNP/JPO 判断 PF 状态,用于判断运算结果低八位中1的个数是否为偶数 (1/0) JS/JNS 判断 SF 的状态,常用于判断数的性质 2>基于2个或3个标志位状态实现转移的指令 JA/JAE/JB/JBE 判断CF或CF+ZF的状态,常用于无符号数比较大小 JG/JGE/JL/JLE 判断SF+OF或SF+OF+ZF的状态,常用于有符号数大小的比较 3>基于 CX 内容转移的指令 JCXZ 可根据指令执行后 CX 的结果实现转移
-
循环控制
1.循环范围 当前 IP 为中心的-128 ~ +127范围内循环
2.循环次数 由 CX 寄存器