热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

汇编逻辑运算指令

目录逻辑运算指令一:取反指令NOT二:逻辑与运算AND(重点)屏蔽某些位.把小写字母转换成大写字母判断一个数的状态三

目录

逻辑运算指令

一:取反指令NOT

二:逻辑与运算AND(重点)

屏蔽某些位.

 把小写字母转换成大写字母

判断一个数的状态 

 三:逻辑或运算指令OR

用于拼字

把大写字母转换为小写字母

四:逻辑异或指令XOR

对某些位取反

大小写转化万能的

将寄存器清零和自己异或

五:测试指令TEST(重要)

判断负数或者非负数

 判断奇偶

判断某一位的状态

求补指令 NEG(补充)

例题:




逻辑运算指令

注意:NOT指令不影响标志位,其余指令AND,OR,XOR,TEST,只要开始执行就会使CF=OF=0


一:取反指令NOT

取反指令是逻辑运算中唯一不影响标志位的指令,操作数只能是寄存器或者内存单元

 MOV AL,5NOT  AL;5 0000 0101;取反1111 1010


二:逻辑与运算AND(重点)

 

作用:

屏蔽某些位.

在系统功能调用中,你键盘输入一个5,实际收到的是它的ASCII码35H

这时候你还想要用5参与运算,就要把它的高位屏蔽掉

MOV AL,35H
AND AL,0FH;0011 0101
;0000 11110000 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 00000110 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,0XOR AX,AXAND AX,0HSUB AX,AX


推荐阅读
author-avatar
shangce
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有