首页 理论教育 逻辑运算与移位指令8051单片机原理及接口技术

逻辑运算与移位指令8051单片机原理及接口技术

时间:2023-11-02 理论教育 版权反馈
【摘要】:逻辑运算与移位指令共有24条,其中移位指令4条,累加器清0、取反指令2条,逻辑指令18条。另外,SWAP A指令实际上相当于执行4次RL A循环左移指令。逻辑“异或”指令特性:XRL指令是单字节二进制数逻辑运算指令,常用于对目的操作数中的某些位做取反操作。

逻辑运算与移位指令8051单片机原理及接口技术

逻辑运算与移位指令共有24条,其中移位指令4条,累加器清0、取反指令2条,逻辑指令(包括“与”、“或”、“异或”)18条。下面将分别介绍这类指令。

1.累加器A清0与取反指令

978-7-111-51881-5-Chapter03-53.jpg

这组指令均为单字节指令,可以很方便地实现对累加器A的清0或按位取反操作。当然也可以用其他指令对A或其他寄存器进行清0或取反。

例如,用数据传送指令MOV A,#00可对累加器A送0(指令占双字节)。也可用逻辑异或指令清0,则需要两条指令MOV R2,A和XRL A,R2,共占4个字节。而用CLR A指令清0只需单字节指令码,大大节省了程序的存储空间,提高了程序的执行速度。

【例3-17】 要求对一个单字节有符号数求补码

一个单字节数是8位数,其最高位D7是符号位,其余7位是有效数字位。

假设A中已存储一个有符号单字节数,将其转换求得的补码仍存储在A中。正数的补码是其本身,负数的补码是有效数字位按位取反加1。参考程序如下:

978-7-111-51881-5-Chapter03-54.jpg

2.移位指令

移位指令是按二进制位移动指令,包括循环左移指令、循环右移指令、循环带进位左移指令和循环带进位右移指令4条指令。指令格式如下:

978-7-111-51881-5-Chapter03-55.jpg

这组指令的功能均是按二进制位的形式按位移动,指令必须在累加器A中操作。各指令的应用特点如下所述:

1)RL A左移指令的功能是将累加器A中内容按二进制位、以内部循环的方式向左移一位,同时位7循环移入位0,不影响标志。左移位操作示意图如图3-3所示。

978-7-111-51881-5-Chapter03-56.jpg

图3-3 左移位操作示意图

2)RR A右移指令的功能是将累加器A中内容按二进制位、以内部循环的方式向右移一位,同时位0循环移入位7,不影响其他标志。右移位操作示意图如图3-4所示。

978-7-111-51881-5-Chapter03-57.jpg

图3-4 右移位操作示意图

3)RLC A带进位左移指令的功能是将累加器A的内容和进位位Cy一起向左环移一位,Acc.7移入进位位Cy,Cy移入Acc.0,不影响OV、AC标志。带Cy左移位操作示意图如图3-5所示。

978-7-111-51881-5-Chapter03-58.jpg

图3-5 带Cy左移位操作示意图

4)RRC A指令的功能是将累加器A的内容和进位标志Cy一起向右环移一位,Acc.0进入Cy,Cy移入Acc.7,不影响OV、AC标志。带Cy右移位操作示意图如图3-6所示。

978-7-111-51881-5-Chapter03-59.jpg

图3-6 带Cy右移位操作示意图

循环移位指令的特性:执行一次左移指令相当于乘2,执行一次右移指令相当于除2。因此,在求解多个数的算术平均值时可以采用右移指令,在处理一个数的2的倍数运算时可以使用左移指令。

另外,SWAP A指令实际上相当于执行4次RL A循环左移指令。

【例3-18】 将一个16位数进行算术左移,此16位数分高、低8位分别存储在31H 30H单元中,算术左移后结果放回31H、30H单元中。

所谓的算术左移就是将操作数左移一位,并使最低位补0,相当于完成16位数的乘2操作。要实现16位数的算术左移,应执行带进位左移指令,先移低8位,再移高8位。参考程序如下:

978-7-111-51881-5-Chapter03-60.jpg

如果要求对16位数进行循环左移,则应设法将最高位D15放入进位位Cy中,然后再对低8位数左移,最后再对高8位左移即可。

3.逻辑“与”指令

逻辑“与”运算指令有如下6条,指令助记符为ANL。

978-7-111-51881-5-Chapter03-61.jpg

这组指令的功能是将两个指定的操作数按位进行逻辑“与”操作,运算结果保存在目的操作数所指定的累加器A或内部地址单元中。(www.xing528.com)

【例3-19】 若(A)=D8H,(R2)=5AH,则执行指令ANL A,R2。

运算式为

978-7-111-51881-5-Chapter03-62.jpg

结果为(A)=58H,R2的内容不变。

逻辑“与”指令特性:ANL指令是单字节二进制数逻辑指令,常用于对目的操作数中的某些位做屏蔽或清0操作。例如,若要求对8位二进制数的某位进行清除,则用“0”和该位相“与”;若要求保留某位,则用“1”和该位相“与”。

【例3-20】 若(P1)=A6H=10100110B,要求屏蔽P1口的低4位,则执行指令:

ANL P1,#0F0H ;(P1)∧#11110000B→P1

指令执行结果为(P1)=A0H=10100000B。

4.逻辑“或”指令

逻辑“或”运算指令有如下6条,指令助记符为ORL。

978-7-111-51881-5-Chapter03-63.jpg

这组指令的功能是将两个指定的操作数按位进行逻辑“或”操作,运算结果保存在目的操作数所指定的累加器A或内部地址单元中。

【例3-21】 若(A)=B8H,(R0)=50H,(50H)=37H。则执行指令ORL A,@R0。

运算式为

978-7-111-51881-5-Chapter03-64.jpg

结果为(A)=BFH,R0和50H单元的内容不变。

逻辑“或”指令特性:ORL指令是单字节二进制数逻辑指令,常用于对目的操作数中的某些位做置1或保留操作。例如,若要求对8位二进制数的某位置1,则用“1”与该位相“或”;若要求保留某位的原值,则用“0”与该位相“或”。

【例3-22】 若(P1)=E8H=11101000B,要求高5位保留,低3位置1。则执行指令:

978-7-111-51881-5-Chapter03-65.jpg

指令执行结果为(P1)=EFH=11101111B。

【例3-23】 要求将累加器A中的高5位送到P1口的高5位,P1口的低3位保持不变,用逻辑指令实现如下:

978-7-111-51881-5-Chapter03-66.jpg

5.逻辑“异或”指令

逻辑“异或”运算指令有如下6条,指令助记符为XRL。

978-7-111-51881-5-Chapter03-67.jpg

这组指令的功能是将两个指定的操作数按位进行逻辑“异或”操作,运算结果保存在目的操作数所指定的累加器A或内部地址单元中。

【例3-24】 若(A)=D9H,(35H)=5BH。则执行指令XRL A,35H。

运算式为

978-7-111-51881-5-Chapter03-68.jpg

结果为(A)=82H,35H单元的内容不变。

逻辑“异或”指令特性:XRL指令是单字节二进制数逻辑运算指令,常用于对目的操作数中的某些位做取反操作。例如,若要求对8位二进制数的某位取反,则用“1”与该位做“异或”操作;若要求保留某位,则用“0”与该位相“异或”。XRL异或指令还可以将一个寄存器或地址单元的内容进行自身“异或”,来实现清0操作。

【例3-25】 若(A)=C5H=10100101B,要求与0FH相“异或”操作,则执行指令:

978-7-111-51881-5-Chapter03-69.jpg

指令执行结果为(A)=00H,(40H)=CAH。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈