一、状态寄存器
PSW(Program Flag)程序状态字寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成,如下所示:
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| | | | OF | DF | IF | TF | SF | ZF | | AF | | PF | | CF |
条件码:
①OF(Overflow Flag)溢出标志。溢出时为1,否则置0。
②SF(Sign Flag)符号标志。结果为负时置1,否则置0.
③ZF(Zero Flag)零标志,运算结果为0时ZF位置1,否则置0.
④CF(Carry Flag)进位标志,进位时置1,否则置0.
⑤AF(Auxiliary carry Flag)辅助进位标志,记录运算时第3位(半个字节)产生的进位置。有进位时1,否则置0.
⑥PF(Parity Flag)奇偶标志。结果操作数中1的个数为偶数时置1,否则置0.
控制标志位:
⑦DF(Direction Flag)方向标志,在串处理指令中控制信息的方向。
⑧IF(Interrupt Flag)中断标志。
⑨TF(Trap Flag)陷井标志。
二、 直接标志转移(8位寻址)
指令格式 | 机器码 | 测试条件 | 如...则转移 | | 指令格式 | 机器码 | 测试条件 | 如...则转移 |
JC | 72 | C=1 | 有进位 | JNS | 79 | S=0 | 正号 | |
JNC | 73 | C=0 | 无进位 | JO | 70 | O=1 | 有溢出 | |
JZ/JE | 74 | Z=1 | 零/等于 | JNO | 71 | O=0 | 无溢出 | |
JNZ/JNE | 75 | Z=0 | 不为零/不等于 | JP/JPE | 7A | P=1 | 奇偶位为偶 | |
JS | 78 | S=1 | 负号 | JNP/IPO | 7B | P=0 | 奇偶位为奇 |
三、间接标志转移(8位寻址)
指令格式 | 机器码 | 测试格式 | 如...则转移 |
JA/JNBE(比较无符号数) | 77 | C或Z=0 | > 高于/不低于或等于 |
JAE/JNB(比较无符号数) | 73 | C=0 | >= 高于或等于/不低于 |
JB/JNAE(比较无符号数) | 72 | C=1 | < 低于/不高于或等于 |
JBE/JNA(比较无符号数) | 76 | C或Z=1 | <= 低于或等于/不高于 |
JG/JNLE(比较带符号数) | 7F | (S异或O)或Z=0 | > 大于/不小于或等于 |
JGE/JNL(比较带符号数) | 7D | S异或O=0 | >= 大于或等于/不小于 |
JL/JNGE(比较带符号数) | 7C | S异或O=1 | < 小于/不大于或等于 |
JLE/JNG(比较带符号数) | 7E | (S异或O)或Z=1 | <= 小于或等于/不大于 |
四、无条件转移指令(fisheep译 [email protected])
操作码 | 伪码指令 | 含义 |
EB cb | JMP rel8 | 相对短跳转(8位),使rel8处的代码位下一条指令 |
E9 cw | JMP rel16 | 相对跳转(16位),使rel16处的代码位下一条指令 |
FF /4 | JMP r/m16 | 绝对跳转(16位),下一指令地址在r/m16中给出 |
FF /4 | JMP r/m32 | 绝对跳转(32位),下一指令地址在r/m32中给出 |
EA cb | JMP ptr16:16 | 远距离绝对跳转, 下一指令地址在操作数中 |
EA cb | JMP ptr16:32 | 远距离绝对跳转, 下一指令地址在操作数中 |
FF /5 | JMP m16:16 | 远距离绝对跳转, 下一指令地址在内存m16:16中 |
FF /5 | JMP m16:32 | 远距离绝对跳转, 下一指令地址在内存m16:32中 |
五、16位/32位寻址方式(fisheep译 [email protected])
操作码 | 伪码指令 | 跳转含义 | 跳转类型 | 跳转的条件(标志位) | |
0F 87 cw/cd | JA rel16/32 | 大于 | near | (CF=0 and ZF=0) | |
0F 83 cw/cd | JAE rel16/32 | 大于等于 | near | (CF=0) | |
0F 82 cw/cd | JB rel16/32 | 小于 | near | (CF=1) | |
0F 86 cw/cd | JBE rel16/32 | 小于等于 | near | (CF=1 or ZF=1) | |
0F 82 cw/cd | JC rel16/32 | 进位 | near | (CF=1) | |
0F 84 cw/cd | JE rel16/32 | 等于 | near | (ZF=1) | |
0F 84 cw/cd | JZ rel16/32 | 为0 | near | (ZF=1) | |
0F 8F cw/cd | JG rel16/32 | 大于 | near | (ZF=0 and SF=OF) | |
0F 8D cw/cd | JGE rel16/32 | 大于等于 | near | (SF=OF) | |
0F 8C cw/cd | JL rel16/32 | 小于 | near | (SF<>OF) | |
0F 8E cw/cd | JLE rel16/32 | 小于等于 | near | (ZF=1 or SF<>OF) | |
0F 86 cw/cd | JNA rel16/32 | 不大于 | near | (CF=1 or ZF=1) | |
0F 82 cw/cd | JNAE rel16/32 | 不大于等于 | near | (CF=1) | |
0F 83 cw/cd | JNB rel16/32 | 不小于 | near | (CF=0) | |
0F 87 cw/cd | JNBE rel16/32 | 不小于等于 | near | (CF=0 and ZF=0) | |
0F 83 cw/cd | JNC rel16/32 | 不进位 | near | (CF=0) | |
0F 85 cw/cd | JNE rel16/32 | 不等于 | near | (ZF=0) | |
0F 8E cw/cd | JNG rel16/32 | 不大于 | near | (ZF=1 or SF<>OF) | |
0F 8C cw/cd | JNGE rel16/32 | 不大于等于 | near | (SF<>OF) | |
0F 8D cw/cd | JNL rel16/32 | 不小于 | near | (SF=OF) | |
0F 8F cw/cd | JNLE rel16/32 | 不小于等于 | near | (ZF=0 and SF=OF) | |
0F 81 cw/cd | JNO rel16/32 | 未溢出 | near | (OF=0) | |
0F 8B cw/cd | JNP rel16/32 | 不是偶数 | near | (PF=0) | |
0F 89 cw/cd | JNS rel16/32 | 非负数 | near | (SF=0) | |
0F 85 cw/cd | JNZ rel16/32 | 非零(不等于) | near | (ZF=0) | |
0F 80 cw/cd | JO rel16/32 | 溢出 | near | (OF=1) | |
0F 8A cw/cd | JP rel16/32 | 偶数 | near | (PF=1) | |
0F 8A cw/cd | JPE rel16/32 | 偶数 | near | (PF=1) | |
0F 8B cw/cd | JPO rel16/32 | 奇数 | near | (PF=0) | |
0F 88 cw/cd | JS rel16/32 | 负数 | near | (SF=1) | |
0F 84 cw/cd | JZ rel16/32 | 为零(等于) | near | (ZF=1) |
注:一些指令操作数的含义说明:
rel8 表示 8 位相对地址
rel16 表示 16 位相对地址
rel16/32 表示 16或32 位相对地址
r/m16 表示16位寄存器
r/m32 表示32位寄存器
以上文章来自于:KSSD