您的位置: 网站首页 > 电子与嵌入式 > 单片机原理与应用 > 第3章 MCS-51单片机指令系统 > 【3.3.3 逻辑操作类指令】

3.3.3 逻辑操作类指令

 

逻辑运算指令共有24条,主要用于对8位数进行逻辑与、或、异或、取反、清零以及循环移位。

逻辑运算指令分为两类:一类是以A为目的操作数寄存器,一类是以直接地址为目的操作数,但其操作都是将目的操作数与源操作数按位进行位逻辑运算,操作结果送往目的操作数。这类指令不影响PSW中各个标志位。

1.与指令

ANL A,Rn                ;A←A Rn

ANL A,direct             ;A←A(direct)

ANL A,@Ri               ;A←A(Ri)

ANL A,#data             ;A←A#data

ANL direct,A            ;(direct) ←(direct)A

ANL direct,#data        ;(direct) ←(direct)#data

例如,设A=23H,(20H)=81H,执行ANL A,20H后,A=01H。

2.或指令

ORL A,Rn                ;A←ARn

ORL A,direct             ;A←A (direct)

ORL A,Ri                ;A←A (Ri)

ORL A,#data             ;A←A#data

ORL direct,A            ;(direct) ←(direct)A

ORL direct,#data        ;(direct) ←(direct)#data

例如,设A=24H,(20H)=40H,执行ORL A,20H后,A=64H。

3.异或指令

XRL A,Rn                ;A←ARn

XRL A,direct            ;A←A(direct)

XRL A,@Ri               ;A←A((Ri))

XRL A,#data             ;A←A#data

XRL direct,A            ;(direct) ←(direct)A

XRL direct,#data        ;(direct) ←(direct)#data

4.累加器A的逻辑操作指令

(1)累加器A求反与清除指令。

CPL  A              ;A←

CLR  A              ;A←0

例如,设A=23H,执行CPL A后,A=DCH。

(2)循环移位指令。

MCS-51的移位指令只能对累加器A进行,分为带进位和不带进位两类移位指令。

①循环左移。

RL  A    ;将累加器A的内容循环左移1位

②循环右移。

RR  A            ;将累加器A的内容循环右移1位

③带进位的循环左移。

RLC  A           ;将累加器A的内容连同进位位CY循环左移1位

④带进位的循环右移。

RRC A            ;将累加器A的内容连同进位位CY循环右移1位

例如,设A=20H,执行RL A指令后,A中各位数据向左移动1位,D7位数据进入D0位,A=40H。

又如,设A=20H,执行RR A指令后,A中各位数据向右移动1位,D0位数据进入D7位,A=10H。

【例3-10】将累加器A中的压缩BCD码分为两个字节,形成非压缩BCD码,放入40H和41H单元中。

解:由题意,将累加器A中的低4位保留,高4位清零放入40H;高4位保留,低4位清零,半字节交换后存入41H单元中。程序如下。

MOV R0,A             ;保存A中的内容到R0

ANL A,#00001111B    ;高4位清零,保留低4位不变

MOV 40H,A            ;将形成的低4位非压缩BCD码存入40H

MOV A,R0             ;取原数据

ANL A,#11110000B   ;保留高4位不变,清低4位

SWAP A               ;将高低4位交换

MOV 41H,A           ;将高4位非压缩BCD码存入41H

【例3-11】P1口高4位不变,把累加器A中的低4位由P1口的低4位输出。

解:据题意程序如下。

ANL A,#00001111B    ;将A的高4位清零

MOV R0,A             ;将A保存在R0

MOV A,P1             ;P1读入A

ANL A,#11ll0000B    ;高4位不变

ORL A,R0             ;将A的低4位和P1口的高4位组成一个字节

MOV P1,A             ;送P1口输出

5.逻辑操作类指令汇总

逻辑操作类指令除带进位的左(右)循环移位外,只对标志位P产生影响,且多为单周期指令。逻辑操作类指令汇总表如表3-5所示。

表3-5  逻辑运算类指令一览表

助  记  符

功能说明

字  节  数

振荡器周期

ANL A,Rn

寄存器“与”到累加器

1

12

续上表

助  记  符

功能说明

字  节  数

振荡器周期

ANL A,direct

直接寻址字节“与”到累加器

2

12

ANL A,@Ri

间接寻址RAM“与”到累加器

1

12

ANL A,#data

立即数“与”到累加器

2

12

ANL direct,A

累加器“与”到直接寻址字节

2

12

ANL direct,#data

立即数“与”到直接寻址字节

3

24

ORL A,@Rn

寄存器“与”到累加器

1

12

ORL A,#direct

直接寻址字节“或”到累加器

2

12

ORL A,Ri

间接寻址RAM“或”到累加器

1

12

ORL A,#data

立即数“或”到累加器

2

12

ORL direct,A

累加器“或”到直接寻址字节

2

12

ORL direct,#data

立即数“或”到直接寻址字节

3

24

XRL A,Rn

寄存器“异或”到累加器

1

12

XRL A,direct

直接寻址字节“异或”到累加器

2

12

XRL A,@Ri

间接寻址RAM“异或”到累加器

1

12

XRL A,#data

立即数“异或”到累加器

2

12

XRL direct,A

累加器“异或”到直接寻址字节

2

12

XRL direct,#data

立即数“异或”到直接寻址字节

3

24

RL A

累加器循环左移

1

12

RLC A

经过进位位的累加器循环左移

1

12

RR A

累加器循环右移

1

12

RRC A

经过进位位的累加器循环右移

1

12

CLR A

累加器清零

1

12

CPL A

累加器求反

1

12