计组(day6)8086指令系统——逻辑指令

知识点

    • 0. 逻辑运算指令
    • 1. 逻辑“与”指令AND
      • 1.1 AND指令应用示例
    • 2. 逻辑“或”指令OR
      • 2.1 OR指令应用示例
    • 3. 逻辑“非”指令NOT
      • 3.1 NOT指令示例
    • 4. 逻辑“异或”指令XOR
      • 4.1 XOR指令应用示例
    • 5. 测试指令TEST
      • 5.1 TEST指令应用示例

0. 逻辑运算指令

8088/8086提供的逻辑运算指令共有5条:AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)、XOR(逻辑异或)及TEST(测试)指令。
操作数: 8位或16位寄存器或存储单元
功能: 按位操作
对标志位的影响: 除NOT外,都会使CF=OF=0,AF值不定,并对SF、PF和ZF有影响。NOT指令对所有标志位都不影响。

1. 逻辑“与”指令AND

指令格式: AND destination,source ;
功能: 使源操作数和目标操作数按位相“与”,结果送回目标操作数中。
主要应用于:
(1)实现两操作数按位相“与”
(2)使目标操作数中某些位保持不变,把其他位清0.
(3)使操作数不变。但影响6个状态标志位,并使CF=OF=0.

1.1 AND指令应用示例

  1. 实现来操作数按位相“与”

    F0E0 “与” 001F = 0000

code segment
start:        
    MOV BX,0000H
    MOV [BX],0F0E0H
    MOV AX,001FH   
    AND AX,[BX]
    
    MOV AX,4C00H
    INT 21H
 
code ends
end start ;

运行结果:
计组(day6)8086指令系统——逻辑指令_第1张图片
从运行结果可以看出AND指令影响了状态标志位ZF和PF

  1. 使目标操作数中某些位保持不变,把其他位清0
    方法:保持的位AND1,清零的位AND0
    如 , 将 3FH的高4位清零第四位保持
code segment
start:        
    MOV AL,3FH 
    AND AL,0FH
    
    MOV AX,4C00H
    INT 21H
 
code ends
end start ;

计组(day6)8086指令系统——逻辑指令_第2张图片
3. 使操作数不变,但影响6个状态标志位,并使CF=OF=0。
目的是清零CF和OF标志位。

code segment
start:        
    MOV AL,3FH 
    AND AL,AL
    
    MOV AX,4C00H
    INT 21H
 
code ends
end start ;

运行结果:
计组(day6)8086指令系统——逻辑指令_第3张图片

2. 逻辑“或”指令OR

指令格式: OR destination,source ;
功能: 实现对源操作数和目标操作数按位相“或”,结果送回目标操作数中。
主要应用于:
(1)实现两操作数按位相“或”
(2)使目标操作数某些位不变,将另一些位置1
(3)使操作数不变,但影响6个状态标志位,并使CF=OF=0。

2.1 OR指令应用示例

  1. 实现两操作数按位相“或”
    34 "与“ 56 = 0011 0100 或 0101 0110 = 0111 0110 = 76H
    计组(day6)8086指令系统——逻辑指令_第4张图片
  2. 使目标操作数某些位不变,将另一些位置1
    方法: 置一的位OR1,不变的位OR0
code segment
start:        
    MOV AL,84H
    OR AL,20H
               
    MOV AX,4C00H
    INT 21H
 
code ends
end start ;

计组(day6)8086指令系统——逻辑指令_第5张图片
3. 使操作数不变,但影响6个状态标志位,并使CF=OF=0。

code segment
start:        
    MOV AL,3FH
    OR AL,AL
               
    MOV AX,4C00H
    INT 21H
 
code ends
end start ;

计组(day6)8086指令系统——逻辑指令_第6张图片

3. 逻辑“非”指令NOT

指令格式: NOT seg/mem
操作数: 单操作数
功能: 按位取反

3.1 NOT指令示例

如,将E4H按位取反
计组(day6)8086指令系统——逻辑指令_第7张图片
取反结果为1BH. 并且NOT对标志位无影响

4. 逻辑“异或”指令XOR

指令格式: XOR destination,source ;
功能: 将源操作数和目标操作数按位进行“异或”运算,结果送回目标操作数。
主要应用于:
(1)实现两操作数的异或运算
(2)将某一寄存器清零

4.1 XOR指令应用示例

  1. 实现两操作数的异或运算
    3344H 异或 1122H
code segment
start:        
    MOV AX,3344H
    XOR AX,1122H
               
    MOV AX,4C00H
    INT 21H
 
code ends
end start ;

运行结果:

计组(day6)8086指令系统——逻辑指令_第8张图片

  1. 将某一寄存器清零
    将寄存器AX清零
code segment
start:        
    MOV AX,3344H
    XOR AX,AX
               
    MOV AX,4C00H
    INT 21H
 
code ends
end start ;

运行结果:
计组(day6)8086指令系统——逻辑指令_第9张图片

5. 测试指令TEST

指令格式: TEST reg/mem
功能: 在不破坏目标操作数内容的情况下检测操作数中某些位是“1”还是“0”。
TEST AL,02H ;若AL中D1位为1,则ZF=0,否则ZF=1

5.1 TEST指令应用示例

在数据段中定义一个长32个字节的数组,并初始化数组。用TEST指令判断其中负数的个数。

DATA SEGMENT
ARRAY   DB  70H,71H,72H,73H,74H,75H,76H,77H,78H,79H,
        DB  7AH,7BH,7CH,7DH,7EH,7FH  
        DB  80H,81H,82H,83H,84H,85H,86H,87H,88H,89H,
        DB  8AH,8BH,8CH,8DH,8EH,8FH
DATA ENDS

ASSUME DS:DATA  CS:CODE
CODE SEGMENT
START:       
        MOV AX,DATA
        MOV DS,AX
        XOR DX,DX
        XOR AX,AX
        MOV SI,OFFSET ARRAY 
        MOV CX,20H
AGAIN:  MOV AL,[SI]
        INC SI
        TEST AL,80H   
        JZ NEXT
        INC DX
NEXT:   DEC CX
        JNZ AGAIN         
CODE ENDS
END START;

运行结果:
计组(day6)8086指令系统——逻辑指令_第10张图片

你可能感兴趣的:(微型计算机原理)