您的位置:首页 > 其它

汇编指令与机器码

2016-01-16 10:18 393 查看


一、状态寄存器

PSW(Program Flag)程序状态字寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成,如下所示:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

 
 
 
  OF DFIF TF SF ZF
  AF
  PF
  CF

条件码:

①OF(OverflowFlag)溢出标志。溢出时为1,否则置0。

②SF(SignFlag)符号标志。结果为负时置1,否则置0.

③ZF(ZeroFlag)零标志,运算结果为0时ZF位置1,否则置0.

④CF(CarryFlag)进位标志,进位时置1,否则置0.

⑤AF(Auxiliarycarry
Flag)辅助进位标志,记录运算时第3位(半个字节)产生的进位置。有进位时1,否则置0.

⑥PF(ParityFlag)奇偶标志。结果操作数中1的个数为偶数时置1,否则置0.

控制标志位:

⑦DF(DirectionFlag)方向标志,在串处理指令中控制信息的方向。

⑧IF(InterruptFlag)中断标志。

⑨TF(TrapFlag)陷井标志。

二、
直接标志转移(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 JMPrel16
相对跳转(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 JNAErel16/32
不大于等于 near (CF=1)

0F 83  cw/cd JNB rel16/32不小于
near (CF=0)

0F 87  cw/cd JNBErel16/32
不小于等于 near (CF=0 andZF=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 JNGErel16/32
不大于等于 near(SF<>OF)

0F 8D  cw/cd JNL rel16/32不小于
near (SF=OF)

0F 8F  cw/cd JNLErel16/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)

0F80  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位寄存器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: