逻辑运算类指令包括与、或、异或、清零、求反、左右移位等操作指令。这些指令对应的寻址方式有直接寻址、寄存器寻址和寄存器间接寻址。其执行时一般不影响程序状态寄存器PSW,仅当目的操作数为A时对奇偶标志P位有影响,带进位的移位指令影响CY位。逻辑运算指令用到的助记符有ANL、ORL、XRL、RL、RLC、RR、RRC、CLR和CPL共9种。
1.循环移位指令(4条)
RL A
RR A
RLC A
RRC A
该组循环移位指令执行情况如图3.1所示。
图3.1 循环移位指令执行示意图
前两条指令的功能分别是将累加器A的内容循环左移或右移一位,后两条指令的功能分别是将累加器A的内容连同进位位CY一起循环左移或右移一位。
【例3.17】利用累加器循环左移指令对A中内容进行乘10操作。设A=X,编程如下:
RL A ;得到2X
MOV B,A ;转存到B
RL A ;得到4X
RL A ;得到8X
ADD A,B ;A←(8X+2X)
2.累加器半字节交换指令(1条)
SWAP A ;A3~0↔A7~4
这条指令的功能是将累加器A的高低两半字节交换。如(A)=50H,执行SWAP A指令后,结果(A)=05H。
3.求反指令(1条)
CPL A ;A←
4.清0指令(1条)
CLR A;A←0
5.逻辑与指令(6条)
ANL A,#data ;A←(A)∧data
ANL direct,#data ;direct←(direct)∧data
ANL A,Rn ;A←(A)∧(Rn)
ANL A,direct ;A←(A)∧(direct)
ANL direct,A ;direct←(direct)∧(A)(www.xing528.com)
ANL A,@Ri ;A←(A)∧((Ri))
这组指令的第二条和第五条指令中,如果直接地址正好是I/O口,则也是进行“读-改-写”操作。
6.逻辑或指令(6条)
ORL A,#data ;A←(A)∨data
ORL direct,#data ;direct←(direct)∨data
ORL A,Rn ;A←(A)∨(Rn)
ORL A,direct ;A←(A)∨(direct)
ORL direct,A ;direct←(direct)∨(A)
ORL A,@Ri ;A←(A)∨((Ri))
同样,这组指令的第二条和第五条也具有“读-改-写”功能。
7.逻辑异或指令(6条)
XRL A,#data ;A←(A)⊕data
XRL direct,#data ;direct←(direct)⊕data
XRL A,Rn ;A←(A)⊕(Rn)
XRL A,direct ;A←(A)⊕(direct)
XRL direct,A ;direct←(direct)⊕(A)
XRL A,@Ri ;A←(A)⊕((Ri))
同样,这组指令的第二条和第五条也具有“读-改-写”功能。
【例3.18】设P1中内容为AAH,A中内容为15H,执行下列程序:
ANL P1,#0F0H ;P1=0A0H
ORL P1,#0FH ;P1=0AFH
XRL P1,A ;P1=0BAH
从上例可见,逻辑操作是按位进行的,所以“ANL”操作常用来屏蔽字节中的某些位,要保留的位用“1”去“与”,要清除的位用“0”去“与”。“ORL”操作常用来对字节中的某些位置“1”,要保留的位用“0”去“或”,要置1的位用“1”去“或”。“XRL”操作常用来对字节中的某些位求反,要保留的位用“1”去“异或”。
【例3.19】把累加器A中的低4位送到外部RAM的2000H单元中,程序为:
MOV DPTR,#2000H ;DPTR←2000H
ANL A,#0FH ;A←(A)∧0FH(屏蔽A的高4位)
MOVX @DPTR,A ;((DPTR))←A
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。