
1.逻辑运算指令
(1)逻辑与指令 AND d, s ; d<-- d ∧ s

注:该指令影响标志位
使 O=0,C=0,
P,S,Z反映操作的结果
例1:屏蔽AL寄存器的低四位。
MOV AL,0FFh
AND AL ,0F0h

例2:屏蔽AL寄存器的高两位。
MOV AL,0FFh
AND AL ,3Fh

AND通常用于使某些位置0,其它位不变的情况。
(2)逻辑或指令 OR d, s ; d<-- d ∨ s

注:该指令影响标志位
使 O=0,C=0,
P,S,Z反映操作的结果
例3:使某数的第5、6位置1。
MOV AL,03H
OR AL,30H

OR指令通常用于将某些位置1
(3)逻辑异或指令 XOR d, s ; d<-- d ⊕ s

注:该指令影响标志位
使 O=0,C=0,
P,S,Z反映操作的结果
例6:使某数的D1、D0位取反,其它位不变。
MOV AL,11H
XOR AL,03H


(4)测试指令 TEST d, s ; d ∧ s

注:该指令影响标志位,结果不保存
使 O=0,C=0,
P,S,Z反映操作的结果。
例4:检测AL中的最低位是否位1,若为1则转移。

例5:检测CX内容是否位 0,为 0 则转移。

(5)逻辑非指令 NOT d ; d<-- /d
Rc---M
注:该指令不影响标志位
例如: NOT AL
NOT BYTE PTR[BX]
2.移位指令
移位指令 d, count
循环指令 d, count

(1)逻辑左移指令 SHL d, count
(2)逻辑右移指令 SHR d, count
(3)算术左移指令 SAL d, count
(4)算术右移指令 SAR d, count
注:该指令影响标志位 C,S,Z,P 视结果而定;O 只当CNT=1时有效,移位后当最高有效位发生变化时(如1变0) O=1, 否则 O=0 。

例1:某数×10

例2:将 F0H 除以2。

移位指令的作用:
移位指令通常用来做 乘2 或 除2 的操作:
左移一位 操作数×2 ;
右移一位 操作数÷2
-
算术移位指令适用于带符号数的运算。
-
逻辑移位指令适用于无符号数的运算。
例3:将 带符号数 89H 乘以2。

带符号数的运算结果的正确与否看溢出位:
O=1 溢出,结果错; O=0 不溢出,结果正确。
无符号数的运算结果的正确与否看进位位:
C=1 有进位,结果错; C=0 无进位,结果正确。
例5:请求出AL中“1”的个数,存在AH中。
MOV AH, 0
Again: SHL AL, 1
ADC AH, 0
CMP AL, 0
JNZ AGAIN
HLT
MOV AH,0
MOV CL,8
Again: SHL AL,1
JNC Next
INC AH
Next: DEC CL
JNZ Again
HLT
![]()
3.循环指令
(1) 循环左移指令 ROL d, count
(2) 循环右移指令 ROR d, count
(3)带C循环左移指令 RCL d, count
(4)带C循环右移指令 RCR d, count
注:该指令影响标志位 C视结果而定;O 只当CNT=1时有效,移位后当最高有效位发生变化时(如1变0) O=1, 否则 O=0 。

例4:实现32位数的移位,要求左移4位。
方法1

方法2

循环移位指令的作用:
循环移位指令可以改变操作数
中所有位的位置
综合例题
例5:
在内存某一缓冲区中,存放着若干用BCD码表示的十进制数,每一个单元中存放两位,要求将它们转换成ASCⅡ码,存放在缓冲区,高4位的BCD码转换的ASCⅡ码放在地址较高的单元




