汇编指令对应机器码表
网上的信息都太乱了,索性整理了一下。分享一下成果
一、状态寄存器
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 | 有进位 |
JNC | 73 | C=0 | 无进位 |
JZ/JE | 74 | Z=1 | 零/等于 |
JNZ/JNE | 75 | Z=0 | 不为零/不等于 |
JS | 78 | S=1 | 负号 |
JNS | 79 | S=0 | 正号 |
JO | 70 | O=1 | 有溢出 |
JNO | 71 | O=0 | 无溢出 |
JP/JPE | 7A | P=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 <= | 小于或等于/不大于 |
四、无条件转移指令
操作码 | 伪码指令 | 含义 | ||||
---|---|---|---|---|---|---|
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位寻址方式
操作码 | 伪码指令 | 跳转含义 | 跳转类型 | 跳转的条件(标志位) | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
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位寄存器