逻辑运算类指令有“或”操作指令、“与”操作指令、“异或”操作指令、取反与累加器清0指令、循环移位指令,共24条。特点是当A作为目的操作数(第一操作数)时,影响P位;带进位的移位指令影响Cy位,其余都不影响PSW。
1 逻辑“或”运算指令(6条)
按位相“或”,其中有4条指令的第一操作数都为A,另外两条指令的第一操作数为direct。
逻辑“或”指令、功能操作、机器代码和执行机器周期数见表3-14。
表3-14 逻辑“或”指令、功能操作、机器代码和执行机器周期数
这组指令功能:在指出的变量之间执行以位为基础的逻辑“或”操作,结果存放到目的变量所在的寄存器或存储器中。
为了使P1口的高4位都变为1,而低4位保持不变。可以执行如下指令。
ORL P1,#0F0H;P1←(P1)∨F0H
2 逻辑“与”运算指令(6条)
指令功能是将A的内容与立即数0FH进行逻辑“与”运算。由于0FH的低4位为1111B,高4位为0000B,所以无论A中的高4位原来是何值,相“与”后,A中的高4位都将变为0000B,而A中的低4位保持不变。因此,该指令的功能是屏蔽A中的高4位,取出A中的低4位。
与ORL指令类似,都是按位“与”,其中4条指令的第一操作数为A,两条指令的第一操作数为direct。
逻辑“与”指令、功能操作、机器代码和执行机器周期数见表3-15。
表3-15 逻辑“与”指令、功能操作、机器代码和执行机器周期数
这组指令在指出的变量之间以位为基础进行逻辑“与”操作,结果存放到目的变量所在的寄存器或存储器中。
PUTTl:ANL A,#0FH;屏蔽高4位
MOV @R0,A;放进显示缓冲区
例3-18:设30H单元内容为56H,将高低4位拆开。
MOV A,30H;取数
ANL A,#0FH;屏蔽高4位
MOV 40H,A;存低4位
MOV A,30H;再取
ANL A,#0F0H;屏蔽低4位
SWAP A;高低4位交换
MOV 41H,A;存高4位
3 逻辑“异或”运算指令(6条)
“异或”操作的用法:某位用“0”异或不变;用“1”异或该位取反,也称为“指定位取反”。这组指令功能在指出的变量之间执行以位为基础的逻辑“异或”操作,结果存放到目的变量所在的寄存器或存储器中。
逻辑“异或”指令、功能操作、机器代码和执行机器周期数见表3-16。
表3-16 逻辑“异或”指令、功能操作、机器代码和执行机器周期数
使用逻辑“异或”指令可以令某个单元中的某些位取“反”,其余位保持不变。为了使P1口的高4位变“反”,低4位保持不变,可以执行如下指令:
XRL P1,#0F0H;P1←(P1)+F0H(www.xing528.com)
说明:逻辑运算中,“与”运算常用于对某些位清0,“或”运算常用于对某些位置1,“异或”运算常用于对某些位取反。
例如:使P1口的低2位为0,高2位取反,其余位不变。
ANL P1,#11111100B;对2位清0
XRL P1,#11000000B;对2位取反
4 简单逻辑操作指令(2条)
(1)累加器取反指令
对累加器A的内容各位求反,结果送回A中,影响P位。
功能:累加器A按位取反,不影响Cy、AC、OV等标志。
(2)累加器清0指令
将累加器A的内容清0。
功能:是对累加器A的内容取反,操作结果仍留在A中,不影响Cy、AC、OV等标志。这两条指令皆为单字节单周期指令。虽然使用数据传送或逻辑“异或”指令同样也可以达到对累加器A清0或取反的目的,但那些指令的长度为两个字节。所以完成同样的功能时,使用上述指令能使程序更为优化。
取反或累加器清0指令、功能操作、机器代码和执行机器周期数见表3-17。
表3-17 取反或累加器清0指令、功能操作、机器代码和执行机器周期数
注意:这两条指令仅对A有效。
5 循环移位指令(4条)
其中有两条不带Cy位的逐位循环移位一次指令,不影响PSW。有两条带Cy位的逐位循环移位一次指令,影响Cy位和P标志位。
循环移位指令、功能操作、机器代码和执行机器周期数见表3-18。
表3-18 循环移位指令、功能操作、机器代码和执行机器周期数
注:这4条指令仅对A有效。
循环移位指令的操作过程如图3-13所示。
例3-19:将双字节数(R2)(R3)右移一位。
CLR C
MOV A,R2
RRC A
MOV R2,A
MOV A,R3
RRC A
MOV R3,A
图3-13 循环移位指令的操作过程
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。