六.逻辑运算指令
OP源:8/16位通用寄存器,存储器操作数或立即数
OP目:通用寄存器和存储器操作数
除"非"运算外,其余指令都会使OF=CF=0
1.逻辑与运算
AND 与
可以用来改变特定的位数,或者测试某位的内容
2.逻辑或运算 (有1出1 全0出0)
格式: OR OP目, OP源
功能:对两个操作数进行或运算,结果回送到OP目
说明:可用于组合某个字,或将某位置1
例:
MOV AX, 8888H;
OR AX, 00FFH; AX=88FFHH,将AX的低8位置1,其它位不变.即对应1位置1,对应0位则不变.
例:将AL中的非组合BCD码转换成ASCII码.
OR AL, 30H
3.逻辑异或运算指令 (相同为0 不同为1)
格式:XOR OP目, OP源
功能:对两个操作数进行异或运算,结果回送到OP目.
说明:用于对某个二进制数按位取反或对某寄存器清0
例:XOR AL, 0FFFH; AL数据按位求反
例:MOV AX, 3333H
XOR AX, 00FFH;
结果:AX=33CCH,AH数据保持不变,对AL数据求反.即对应0不变,对应1求反.
例: 寄存器清0(有4条指令可达到AX清0目的):
XOR AL, AL; AL清0
MOV AX, 0
SUB AX, AX
AND AX,0
4.逻辑非运算指令
格式:NOT OP
功能:对操作数逐位取反后回送到远处
例:
MOV AX, 1
NOT AX; AX=0FFFEH
注意:
(1)该指令只是执行求反操作,而不是求反码指令,对符号位也求反
(2)不影响标志位
5.测试指令
格式:TEST OP目, OP源
功能:将OP目与OP源进行与运算,不回送结果,只根据结果置标志位
说明:主要用来检测目的操作数的某些位是1或0,根据测试结果,决定转向
例:测试AX中的D15位是1还是0
TEST AX, 8000H; 若D15为1, ZF=0,否则ZF=1
总结:
(1)AND OR XOR TEST 均影响标志, CF=0,OF=0,而PF,SF,ZF由结果而定,AF无意义. 此类指令可用来清CF,常用于拆字,拼字.
(2)NOT 不影响标志
例题