逻辑运算指令除NOT指令外,均有两个操作数。
注意事项:
(1)如果指令有两个操作数,最多只能有一个操作数为存储器;
(2)只有通用寄存器或存储器操作数可作为目的操作数,用于存放运算结果;
(3)如果只有一个操作数,则该操作数既是源操作数也是目的操作数;
(4)操作数可以是字节,也可以是字,如果是两个操作数,类型必须一致;
(5)对于存储器操作数可采用 [BX+S1+位移量] 四种寻址方式;

(1)否操作指令NOT

NOT OPRD
将OPRD取反,然后送回OPRD

(2)与操作指令AND

AND OPRD1,OPRD2
对两个操作数进行按位“与”运算,结果送入目的操作数OPRD1

  1. AND DH,DH
  2. AND AX,ES:[SI]

该指令执行后,CF=0,OF=0,PF,ZF,SF反映运算结果,AF未定义
某个操作数自己和自己做“与”运算,值不变,但是CF清0。与操作指令主要用在使一个操作数中的若干位维持不变,而另外若干位清0的场合。

  1. MOV AL,34H ;AL=34H
  2. AND AL,0FH ;AL=04H

(3)或运算指令OR

OR OPRD1,OPRD2
对两个操作数进行按位的逻辑“或”运算,结果送入OPRD1

  1. OR AX,8080H
  2. OR CL,AL
  3. OR [BX-3],AX

OR指令执行后,CF=0,OF=0,标志PF,ZF,SF反映运算结果,标志AF未定义某个操作数与自己本身进行或运算,值不变,但CF清0。
主要用于使一个操作数不变,而另外若干位置1的场合。

  1. MOV AL,41H ;AL=01000001B
  2. OR AL,20 H ;AL=01100001B

(4)异或操作指令XOR

XOR OPRD1,OPRD2
两个操作数按位进行“异或”运算,结果送入OPRD1
如果操作自己与自己进行异或运算,则结果为0,CF=0

  1. XOR DX,DX ;DX=0,CF=0

异或操作指令主要用于是一个操作数若干位维持不变,而另外若干位取反场合。

  1. MOV AL,34H ;AL=00110100B
  2. XOR AL,0FH ;AL=00111011B

(5)测试指令TEST

TEST OPRD1,OPRD2
这条指令与AND指令类似,两个操作数按位进行“与”操作,但是结果不送入OPRD1,仅仅影响标志位。
该指令执行后,标志ZF,PF,SF反映运算结果,标志CF,OF被清零通常用于检测某些位是否为1,但又不希望改变原操作数的值的场合。
例:检查AL中的位6和位2是否有一位为1:TEST AL,01000100B
如果位6和位2全部为0,则ZF=1,否则ZF=0