(没有遵循标题格式…因为显示的差别太小了…
控制转移指令
无条件转移指令
段内直接转移
1 | JMP SHORT 目标标号 |
段内间接转移
用寄存器或存储单元的内容
1 | JMP 字地址指针 |
段间直接转移
1 | JMP FAR PTR 目标标号 |
段间间接转移
32 位双字,前两个字节送 IP,后;两个字节送 CS
1 | JMP DWORD PTR 目标标号 |
条件转移指令
条件转移指令只能使用段内直接寻址的 8 位位移量
根据单个标志位设置情况
格式 | 标志设置 | 测试条件 |
---|---|---|
JC/JNC 地址标号 | CF=1/CF=0 | 有/无进位则转移 |
JE/JNE 地址标号 | ZF=1/ZF=0 | 结果相等/不相等则转移 |
JZ/JNZ 地址标号 | ZF=1/ZF=0 | 结果为零/不为零则转移 |
JS/JNS 地址标号 | SF=1/SF=0 | 结果为负/正则转移 |
JO/JNO 地址标号 | OF=1/OF=0 | 结果溢出/不溢出则转移 |
JP/JNP 地址标号 | PF=1/PF=0 | 奇偶位为 1/0 则转移 |
比较两个无符号数
格式 | 测试条件 |
---|---|
JA/JNBE 地址标号 | 高于/不低于等于时转移 |
JAE/JNB 地址标号 | 高于等于/不低于时转移 |
JB/JNAE 地址标号 | 低于/不高于等于时转移 |
JBE/JNA 地址标号 | 低于等于/不高于转移 |
比较两个带符号数
格式 | 测试条件 |
---|---|
JG/JNLE OPR | 大于/不小于等于时转移 |
JGE/JNL OPR | 大于等于/不小于时转移 |
JL/JNGE OPR | 小于/不大于等于时转移 |
JLE/JNG OPR | 小于等于/不大于时转移 |
测试 CX 的值为 0 则转移
1 | JCXZ 地址标号 |
循环控制指令
用 CX 寄存器作为计数器控制程序的循环,目地址只能用段内直接寻址的 8 位位移量
1 | LOOP 标号 |
1 | LOOPZ(LOOPE) 标号 |
1 | LOOPNZ(LOOPNE) 标号 |
过程调用和返回指令
CALL 子进程调用指令
段内直接近调用
1 | CALL DST |
段内间接近调用
1 | CALL DST |
段间直接远调用
1 | CALL FAR PTR DST (DST 一般为子程序名) |
段间间接远调用
1 | CALL DWORD PTR DST (DST 为双字存储器) |
RET 子程序返回指令
在子程序的末尾,使完成后返回调用处,返回地址是调用子程序时放在堆栈中的,RET 操作时返回地址出栈送 IP 寄存器 和 CS 寄存器(仅段间)
段内近返回
1 | RET |
段内带立即数近返回
允许返回地址出栈后修改的指针,便于调用程序再用 CALL 指令调用子程序前把子程序所需要的参数入栈,当子程序返回后修改指针使其指向参数入栈以前的值
1 | RET EXP |
段间远返回
1 | RET |
段间带立即数远返回
1 | RET EXP |
中断指令
CPU 暂时中止现行程序转向另一处处理程序称为中断
int 软中断
将控制转向一个型号为 n 的软中断,该中断处理程序入口地址在中断向量表的 n*4 地址处的两个存储字中,n 为类型号,可以是 0-255 的常数或常数表达式,影响 IF TF 标志位
1 | INT n |
IRET 中断返回指令
从中断程序处理程序返回主程序,恢复中断前的 CS 和 IP 的内容,软中断硬中断皆可,影响所有标志位
1 | IRET |
INTO 溢出中断指令
立即产生一个中断类型为 4 的中断,OF=0 时不起作用
1 | INTO |
处理器控制指令
标志位操作指令
对 CF DF IF 进行设置
进位位标志操作指令
1 | CLC |
方向标志操作指令
1 | CLD |
其他处理器控制指令
都不影响标志位
NOP 空操作指令
不执行任何操作,其机器码占用一个字节单元,通常用于调试程序时替代被删除指令的机器码而无须重新汇编链接;或在延时程序中作为延时时间的调节
1 | NOP |
HLT 停机指令
使处理器暂停不进行任何操作,当 CPU 发生复位或来自外部的中断时,脱离暂停状态。用于程序中断等待,在 PC 机中会引发死机,一般的应用程序不要使用
1 | HLT |
WAIT 等待指令
使处理器处于空转等待状态,不做任何操作,也可以用来等待外部中断的发生,但中断结束后仍然返回 WAIT 继续等待;可用于与 ESC 指令配合等待协处理器的执行结果
1 | WAIT |
ESC 换码指令
指定协处理器接受指令和数据,CPU 将控制权交给协处理器,第一个数据 OP 操作码,第二个数据为操作数(寄存器 REG 或存储器 MEM 中的内容)
1 | ESC OP, REG/MEM |
LOCK 封锁指令
是指令前缀,与其他指令配合维持总栈的控制权不被其他处理器占有,直到与其配合的指令执行完毕
1 | LOCK 指令 |