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

3.3.3 逻辑操作类指令

 

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

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

1.与指令

ANL A,Rn                ;AA Rn

ANL A,direct             ;AA(direct)

ANL A,@Ri               ;AA(Ri)

ANL A,#data             ;AA#data

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

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

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

2.或指令

ORL A,Rn                ;AARn

ORL A,direct             ;AA (direct)

ORL A,Ri                ;AA (Ri)

ORL A,#data             ;AA#data

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

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

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

3.异或指令

XRL A,Rn                ;AARn

XRL A,direct            ;AA(direct)

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

XRL A,#data             ;AA#data

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

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

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

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

CPL  A              ;A

CLR  A              ;A0

例如,设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码,放入40H41H单元中。

解:由题意,将累加器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 41HA           ;将高4位非压缩BCD码存入41H

【例3-11P1口高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 ARn

寄存器“与”到累加器

1

12

续上表

   

功能说明

   

振荡器周期

ANL Adirect

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

2

12

ANL A@Ri

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

1

12

ANL A#data

立即数“与”到累加器

2

12

ANL directA

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

2

12

ANL direct#data

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

3

24

ORL A@Rn

寄存器“与”到累加器

1

12

ORL A#direct

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

2

12

ORL ARi

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

1

12

ORL A#data

立即数“或”到累加器

2

12

ORL directA

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

2

12

ORL direct#data

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

3

24

XRL ARn

寄存器“异或”到累加器

1

12

XRL Adirect

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

2

12

XRL A@Ri

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

1

12

XRL A#data

立即数“异或”到累加器

2

12

XRL directA

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

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