目录
逻辑运算指令
一:取反指令NOT
二:逻辑与运算AND(重点)
屏蔽某些位.
把小写字母转换成大写字母
判断一个数的状态
三:逻辑或运算指令OR
用于拼字
把大写字母转换为小写字母
四:逻辑异或指令XOR
对某些位取反
大小写转化万能的
将寄存器清零和自己异或
五:测试指令TEST(重要)
判断负数或者非负数
判断奇偶
判断某一位的状态
求补指令 NEG(补充)
例题:
逻辑运算指令
注意:NOT指令不影响标志位,其余指令AND,OR,XOR,TEST,只要开始执行就会使CF=OF=0
一:取反指令NOT
取反指令是逻辑运算中唯一不影响标志位的指令,操作数只能是寄存器或者内存单元
MOV AL,5 NOT AL ;5 0000 0101 ;取反1111 1010
二:逻辑与运算AND(重点)
作用:
屏蔽某些位.
在系统功能调用中,你键盘输入一个5,实际收到的是它的ASCII码35H
这时候你还想要用5参与运算,就要把它的高位屏蔽掉
MOV AL,35H AND AL,0FH ;0011 0101 ;0000 1111 0000 0101
把小写字母转换成大写字母
MOV AL,61H AND AL,0DFH ; 0110 0001(61H) ; 1101 1111(0DFH) ; 0101 0001(41H)
判断一个数的状态
ZF是不是为零 PF是奇校验还是偶校验 SF是正数还是负数
MOV AL,XX;你不知道XX是什么 AND AL,AL;AL自己跟自己与值是不变的但是进行了运算,标志位已经发生了变化
三:逻辑或运算指令OR
用于拼字
dos系统功能调用想在屏幕输出5
MOV AL,05H OR AL,30H ;0000 0101 ;0011 0000 35H
把大写字母转换为小写字母
MOV AL,41H OR AL,20H ;0100 0001 ;0010 0000 0110 0001(61H)
四:逻辑异或指令XOR
相同为0,不同为1。或者记和0异或保持不变,和1异或是取反
用处
对某些位取反
对应的位和1异或就可以
MOV AL,06H MOV AL,0FH ;0000 0110(06H) ;0000 1111(0FH) ;0000 1001(09H)
大小写转化万能的
异或上20H
;大写转小写 MOV AL,41H XOR AL,20H ;0100 0001(41h) ;0010 0000(20H) ;0110 0001(61H) ;小写转大写 MOV AL,61H XOR AL,20H ;0110 0001(61H) ;0010 0000(20H) ;0100 0001(41H)
将寄存器清零和自己异或
MOV AX,???? XOR AX,AX;AX=0
五:测试指令TEST(重要)
TEST dest,source
和AND 指令执行的操作完全一样。执行之后结果不回送跟前面学的CMP指令相似
根据结果标志位的情况来形成分支
判断负数或者非负数
MOV AL,XX TEST AL,80H ;XXXX XXXX ;1000 0000 ;?000 0000 ;只用看第一位,看ZF标志,就可以看出XX是一个正数还是一个非负数
判断奇偶
MOV AL,XX TEST AL,01H ;XXXX XXXX ;0000 0001 ;0000 000? ;判断一个数是奇数还是偶数 ,如果测试完ZF=1(结果为0),那么X的最后一位就是0,就是偶数 ;如果ZF=0,结果不为0,那么X最后一位就是1,就是奇数 。因为A0决定奇偶这个大家都知道
判断某一位的状态
想判断那一位那一位就是1,然后看ZF标志
MOV AL,XX; TEST AL,08H ;XXXX XXXX ;0000 1000 ;0000 ?000
求补指令 NEG(补充)
这条指令相当于,已知某数的补码,求他负数的补码
MOV AL,5;
NEG AL;
AL就是-5 用0-5=-5
0000 0000
0000 0101
1111 1011 (-5的补码)
不信的话可以把它算回来啊,以知补码求原码 符号位不变,其余取反+1
1 000 0101 (-5的原码)
第二种方式:
也可以用取反+1来算出来
5 0000 0101
取反 1111 1010
加1 1111 1011(-5的补码)
例题:
1设AL=0AH,下列指令执行后,能使AL=05H的指令是()
A:NOT AL B:AND AL,0FH C:OR AL,0FH D:XOR AL,0FH
2:完成累加器AL清零,并使进位标志CF清零,下面错误的是()
A:MOV AL,00H B:AND AL,00H C:XOR AL,AL D: SUB AL,AL
3:下列逻辑运算指令中,不允许使用立即数为操作数的指令是()
A:AND B:OR C:XOR D:NOT
4:若BL寄存器中的D1,D3,D4,D6取反,应使用()
A: AND BL,5AH B: OR BL,5AH
C: XOR BL,5AH D: TEST BL,5AH
注意位数从0开始数
5:若将AH的内容的第四位分离,则应选用()
A: AND AL,0FH B:OR AL,0FH
C: XOR AL,0FH D:TEST AL,0FH
6:设AX=0001H,下列指令执行后,能使标志位ZF=1的指令有(ABCD)
A: DEC AX B:SUB AX,1
C:CMP AX,1 D: XOR AX,1
7:编写汇编指令,实现下列功能
(1) AX寄存器第4位清零
AND AX,0FFF0H
(2)BX寄存器低4位位置“1”
AND BX,000FH
(3)CX寄存器低4位变反
XOR CX,000FH
(4)用Test指令测试DL寄存器位3,位6是否同时为0,若是,将0送DL,否则1送DH
0100 1000
TEST DL,48H
8:用什么方法可以实现对通用寄存器清零,但MOV 不会让CF和OF为零
MOV AX,0 XOR AX,AX AND AX,0H SUB AX,AX