0%

8086指令基础 - 逻辑运算指令

最近在学习 16位汇编编程,所以顺便将每日所学记录下来,一方面为了巩固学习的知识,另一方面也为同样在学习汇编开发的童鞋们提供一份参考。

运行环境:

  • 操作系统: Windows 10家庭版
  • 编译器:Windows XP Debug

逻辑运算指令

AND指令

AND 指令在两个操作数的对应位之间进行(按位)逻辑与(AND)操作,并将结果存放在目标操作数中

AND指令设置CF = OF = 0,根据结果设置SF、ZF、PF状态

只有与的两位都是1,结果才是1,否则结果为0

1
2
3
4
5
AND reg, reg
AND reg, mem
AND reg, imm
AND mem, reg
AND mem, imm

demo:

1
and AL, 11110110b             ;清除位 0 和位 3 ,其他位不变

OR指令

对两个操作数执行逻辑或运算,结果送到目的操作数;

只要相”或”的两位有一位是1,结果就是1;否则则为0

1
2
3
4
5
OR reg,reg
OR reg,mem
OR reg, imm
OR mem,reg
OR mem,imm

逻辑异或XOR指令

对两个操作数执行逻辑异或运算,结果送到目的操作数;

只有相”异或”的两位不相同,结果才是1,否则为0

XOR指令设置CF = OF = 0,根据结果设置SF、ZF和PF的状态

逻辑非指令

对一个操作数执行逻辑非运算

NOT指令是取反;

1
NOT reg/mem;	reg/mem <- ~reg/mem

NOT指令是一个单操作数指令

NOT指令不会影响标志位

测试指令TEST

对两个操作数执行逻辑与运算,结果不回送到目的操作数

只有相”与”的两位都是1,结果才是1,否则,”与”的结果为0

CMP比较指令

CMP(比较)指令执行从目的操作数中减去源操作数的隐含减法操作,并且不修改任何操作数

CMP结果 ZF CF
目的操作数 < 源操作数 0 1
目的操作数 > 源操作数 0 0
目的操作数 = 源操作数 1 0