作者:平凡单片机
逻辑与指令
ANL A,Rn ;A 与 Rn 中的值按位 与 ,结果送入 A 中
ANL A,direct ;A 与 direct 中的值按位 与 ,结果送入 A 中
ANL A,@Ri ;A 与间址寻址单元 @Ri 中的值按位 与 ,结果送入 A 中
ANL A,#data ;A 与立即数 data 按位 与 ,结果送入 A 中
ANL direct,A ;direct 中值与 A 中的值按位 与 ,结果送入 direct 中
ANL direct,#data ;direct 中的值与立即数 data 按位 与 ,结果送入 direct 中。
这几条指令的关键是知道什么是逻辑与。这里的逻辑与是指按位与
例: 71H 和 56H 相与则将两数写成二进制形式:
( 71H ) 01110001
( 56H ) 00100110
结果 00100000 即 20H ,从上面的式子可以看出,两个参与运算的值只要其中有一个位上是 0 ,则这位的结果就是 0 ,两个同是 1 ,结果才是 1 。
理解了逻辑与的运算规则,结果自然就出来了。看每条指令后面的注释
下面再举一些例子来看。
MOV A , #45H ;(A)=45H
MOV R1 , #25H ;(R1)=25H
MOV 25H , #79H ;(25H)=79H
ANL A , @R1 ;45H 与 79H 按位与,结果送入 A 中为 41H ( A ) =41H
ANL 25H,#15H ;25H 中的值( 79H )与 15H 相与结果为( 25H ) =11H )
ANL 25H,A ;25H 中的值( 11H )与 A 中的值( 41H) 相与,结果为 (25H)=11H
在知道了逻辑与指令的功能后,逻辑或和逻辑异或的功能就很简单了。逻辑或是按位“或”,即有“ 1 ”为 1 ,全“ 0 ”为 0 。例:
10011000
或 01100001
结果 11111001
而异或则是按位“异或”,相同为“ 0 ”,相异为“ 1 ”。例:
10011000
异或 01100001
结果 11111001
而所有的或指令,就是将与指仿中的 ANL 换成 ORL ,而异或指令则是将 ANL 换成 XRL 。即
或指令:
ORL A,Rn ;A 和 Rn 中的值按位 或 ,结果送入 A 中
ORL A,direct ;A 和与间址寻址单元 @Ri 中的值按位 或 ,结果送入 A 中
ORL A,#data ;A 和立 direct 中的值按位 或 ,结果送入 A 中
ORL A,@Ri ;A 和即数 data 按位 或 ,结果送入 A 中
ORL direct,A ;direct 中值和 A 中的值按位 或 ,结果送入 direct 中
ORL direct,#data ;direct 中的值和立即数 data 按位 或 ,结果送入 direct 中。
异或指令:
XRL A,Rn ;A 和 Rn 中的值按位 异或 ,结果送入 A 中
XRL A,direct ;A 和 direct 中的值按位 异或 ,结果送入 A 中
XRL A,@Ri ;A 和间址寻址单元 @Ri 中的值按位 异或 ,结果送入 A 中
XRL A,#data ;A 和立即数 data 按位 异或 ,结果送入 A 中
XRL direct,A ;direct 中值和 A 中的值按位 异或 ,结果送入 direct 中
XRL direct,#data ;direct 中的值和立即数 data 按位 异或 ,结果送入 direct 中。
练习:
MOV A , #24H
MOV R0 , #37H
ORL A , R0
XRL A , #29H
MOV 35H , #10H
ORL 35H , #29H
MOV R0 , #35H
ANL A , @R0
四、控制转移类指令