逻辑运算类指令和位操作指令

上传人:jiups****uk12 文档编号:54876776 上传时间:2018-09-21 格式:PPT 页数:25 大小:768KB
返回 下载 相关 举报
逻辑运算类指令和位操作指令_第1页
第1页 / 共25页
逻辑运算类指令和位操作指令_第2页
第2页 / 共25页
逻辑运算类指令和位操作指令_第3页
第3页 / 共25页
逻辑运算类指令和位操作指令_第4页
第4页 / 共25页
逻辑运算类指令和位操作指令_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《逻辑运算类指令和位操作指令》由会员分享,可在线阅读,更多相关《逻辑运算类指令和位操作指令(25页珍藏版)》请在金锄头文库上搜索。

1、第九节 逻辑运算类指令和位操作指令,9.1 逻辑运算指令 9.1.1 逻辑与运算指令,ANL A,Rn ANL A,direct ANL A,Ri ANL A,#data 上述指令的目的操作数为累加器A的内容,源操作数有四种寻址方式:寄存器Rn、直接和间接寻址、立即数。两操作数进行“与”运算后,结果保留在累加器A中,不影响任何标志位。 ANL direct,A ANL direct,#data 上述指令的目的操作数为直接地址寻址单元内容,源操作数有两种寻址方式:累加器A和立即数。运算结果保留在直接寻址单元中,不影响任何标志位。,逻辑与运算指令举例,例:设(A)=0C3H(11000011B),

2、(R0)=0AAH(10101010B),执行指令: ANL A,R0 (逻辑与运算用符号表示)(A)=11000011 (R0)=1010101010000010 执行结果:(A)=82H(10000010B) 例:指令ANL常用来屏蔽某些不用位,方法是将该位用“0”相“与”,这种操作的目的操作数常用直接地址寻址,而源操作数则用立即数。如 ANL P1,#01100110 B 执行结果:将P1口锁存器的第0、3、4、7位的内容屏蔽掉。不管P1口中的这些位原值为何值,经与操作后均屏蔽为0,而其它位保持原值不变。,9.1.2 逻辑或运算指令,ORL A,Rn ORL A,direct ORL A

3、,Ri ORL A,#data ORL direct,A ORL direct,#data 和前面逻辑与指令类似,这里前4条指令的操作结果存放在A中,后两条指令将结果存放在直接地址中。,逻辑或运算指令举例(1),例:设(A)=0C3H(11000011B),(R0)=55H(01010101B),执行指令: ORL A,R0(逻辑或运算用符号表示) (A)=11000011 R0)=0101010111010111 执行结果:(A)=0D7H(11010111B)。 当目的操作数为直接地址单元,用立即数作为源操作数时,本指令可置位任何RAM单元或寄存器的某些位,方法是将需置位的位与立即数“1”

4、相“或”。例如: ORL P1,#00110010B 执行结果,对P1口的锁存器内容第1、4、5位进行置位。其余位则保持原数值不变。,逻辑或运算指令举例(2),当我们需要只改变一个数据的某几位,而其余位不变时,不能使用数据传送的方法,却可以采用逻辑运算来完成。请看下面的例子: 例:试编一段程序,将A的低5位传送到P1口的低5位,但保持P1口高3位不变,A的内容也保持不变。 解:总的思路是,设法保留A的低5位和P1的高3位,而将不用的位的内容清成0。然后再将有用的位组合起来。 MOV R0,A ;保留A的原值 ANL A,#1FH ;A和00011111做与运算,以屏蔽A的高; 3位,即强制A的

5、高3位为0,而低5位不变 ANL P1,#E0H ;P1和11100000做与运算,即屏蔽P1;的低5位 ORL P1,A ;实现A的低5位与P1的高3位的组合,并;将结果存入P1口 MOV A,R0 ;恢复A的原值,9.1.3 逻辑异或运算指令,XRL A,Rn XRL A,direct XRL A,Ri XRL A,#data XRL direct,A XRL direct,#data 与逻辑与、逻辑或运算类似,前4条指令将运算结果送入中,后两条指令将运算结果送入直接地址单元中。,逻辑异或运算指令举例,例:设(A)=0C3H(11000011B),(R0)=0AA(10101010B)。执

6、行指令: XRL A,R0,执行结果:(A)=69H(01101001B)。 利用本指令可对目的操作数的某些位取反,其方法是将需取反的位与“1”相“异或”。这种操作常用于目的操作数为直接地址的场合,而源操作数常采用立即数或运行时的累加器。 如:XRL P1,#00110001B 执行结果:P1口锁存器内容的第0、4、5位取反,其余位不变。 利用本指令可判断两数是否相等,若相等,则结果为全“0”;否则不相等。,9.1.4 累加器清零与取反指令,累加器A清“0”指令:CLR A 清“0”累加器A,不影响标志位。 例:设(A)=0A5H(10100101B),执行指令 CLR A ;清“0”累加器A

7、,即A的每位均清“0” 执行结果:(A)=00H(00000000B)。 累加器A取反指令:CPL A 对累加器A的内容逐位取反,不影响标志位。 例:设(A)=0AAH(10101010B),执行指令 CPL A ;对A的内容逐位取反 执行结果:(A)=55H(01010101B)。,9.2 移位指令,循环左移指令 RL A 移位操作见图(a),将A内容循环左移一位,A的最高位A7移入最低位A0,最低位A0向左移入A1位,其它位也依次向左移一位,循环左移指令不影响标志位。 循环右移指令 RR A 移位操作见图 (b),与循环左移方向相反。 带进位循环左移指令 RLC A 累加器A连同进位位Cy

8、循环左移一位,A的最高位移入Cy,Cy进入A的最低位,其他各位依次向左移位。不影响程序状态字PSW中的标志位。移位操作见图 (c)。 带进位循环右移指令 RRC A 移位操作见图(d),与带进位循环左移方向相反。,移位指令举例,例:设(A)=0C5H(11000101B),执行指令:RL A ;A的内容逐位左移一位。最高位移向最低位 执行结果:(A)=8BH(10001011B)。 例:设(A)=0C5H(11000101B),(Cy)=1,执行指令:RRC A ;累加器A连同进位位Cy循环右移一位,A的最低位移入Cy,Cy进入A的最高位,其他各位依次向右移一位。 执行结果:(A)=0E2H(

9、11100010B),(Cy)=1。,累加器内半字节交换指令,SWAP A 累加器A内部高4位与低4位的内容彼此交换,操作示意图如图 (e)所示 例:设(A)=09H,执行指令:SWAP A 执行结果:(A)=90H,9.3 位操作指令,位操作与字节操作不同,它是以位(bit)为单位进行的运算和操作。可操作位又称为布尔变量,其取值只能是0或1。这种位操作指令也叫做布尔变量操作指令。 在MCS-51单片机内部有一个布尔处理器,即一位的微处理器。它以进位标志(Cy)为位累加器,以内部RAM中的位寻址区(单元地址在20H2FH)和SFR中专用寄存器的可寻址位作为操作对象。可以进行的位操作,包括布尔变

10、量的传送、逻辑运算以及控制转移等。位控制转移将在下一节控制转移类指令一起介绍,本节只介绍位传送和位逻辑运算指令。,8051单片机内部RAM的配置图,位寻址区的位地址表,特殊功能寄存器(SFR)区的位地址表,9.3.1 位传送指令,位传送指令有如下两条: MOV C,bit MOV bit,C 指令中的C即Cy。前一条指令的功能是,将位地址bit中的内容传送到PSW中的进位标志位Cy。后一条指令的位传送方向正相反。 请注意:位传送指令与一般的字节传送指令是不同的两类指令,尽管都写成MOV,但它们的操作数完全不同。例如比较MOV A,30H与MOV C,30H两条指令。前者A是8位累加器,30H是

11、单元地址;后者C是1位累加器,30H是单元地址26H所在单元第0位的位地址(可查片内RAM位寻址区的位地址表)。所以要注意从操作数方面区别两类指令。 MCS-51指令系统中并没有在两个位地址间直接传送数据的指令。要进行两个位地址间的信息传送,必须经过累加位Cy。,位传送指令举例,例:试编程将位地址2CH的内容与6CH的内容相交换。 解:由于没有位地址间直接传送数据和相互交换数据的指令,所以为了实现两个位地址间数据交换,不仅要用到Cy,还要借助另外的位地址作位寄存器。 MOV C,2CH ;取2CH位内容 MOV 30H,C ;暂存入30H位 MOV C,6CH ;取6CH位内容 MOV 2CH

12、,C ;存入2CH位 MOV C,30H ;取原2CH位内容 MOV 6CH,C ;存入6CH位,9.3.2 位状态控制指令 MCS-51设有三条控制位变量状态的指令, 位清“0”指令: CLR C CLR bit 例:设P1口原写入内容为01011101B,执行指令: CLR P1.2 执行结果:P1口的内容变为01011001B。, 位置“1”指令: SETB C SETB bit 例:设(C)=0,P1口内容变为00110100B。执行指令: SETB C SETB P1.0 执行结果:(C)=1,P1口内容变为00110101B。, 位取反指令: CPL C CPL bit 例:设P1

13、口的原始写入内容为01011101B,执行指令: CPL P1.1 CPL P1.2 执行结果:P1口的内容变为01011011B。,9.3.3 位逻辑操作指令 位逻辑操作指令,仅有逻辑与、逻辑或两种, 位逻辑与指令 ANL C,bit ANL C,/bit 指令将指定的位地址内容或位地址内容取反后(不改变原内容),与布尔累加器C的内容进行逻辑与操作,结果在C中。图是位ANL的逻辑示意图。其“bit”表示对位单元内容取反后再进行逻辑操作。,位逻辑与指令举例,例:编写实现下列逻辑操作的程序。 若(P1.0)=1,(ACC.7)=1,且OV=0,则将布尔累加器C置1。程序如下: MOV C,P1.

14、0 ;(P1.0)=1送C中 ANL C,ACC.7 ;(C)=1(ACC.7)=1,结果存C中 ANL C,/OV ;(C)(/OV)送C中 执行结果:当满足给出的条件时,必将C置“1”。否则,C为“0”。, 位逻辑或指令: ORL C,bit ORL C,/bit 指令将指定的位地址内容或位地址内容取反后(不改变原内容),与布尔累加器C的内容进行逻辑或操作,结果在C中,不影响别的标志位。图8.3是位ORL的逻辑示意图。,位逻辑或指令举例,例:编写一程序,当且仅当(P1.0)=1,或(ACC.7)=1或OV=0时,布尔累加器C置1。其程序如下: MOV C,P1.0 ORL C,ACC.7

15、ORL C,/PSW.2 ;(PSW的第二位就是溢出标志位OV,故PSW.2与OV是等效的) 执行结果:当满足给定条件时,则必置C为“1”。,具有位寻址能力的SFR的位地址表,9.4 空操作指令NOP,NOP 本指令不作任何操作,仅仅将程序计数器PC加1,使程序继续往下执行。本指令为单周期指令,所以在时间上占用一个机器周期,常用于延时或时间上的等待。 例:编一段程序,使从P2口的P2.7输出一个脉冲,要求脉宽持续5个机器周期时间。采用简单的SETB(位置“1”指令)CLR(位清“0”指令)指令序列,可产生一个单周期的脉冲。必须中间插入4个附加周期,在关中断情况下,可用以下指令序列实现。 CLR P2.7 ;将P2口的第7位清“0” NOP ;每个空操作执行一个机器周期 NOP NOP NOP SETB P2.7 ;将P2.7位置“1”执行上述指令序列,CLR P2.7指令将P2.7输出清“0”,执行四条NOP指令,使P2.7的低电平输出持续4个机器周期,指令SETB P2.7将P2.7置“1”,输出恢复高电平,实现了在P2.7端输出脉宽5个周期的负脉冲。,本节结束,位寻址区的位地址表,具有位寻址能力的SFR的位地址表,在21个SFR中,有11个具有位寻址能力,它们的位地址见下表,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号