80C51的逻辑运算指令可分为四大类:对累加器A单独进行逻辑操作,对字节变量的逻辑与、逻辑或、逻辑异或操作。指令中的操作数都是8位,它们在进行逻辑运算操作时都不影响除奇偶标志外的其他标准位。其中逻辑与、逻辑或、逻辑异或操作指令可以实现对某些字节变量的清零、置1、取反功能。
1.对累加器A单独进行的逻辑操作
1)清零、取反与半字节交换指令(见表3-20)
表3-20 清零、取反与半字节交换指令
清零指令是将累加器A中的所有位全部置0。
取反指令是将累加器A中的内容按位取反,即原来为1变为0,原来为0变为1。
半字节交换指令是将累加器A的两个半字节(高4位和低4位)内容交换。
2)循环移位指令(见表3-21)
表3-21 循环移位指令
“RL A”和“RLC A”指令都使A中的内容逐位左移一位,但RLC A将使CY连同A的内容一起左移循环,A7进入CY,CY进入A0。
“RR A”和“RRC A”指令的功能类似“RL A”和“RLC A”,仅是A中数据移位的方向向右。
【例3-33】 若A=24H,执行“RL A”后,A=48H。
若A=24H,CY=1,执行“RLC A”后,A=49H,CY=1。
若A=24H,执行“RR A”后,A=12H。
若A=24H,CY=1,执行“RRC A”后,A=92H。
2.逻辑与运算指令(见表3-22)
表3-22 逻辑与运算指令
(www.xing528.com)
这组指令的功能是进行逻辑与运算,前4条指令的功能是把源操作数与累加器A的内容相与,结果送入目的操作数A中;后2条指令的功能是把源操作数与直接地址指定的单元内容相与,结果送入直接地址指定的单元。
通过逻辑与运算指令的功能可以实现一个字节里面的某些位清零(与0相与)和某些位不变的效果(与1相与)。
【例3-34】 已知寄存器R5=59H,把R5内容的低4位清零,高4位保持不变。
MOV A,R5
ANL A,#0F0H;高4位都与1相与达到不变效果,低4位都与0相与达到清零效果
MOV R5,A
3.逻辑或运算指令(见表3-23)
表3-23 逻辑或运算指令
这组指令的功能是进行逻辑或运算,前4条指令的功能是把源操作数与累加器A的内容相或,结果送入目的操作数A中;后2条指令的功能是把源操作数与直接地址指定的单元内容相或,结果送入直接地址指定的单元。
通过逻辑或运算指令的功能可以实现一个字节里面的某些位置1(与1相或)和某些位不变的效果与0相或)。请读者分析一下如果把【例3-34】中的与运算指令换成或运算指令会出现什么样的结果?
4.逻辑异或指令(见表3-24)
表3-24 逻辑异或指令
(续)
这组指令的功能是进行逻辑异或运算,前4条指令的功能是把源操作数与累加器A的内容相异或,结果送入目的操作数A中;后2条指令的功能是把源操作数与直接地址指定的单元内容相异或,结果送入直接地址指定的单元。
这些逻辑运算指令,除了带进位位Cy循环移位指令只影响Cy和P标志位外,其余的逻辑运算都不会影响PSW的各标志位。
通过逻辑异或运算指令的功能可以实现一个字节里面的某些位取反1(与1相异或)和某些位不变的效果与0相异或)。请读者分析一下如果把【例3-34】中的与运算指令换成异或运算指令会出现什么样的结果?
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。