目录
1. 无条件转移指令
① JMP 无条件转移指令 (Jump)
JMP 目的
(1)功能:使程序无条件地转移到指令中地目的地址去执行。
(2)工作特点:
- 段间直接远转移。
段内转移,近转移:转移地范围在 − 2 7 -2^{7} −27 ~ 2 7 2^{7} 27个字节之间
段间转移,远转移:转移地范围在 − 2 15 -2^{15} −215 ~ 2 15 2^{15} 215个字节之间
直接转移:指令码直接给出转移的目的地址,目的操作数用一个标号表示。
间接转移:目标地址包含在某个16位寄存器或存储单元中,CPU需根据寄存器或存储器寻址方式,间接求出转移地址。
② CALL 过程调用指令 (Call)
CALL 过程名
(1)功能:
- 第一步,返回地址。将紧跟在CALL指令后的一条指令的地址推入堆栈。
- 第二步,转到子程序入口地址去执行相应的子程序。
(2)工作特点:
- 寻找入口地址的方法与JMP指令类似。
过程:为了实现某种特定的功能而独立编写的程序块。
过程嵌套:在过程运行中有趣调用另一个过程。
进过程调用:指令CALL和被调用的过程在同一代码段中。
原过程调用:指令CALL和被调用的过程不在同一代码段中。
③ RET 返回指令 (Return)
RET
(1)功能:从栈中弹出返回地址,使程序返回主程序继续执行。
(2)工作特点:
- 近过程返回,从栈中弹出一个字→IP,并且使
- 远过程返回,先从栈中抬出一个字→IP,并且使SP←SP + 2;再从栈中弹出一个字→
2. 条件转移指令
根据上一条指令执行后,CPU设置的状态标志位作为判别测试条件来决定是否转移。
条件操作符 标号
(1) 直接标志转移指令
指令助记符 | 测试条件 | 指令功能 |
---|---|---|
JC | CF = 1 | 有进位转移 |
JNC | CF = 0 | 无进位转移 |
JZ/JE | ZF= 1 | 结果为零/相等转移 |
JNZ/JNE | ZF = 0 | 结果不为零/不相等转移 |
JS | SF=1 | 符号位负转移 |
JNS | SF =0 | 符号为正转移 |
JO | OF =1 | 溢出 |
JNO | OF = 0 | 无溢出 |
JP/JPE | PF =1 | 奇偶位为1/为偶转移 |
JNP/JPO | PF =0 | 奇偶位为0/为奇转移 |
(2) 间接标志转移指令
指令助记符 | 测试条件 | 指令功能 |
---|---|---|
JA/JNBE | ||
JAE/JNB | ||
JB/JNAE | ||
JBE/JNA | ||
JG/JNLE | ||
JGE/JNL | ||
JL/JNGE | ||
JLE/JNG |
3. 循环控制指令
不影响任何标志。
① LOOP 循环指令 (LOOP)
LOOP 短标号
(1)功能:控制重复执行一系列指令。
(2)工作特点:
- 每循环一次,CX自动减1
- CX ≠ 0时,继续循环。
- CX = 0时,结束循环,执行LOOP之后的那条指令。
(3)要求:
- 指令执行前先将重复次数放入CX寄存器
② LOOPE / LOOPZ 相等或结果为0时循环 (Loop If Equal / Zero)
LOOPE
LOOPZ
(1)功能
- LOOPE:相等时循环。
- LOOPZ:结果为0时循环。
(2)工作特点:
- 每循环一次,CX自动减1
- CX ≠ 0 和 ZF = 1,转到指令所指定的标号后重复执行。
- CX = 0 或 ZF = 0,退出循环,执行LOOPZ/LOOPE后的那条指令。
③ LOOPNE / LOOPNZ 不相等或结果不为0时循环 (Loop If Not Equal / Zero)
LOOPNE
LOOPNZ
(1)功能
- LOOPNE:不相等时循环。
- LOOPNZ:结果不为0时循环。
(2)工作特点:
- 每循环一次,CX自动减1
- CX ≠ 0 和 ZF = 0,转到指令所指定的标号后重复执行。
- CX = 0 或 ZF = 1,退出循环,执行LOOPZ/LOOPE后的那条指令。
④ JCXZ 若CX为0时跳转 (Jump If CX )
JXCZ
(1)功能:
(2)工作特点:
- 不对CX寄存器进行自动减1。
- CX = 0,则转换到指令中标号所指定的地址处。
- CX ≠ 0 ,往下继续执行。
3. 中断指令
参看