例如:若(A)=B5H=10110101B,
执行下列指令:
XRL A,#0F0H ; A的高4位取反,低4位保留
MOV 30H,A ;(30H)←(A)=45H,
XRL A,30H ; 自身异或使A清零
执行后结果:
(A)=00H。
4)简单逻辑操作指令
CLR A ; 对累加器A清“0” E4
CPL A ; 对累加器A按位取反 F4
上例中用异或指令使累加器清零,需要两条双字节指令
MOV 30H, A 和 XRL A, 30H
共占用四字节存储空间。
MOV A,#00H
实现累加器清零,也需一条双字节指令
不影响Cy, AC, OV等标志
例:双字节数求补码。
解:对于一个16位数,R3存高8位,R2存低8位,求补结果仍存R3、R2求补的参
考程序如下:
MOV A,R2 ; 低8位数送A
CPL A ;低8位数取反
ADD A, #01H ; 加1得低8位数补码
MOV R2, A ;存补码低8位
MOV A, R3 ; 高8位数送A
CPL A ; 高8位取反
ADDC A, #00H ; 加低8位进位
MOV R3, A ;存补码高8位
例 16位数的算术左移。16位数在内存中低8位存放在M1单元,高8位存放在M1+1
单元。
CLR C ; 进位CY清零
MOV R1, #M1 ; 操作数地址M1送Rl
MOV A, @Rl ; 16位数低8位送A
RLC A ; 低8位左移,最低位补0
MOV @R1, A ; 低8位左移后,回送Ml存放
INC Rl ; 指向16位高8位地址M1+1
MOV A, @R1 ; 高8位送A
RLC A ; 高8位带低8位进位左移
MOV @R1, A ; 高8位左移后回送M1+1存放
例 将外部数据RAM的一个数据块传送到内部数据RAM,两者的首址分别为