逻辑运算指令除NOT指令外,均有两个操作数。
注意事项:
(1)如果指令有两个操作数,最多只能有一个操作数为存储器;
(2)只有通用寄存器或存储器操作数可作为目的操作数,用于存放运算结果;
(3)如果只有一个操作数,则该操作数既是源操作数也是目的操作数;
(4)操作数可以是字节,也可以是字,如果是两个操作数,类型必须一致;
(5)对于存储器操作数可采用 [BX+S1+位移量] 四种寻址方式;
(1)否操作指令NOT
NOT OPRD
将OPRD取反,然后送回OPRD
(2)与操作指令AND
AND OPRD1,OPRD2
对两个操作数进行按位“与”运算,结果送入目的操作数OPRD1
AND DH,DH
AND AX,ES:[SI]
该指令执行后,CF=0,OF=0,PF,ZF,SF反映运算结果,AF未定义
某个操作数自己和自己做“与”运算,值不变,但是CF清0。与操作指令主要用在使一个操作数中的若干位维持不变,而另外若干位清0的场合。
MOV AL,34H ;AL=34H
AND AL,0FH ;AL=04H
(3)或运算指令OR
OR OPRD1,OPRD2
对两个操作数进行按位的逻辑“或”运算,结果送入OPRD1
OR AX,8080H
OR CL,AL
OR [BX-3],AX
OR指令执行后,CF=0,OF=0,标志PF,ZF,SF反映运算结果,标志AF未定义某个操作数与自己本身进行或运算,值不变,但CF清0。
主要用于使一个操作数不变,而另外若干位置1的场合。
MOV AL,41H ;AL=01000001B
OR AL,20 H ;AL=01100001B
(4)异或操作指令XOR
XOR OPRD1,OPRD2
两个操作数按位进行“异或”运算,结果送入OPRD1
如果操作自己与自己进行异或运算,则结果为0,CF=0
XOR DX,DX ;DX=0,CF=0
异或操作指令主要用于是一个操作数若干位维持不变,而另外若干位取反场合。
MOV AL,34H ;AL=00110100B
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