第九节 逻辑运算类指令和位操作指令

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

9.1 逻辑运算指令 9.1.1 逻辑与运算指令
逻辑与运算指令举例
例:设(A)=0C3H(11000011B),(R0) =0C3H(11000011B),( ) ),(R0 =0AAH(10101010B),执行指令: =0AAH(10101010B),执行指令: ),执行指令 ANL A,R0 (逻辑与运算用符号∧表示) A, 逻辑与运算用符号∧表示) (A)=1执行结果:( :(A =82H(10000010B) 执行结果:(A)=82H(10000010B) 指令ANL常用来屏蔽某些不用位 常用来屏蔽某些不用位, 例:指令ANL常用来屏蔽某些不用位,方法是将该位 0”相 用“0”相“与”,这种操作的目的操作数常用直接地 址寻址,而源操作数则用立即数。 址寻址,而源操作数则用立即数。如 ANL P1,#01100110 B P1, 执行结果: P1口锁存器的第 口锁存器的第0 执行结果:将P1口锁存器的第0、3、4、7位的内容 屏蔽掉。不管P1口中的这些位原值为何值 口中的这些位原值为何值, 屏蔽掉。不管P1口中的这些位原值为何值,经与操作 后均屏蔽为0 而其它位保持原值不变。 后均屏蔽为0,而其它位保持原值不变。
9.1.2 逻辑或运算指令
ORL A,Rn A, ORL A,direct A, ORL A,@Ri A, ORL A,#data A, ORL direct,A direct, ORL direct,#data direct, 和前面逻辑与指令类似,这里前4 和前面逻辑与指令类似,这里前4条指令的操作结果 存放在A 后两条指令将结果存放在直接地址中。 存放在A中,后两条指令将结果存放在直接地址中。
第九节 逻辑运算类指令和 位操作指令
ANL A,Rn A, ANL A,direct A, ANL A,@Ri A, ANL A,#data A, 上述指令的目的操作数为累加器A的内容, 上述指令的目的操作数为累加器A的内容,源操作数 有四种寻址方式:寄存器Rn 直接和间接寻址、 Rn、 有四种寻址方式:寄存器Rn、直接和间接寻址、立 即数。两操作数进行“ 运算后, 即数。两操作数进行“与”运算后,结果保留在累加 响任何标志位。 器A中,不影响任何标志位。 ANL direct,A direct, ANL direct,#data direct, 上述指令的目的操作数为直接地址寻址单元内容, 上述指令的目的操作数为直接地址寻址单元内容,源 操作数有两种寻址方式: 和立即数。 操作数有两种寻址方式:累加器A和立即数。运算结 果保留在直接寻址单元中,不影响任何标志位。 果保留在直接寻址单元中,不影响任何标志位。
累加器内半字节交换指令
SWAP A 累加器A内部高4位与低4 累加器A内部高4位与低4位的内容彼此交换,操 作示意图如图 (e)所示 (e)所示 例:设(A =09H,执行指令:SWAP 例:设(A)=09H,执行指令:SWAP A 执行结果:(A 执行结果:(A)=90H
9.3 位操作指令
位操作与字节操作不同,它是以位(bit)为单位进行的 位操作与字节操作不同,它是以位(bit)为单位进行的 运算和操作。 尔变量, 运算和操作。可操作位又称为布尔变量,其取值只能是 0或1。这种位操作指令也叫做布尔变量操作指令。 这种位操作指令也叫做布尔变量操作指令。 MCS-51单片机内部有一个布尔处理器 单片机内部有一个布尔处理器, 在MCS-51单片机内部有一个布尔处理器,即一位的 微处理器。它以进位标志(Cy)为位累加器, 微处理器。它以进位标志(Cy)为位累加器,以内部 RAM中的位寻址区 单元地址在20H~2FH)和SFR中 RAM中的位寻址区(单元地址在20H~2FH)和SFR中 中的位寻址区( 位作为操作对象。 专用寄存器的可寻址位作为操作对象。可以进行的位操 包括布尔变量的传送、逻辑运算以及控制转移等。 作,包括布尔变量的传送、逻辑运算以及控制转移等。 位控制转移将在下一节控制转移类指令一起介绍, 位控制转移将在下一节控制转移类指令一起介绍,本节 只介绍位传送和位逻辑运算指令。 只介绍位传送和位逻辑运算指令。
9.1.4 累加器清零与取反指令
累加器A 累加器A清“0”指令:CLR A 指令: 累加器A 不影响标志位。 清“0”累加器A,不影响标志位。 例:设(A)=0A5H(10100101B),执行指令 =0A5H(10100101B),执行指令 ), CLR A 累加器A 的每位均清“ ;清“0”累加器A,即A的每位均清“0” 执行结果:( :(A =00H(00000000B)。 执行结果:(A)=00H(00000000B)。 累加器A取反指令: 累加器A取反指令:CPL A 对累加器A的内容逐位取反,不影响标志位。 对累加器A的内容逐位取反,不影响标志位。 =0AAH(10101010B), ),执行指 例:设(A)=0AAH(10101010B),执行指 令 CPL A ;对A的内容逐位取反 执行结果:( :(A =55H(01010101B)。 执行结果:(A)=55H(01010101B)。
9.2 移位指令
移位指令举例
例:设(A)=0C5H(11000101B),执行指令: =0C5H(11000101B),执行指令: ),执行指令 RL A ;A的内容逐位左移一位。最高位移 的内容逐位左移一位。 向最低位 执行结果:( :(A =8BH(10001011B)。 执行结果:(A)=8BH(10001011B)。 =0C5H(11000101B), ),(Cy)=1, 例:设(A)=0C5H(11000101B),(Cy)=1, 执行指令: 执行指令: RRC A ;累加器A连同进位位Cy循环右移一 累加器A连同进位位Cy循环右移一 的最低位移入Cy,Cy进入 的最高位, 进入A 位,A的最低位移入Cy,Cy进入A的最高位,其他各 位依次向右移一位。 位依次向右移一位。 执行结果:( :(A =0E2H(11100010B), 执行结果:(A)=0E2H(11100010B), Cy)=1。 (Cy)=1。
循环左移指令 RL A 移位操作见图( ),将 移位操作见图(a),将A内容循环左 移一位, 的最高位A7移入最低位 , 移入最低位A0 移一位,A的最高位A7移入最低位A0, 最低位A0向左移入 位 向左移入A1 最低位A0向左移入A1位,其它位也依 次向左移一位, 次向左移一位,循环左移指令不影响标 志位。 志位。 循环右移指令 RR A (b), 移位操作见图 (b),与循环左移方向 相反。 相反。 带进位循环左移指令 RLC A 累加器A连同进位位Cy循环左移一位 循环左移一位, 累加器A连同进位位Cy循环左移一位, A的最高位移入Cy,Cy进入A的最低 的最高位移入Cy,Cy进入 进入A 其他各位依次向左移位。 位,其他各位依次向左移位。不影响程 序状态字PSW中的标志位 中的标志位。 序状态字PSW中的标志位。移位操作 (c)。 见图 (c)。 带进位循环右移指令 RRC A 移位操作见图(d), 移位操作见图(d),与带进位循环左移 方向相反。 方向相反。
逻辑异或运算指令举例
例:设(A)=0C3H(11000011B),(R0)=0AA =0C3H(11000011B),( ) ),(R0 10101010B)。执行指令: )。执行指令 A, (10101010B)。执行指令: XRL A,R0
执行结果:(A)=69H(01101001B)。 :(A =69H(01101001B)。 执行结果:( 利用本指令可对目的操作数的某些位取反, 利用本指令可对目的操作数的某些位取反,其方法是将需取反 的位与“1”相 异或” 的位与“1”相“异或”。这种操作常用于目的操作数为直接地 址的场合,而源操作数常采用立即数或运行时的累加器。 址的场合,而源操作数常采用立即数或运行时的累加器。 P1, 如:XRL P1,#00110001B 执行结果:P1口锁存器内容的第 口锁存器内容的第0 位取反,其余位不变。 执行结果:P1口锁存器内容的第0、4、5位取反,其余位不变。 利用本指令可判断两数是否相等,若相等,则结果为全“0”; 利用本指令可判断两数是否相等,若相等,则结果为全“0”; 否则不相等。 否则不相等。
9.1.3 逻辑异或运算指令
XRL A,Rn A, XRL A,direct A, XRL A,@Ri A, XRL A,#data A, XRL direct,A direct, XRL direct,#data direct, 与逻辑与、逻辑或运算类似, 与逻辑与、逻辑或运算类似,前4条指令将运算 结果送入中, 结果送入中,后两条指令将运算结果送入直接地 址单元中。 址单元中。
8051单片机内部 单片机内部RAM的配置图 单片机内部 的配置图
位寻址区的位地址表
特殊功能寄存器(SFR) 特殊功能寄存器( 区的位地址表
9.3.1 位传送指令
位传送指令有如下两条: 位传送指令有如下两条: MOV C,bit C, MOV bit,C bit, 指令中的C Cy。前一条指令的功能是, 指令中的C即Cy。前一条指令的功能是,将位地址 bit中的内容传送到 bit中的内容传送到PSW中的进位标志位Cy。后一 中的内容传送到PSW中的进位标志位Cy。 条指令的位传送方向正相反。 条指令的位传送方向正相反。 请注意: 请注意:位传送指令与一般的字节传送指令是不同的 两类指令,尽管都写成MOV, 两类指令,尽管都写成MOV,但它们的操作数完全 不同。例如比较MOV A,30H与 C, 不同。例如比较MOV A,30H与MOV C,30H 两条指令。前者A 加器,30H是单元地址 是单元地址; 两条指令。前者A是8位累加器,30H是单元地址; 后者C 位累加器,30H是单元地址 是单元地址26H所在单元 后者C是1位累加器,30H是单元地址26H所在单元 位的位地址(可查片内RAM位寻址区的位地址 第0位的位地址(可查片内RAM位寻址区的位地址 )。所以要注意从操作数方面区别两类指令。 表)。所以要注意从操作数方面区别两类指令。 MCS-51指令系统中并没有在两个位地址间直接传 MCS-51指令系统中并没有在两个位地址间直接传 送数据的指令。要进行两个位地址间的信息传送, 送数据的指令。要进行两个位地址间的信息传送,必 须经过累加位Cy。 须经过累加位Cy。
逻辑或运算指令举例( 逻辑或运算指令举例(2)
当我们需要只改变一个数据的某几位,而其余位不变时,不能使 当我们需要只改变一个数据的某几位,而其余位不变时, 用数据传送的方法,却可以采用逻辑运算来完成。 用数据传送的方法,却可以采用逻辑运算来完成。请看下面的例 子: 试编一段程序, 的低5位传送到P1口的低 口的低5 例:试编一段程序,将A的低5位传送到P1口的低5位,但保持 P1口高3位不变,A的内容也保持不变。 P1口高 位不变, 的内容也保持不变。 口高3 总的思路是,设法保留A的低5位和P1的高 的高3 解:总的思路是,设法保留A的低5位和P1的高3位,而将不用 的位的内容清成0 然后再将有用的位组合起来。 的位的内容清成0。然后再将有用的位组合起来。 MOV R0,A R0, 保留A ;保留A的原值 ANL A,#1FH ;A和00011111做与运算,以屏蔽A的高 A, 00011111做与运算 以屏蔽A 做与运算, 即强制A的高3位为0 而低5 ; 3位,即强制A的高3位为0,而低5位不变 ANL P1,#E0H ;P1和11100000做与运算,即屏蔽P1 P1, P1和11100000做与运算,即屏蔽P1 做与运算 的低5 ;的低5位 ORL P1,A P1, 实现A的低5位与P1的高 位的组合, 的高3 ;实现A的低5位与P1的高3位的组合,并 将结果存入P1口 ;将结果存入P1口 MOV A,R0 A, 恢复A ;恢复A的原值
逻辑或运算指令举例(1) 逻辑或运算指令举例(
例:设(A)=0C3H(11000011B),(R0) =0C3H(11000011B),( ) ),(R0 =55H(01010101B),执行指令: =55H(01010101B),执行指令: ),执行指令 ORL A,R0(逻辑或运算用符号∨表示) A,R0(逻辑或运算用符号∨表示) (A)=11000011 R0)=01010101 R0) ∨ 11010111 执行结果:( :(A =0D7H(11010111B)。 执行结果:(A)=0D7H(11010111B)。 当目的操作数为直接地址单元, 当目的操作数为直接地址单元,用立即数作为源操 作数时,本指令可置位任何RAM单元或寄存器的 作数时,本指令可置位任何RAM单元或寄存器的 某些位,方法是将需置位的位与立即数“1”相 某些位,方法是将需置位的位与立即数“1”相 例如: “或”。例如: ORL P1,#00110010B P1, 执行结果, P1口的锁存器内容第 口的锁存器内容第1 执行结果,对P1口的锁存器内容第1、4、5位进 行置位。其余位则保持原数值不变。 行置位。其余位则保持原数值不变。
相关文档
最新文档