因为逻辑运算类指令是在ALU中完成的,所以除NOT指令外,均对PF、SF及ZF有影响,使CF=OF=0,AF不确定。
(1)NOT——求反指令。
形式:NOT 操作数。
功能:操作数←操作数的每一位取反。
该指令有如下两种形式:
NOTR ; R←把R寄存的每个二进制位取反
NOTM ; M←把M寄存的每个二进制位取反
例如,设(AL)=46H,有如下语句:
NOT AL ; 语句执行后(AL)=089H
(2)AND——逻辑与指令。
形式:AND 目标操作数,源操作数。
功能:目标操作数←(目标操作数)按位逻辑与(源操作数)。
相同功能:任何位与0相与,其相应位为0;任何位与1相与,其相应位维持不变。
该指令有如下5种形式:
AND R,R ; 通用寄存器之间按位相与
AND R,Im ; 通用寄存器与立即数之间按位相与
AND M,Im ; 内存数与立即数按位相与
AND M,R ; 内存数与通用寄存器之间按位相与
AND R,M ; 通用寄存器与内存数之间按位相与
例如,设(AL)=76H,要求把其第0、1和5位清零,其指令为:
AND AL,11011100B ; 语句执行后(AL)=01010100B=54H
其计算过程如图9-4所示。
图9-4 逻辑与指令的计算过程
(3)OR——逻辑或指令。
形式:OR 目标操作数,源操作数。
功能:目标操作数←(目标操作数)按位逻辑或(源操作数)。
相同功能:任何位与1相或,其相应位置1;任何位与0相或,其相应位维持不变。
该指令有如下5种形式:
OR R,R ; 通用寄存器之间按位相或
OR R,Im ; 通用寄存器与立即数之间按位相或
OR M,Im ; 内存数与立即数按位相或
OR M,R ; 内存数与通用寄存器之间按位相或
OR R,M ; 通用寄存器与内存数之间按位相或
例如,设(BL)=46H,要求把其1、3、4和6位置为1,其指令为:
OR BL,010110108 ; 语句执行后(BL)=01011110B=5EH
其计算过程如图9-5所示。
图9-5 OR计算过程
(4)XOR——逻辑异或指令。
形式:XOR 目标操作数,源操作数。
功能:目标操作数←(目标操作数)按位逻辑异或(源操作数)。
相同功能:任何位与1相异或,其相应位取反;任何位与0相异或,其相应位维持不变。
该指令有如下5种形式:
XOR R,R ; 通用寄存器之间按位相异或
XOR R,Im ; 通用寄存器与立即数之间按位相异或
XOR M,Im ; 内存数与立即数按位相异或
XOR M,R ; 内存数与通用寄存器之间按位相异或
XOR R,M ; 通用寄存器与内存数之间按位相异或
例如,设(BL)=46H,要求把其1、3、4和6位取反,其指令为:
XOR BL,01011010B ; 语句执行后(BL)=00011100B=1CH
其计算过程如图9-6所示。
图9-6 XOR计算过程
(5)TEST——测试指令。
形式:TEST 目标操作数,源操作数。
功能:(目标操作数)按位逻辑与(源操作数),结果影响标志位。
该指令有如下5种形式:
TEST R,R ; 通用寄存器之间按位相与
TEST R,Im ; 通用寄存器与立即数之间按位相与
TEST M,Im ; 内存数与立即数按位相与
TEST M,R ; 内存数与通用寄存器之间按位相与
TEST R,M ; 通用寄存器与内存数之间按位相与
例如,设(AL)=76H,要求测试AL的第0、1和5位是否都为0,其指令为:
TEST AL,00100011B ; 语句执行后(AL)=76H。同时,可测试ZF位,若ZF=1,表示3
; 位都为0,若ZF=0,表示3位不全为0