您的位置: 网站首页 > 程序开发 > 汇编语言与微机原理教程 > 第9章 80x86的寻址方式与指令系统 > 【9.3.3 逻辑运算指令】

9.3.3 逻辑运算指令

 

9.3.3  逻辑运算指令

因为逻辑运算类指令是在ALU中完成的,所以除NOT指令外,均对PFSFZF有影响,使CF=OF=0AF不确定。

1NOT——求反指令。

形式:NOT  操作数。

功能:操作数操作数的每一位取反。

该指令有如下两种形式:

NOTR       ; R←把R寄存的每个二进制位取反

NOTM       ; M←把M寄存的每个二进制位取反

例如,设(AL=46H,有如下语句:

NOT  AL     ; 语句执行后(AL=089H

2AND——逻辑与指令。

形式:AND  目标操作数,源操作数。

功能:目标操作数←(目标操作数)按位逻辑与(源操作数)。

相同功能:任何位与0相与,其相应位为0;任何位与1相与,其相应位维持不变。

该指令有如下5种形式:

AND  R,R    ; 通用寄存器之间按位相与

AND  R,Im   ; 通用寄存器与立即数之间按位相与

AND  M,Im   ; 内存数与立即数按位相与

AND  M,R    ; 内存数与通用寄存器之间按位相与

AND  R,M    ; 通用寄存器与内存数之间按位相与

例如,设(AL=76H,要求把其第015位清零,其指令为:

AND  AL,11011100B       ; 语句执行后(AL=01010100B=54H

其计算过程如图9-4所示。

9-4  逻辑与指令的计算过程

3OR——逻辑或指令。

形式:OR  目标操作数,源操作数。

功能:目标操作数←(目标操作数)按位逻辑或(源操作数)。

相同功能:任何位与1相或,其相应位置1;任何位与0相或,其相应位维持不变。

该指令有如下5种形式:

OR R,R      ; 通用寄存器之间按位相或

OR R,Im     ; 通用寄存器与立即数之间按位相或

OR M,Im     ; 内存数与立即数按位相或

OR M,R      ; 内存数与通用寄存器之间按位相或

OR R,M      ; 通用寄存器与内存数之间按位相或

例如,设(BL=46H,要求把其1346位置为1,其指令为:

OR BL,010110108     ; 语句执行后(BL=01011110B=5EH

其计算过程如图9-5所示。

9-5  OR计算过程

4XOR——逻辑异或指令。

形式:XOR  目标操作数,源操作数。

功能:目标操作数←(目标操作数)按位逻辑异或(源操作数)。

相同功能:任何位与1相异或,其相应位取反;任何位与0相异或,其相应位维持不变。

该指令有如下5种形式:

XOR  R,R    ; 通用寄存器之间按位相异或

XOR  R,Im   ; 通用寄存器与立即数之间按位相异或

XOR  M,Im   ; 内存数与立即数按位相异或

XOR  M,R    ; 内存数与通用寄存器之间按位相异或

XOR  R,M    ; 通用寄存器与内存数之间按位相异或

例如,设(BL=46H,要求把其1346位取反,其指令为:

XOR  BL,01011010B       ; 语句执行后(BL=00011100B=1CH

其计算过程如图9-6所示。

9-6  XOR计算过程

5TEST——测试指令。

形式:TEST  目标操作数,源操作数。

功能:目标操作数)按位逻辑与源操作数),结果影响标志位。

该指令有如下5种形式:

TEST    R,R     ; 通用寄存器之间按位相与

TEST    R,Im    ; 通用寄存器与立即数之间按位相与

TEST    M,Im    ; 内存数与立即数按位相与

TEST    M,R     ; 内存数与通用寄存器之间按位相与

TEST    R,M     ; 通用寄存器与内存数之间按位相与

例如,设AL=76H,要求测试AL的第015位是否都为0,其指令为:

TEST  AL,00100011B  ; 语句执行后(AL=76H。同时,可测试ZF位,若ZF=1,表示3

; 位都为0,若ZF=0,表示3位不全为0