51单片机之逻辑运算指令ANL、ORL、XRL等


前言

逻辑操作指令包括与、或、异或、清除、求反、移位等操作,其操作数都是8位


一、简单操作指令 CLR、CPL、SWAP

CLR英文全称:Clear
CPL英文全称:Complement
SWAP英文全称:Swap


CLR A

指令名称:累加器A清0指令
目的:将累加器A中的内容清零

CPL A

指令名称:累加器A取反指令
目的:将累加器A的内容逐位取反

SWAP A

指令名称:累加器半字节交换指令
目的:将累加器A的高低两半字节交换

助记符 功能 对标志位影响 字节数 周期数
P OV AC CY
CLR A 0 -> A × × × 1 1
CPL A (/A) -> A × × × × 1 1
SWAP A (AL)<--> (AH) × × × × 1 1

AL:A0123低半字节位;
AH:A4567高半字节位;
*表示无影响,√表示有影响,下同

例 (A) = 07H 即 (A) = 0000 0111B

  • CLR A:表示A的8位都位零,(A) = 0000 0000B;
  • CPL A:表示A的内容逐位取反,(A) = 1111 1000B = F8H;
  • SWAP A:表示A的高低半字节交换,(A) = 0111 0000B = 70H。

二、位移指令 RL、RR、RLC、RRC

RL英文全称:Rotate Left
RR英文全称:Rotate Right
RLC英文全称:Rotate Left throught the Carry flag
RRC英文全称:Rotate Right throught the Carry flag


RL A

指令名称:累加器A循环移指令
目的:累加器A的内容最高位变最低位,其他位都升一位

RR A

指令名称:累加器A循环移指令
目的:累加器A的内容最低位变最高位,其他位都降一位

RLC A

指令名称:累加器A连同进位位循环移指令
目的:累加器A的内容最高位进入CY,CY位的内容进入最低位,其他位都升一位

RRC A

指令名称:累加器A连同进位位循环移指令
目的:累加器A的内容最低位进入CY,CY位的内容进入最高位,其他位都升一位

助记符 功能 对标志位影响 字节数 周期数
P OV AC CY
RL A A循环左移一位 × × × × 1 1
RR A A循环右移一位 × × × × 1 1
RLC A A带进位循环左移一位 × × 1 1
RRC A A带进位循环右移一位 × × 1 1
  • RLC可以做乘2运算;
  • 左移一位可以看作乘2,前提是第7位是0;
  • 右移一位可以看作除2,前提是第0位是0;

例无符号8位二进制数(A) = 1011 1101B = BDH, CY = 0

  • RL A:将A的第7位送入第0位,其余位提升一位,结果为:(A) = 0111 1011B

  • RR A:将A的第0位送入第7位,其余位降低一位,结果为:(A) = 1101 1110B

  • RLC A:将A的第7位送入CY中,将CY的内容送入第0位,结果为(CY) = 1,(A) = 0111 1010B,表示17AH,正好是BDH两倍;

  • RRC A:将A的第0位送入CY中,将CY的内容送入第7位,结果为(CY) = 1,(A) = 0101 1110B,A中表示57H。


三、逻辑“与”指令 ANL

ANL英文全称:ANL Logic


ANL A, XXX

目的:将累加器A中的内容和操作数所指向的内容按位进行逻辑“与”操作,结果存放在A中
源操作数:寄存器Rn、直接地址direct、间接寄存器@Ri、立即数#data

助记符 功能 对标志位影响 字节数 周期数
P OV AC CY
ANL A, Rn (A) ∧ (Rn) -> A × × × 1 1
ANL A, @Ri (A) ∧ ((Ri)) -> A; i = 0, 1 × × × 1 1
ANL A, direct (A) ∧ (direct) -> A × × × 2 1
ANL A, #data (A) ∧ data -> A × × × 2 1
  • ANL能将某些位清零,对于想清零的位与0进行“与”逻辑,对于想保持原来的位与1进行“与”逻辑;

例 (A) = 1111 1100B = FCH,(10) = 2FH,(2FH) = 2DH,(R0) = 10H

  • ANL A, R0:结果为(A) = 0001 0000B;
  • ANL A, @R0:结果为(A) = 0010 1100B;
  • ANL A, 10H:结果为(A) = 0010 1100B;
  • ANL A, #10H:结果为(A) = 0001 0000B。

ANL direct, XXX

目的:将直接地址单元的内容和源操作数的内容按位进行逻辑“与”操作,结果存放在直接地址中
源操作数:累加器A、立即数#data

助记符 功能 对标志位影响 字节数 周期数
P OV AC CY
ANL direct, A (direct) ∧ (A) -> direct × × × × 2 1
ANL direct, #data (direct) ∧ data -> direct × × × × 3 2

四、逻辑“或”指令 ORL

ORL英文全称:OR Logic


ORL A, XXX

目的:将累加器A中的内容和操作数所指向的内容按位进行逻辑“或”操作,结果存放在A中
源操作数:寄存器Rn、直接地址direct、间接寄存器@Ri、立即数#data

助记符 功能 对标志位影响 字节数 周期数
P OV AC CY
ORL A, Rn (A) ∨ (Rn) -> A × × × 1 1
ORL A, @Ri (A) ∨ ((Ri)) -> A; i = 0, 1 × × × 1 1
ORL A, direct (A) ∨ (direct) -> A × × × 2 1
ORL A, #data (A) ∨ data -> A × × × 2 1
  • ORL能将某些位置一,对于想置一的位与1进行“或”逻辑,对于想保持原来的位与0进行“或”逻辑;

例 (A) = 1001 1100B = 9CH,(E1) = DFH,(DFH) = 2DH,(R0) = E1H

  • ORL A, R0:结果为(A) = 1111 1101B = FDH;
  • ORL A, @R0:结果为(A) = 1011 1101B = BDH;
  • ORL A, E1H:结果为(A) = 1101 1111B = DFH;
  • ORL A, #E1H:结果为(A) = 1111 1101B = FDH。

ORL direct, XXX

目的:将直接地址单元的内容和源操作数的内容按位进行逻辑“或”操作,结果存放在直接地址中
源操作数:累加器A、立即数#data

助记符 功能 对标志位影响 字节数 周期数
P OV AC CY
ORL direct, A (direct) ∨ (A) -> direct × × × × 2 1
ORL direct, #data (direct) ∨ data -> direct × × × × 3 2

五、逻辑“异或”指令 XRL

XRL英文全称:Exclusive-OR Logic


ORL A, XXX

目的:将累加器A中的内容和操作数所指向的内容按位进行逻辑“异或”操作,结果存放在A中
源操作数:寄存器Rn、直接地址direct、间接寄存器@Ri、立即数#data

助记符 功能 对标志位影响 字节数 周期数
P OV AC CY
XRL A, Rn (A) ⊕ (Rn) -> A × × × 1 1
XRL A, @Ri (A) ⊕ ((Ri)) -> A; i = 0, 1 × × × 1 1
XRL A, direct (A) ⊕ (direct) -> A × × × 2 1
XRL A, #data (A) ⊕ data -> A × × × 2 1
  • ORL能将某些位置取反;

XRL direct, XXX

目的:将直接地址单元的内容和源操作数的内容按位进行逻辑“或”操作,结果存放在直接地址中
源操作数:累加器A、立即数#data

助记符 功能 对标志位影响 字节数 周期数
P OV AC CY
XRL direct, A (direct) ⊕ (A) -> direct × × × × 2 1
XRL direct, #data (direct) ⊕ data -> direct × × × × 3 2

51单片机之系统指令

51单片机之数据转移指令MOV、MOVX、MOVC等

51单片机之位操作指令SETB、CPL等

51单片机之控制转移指令SJMP、LJMP等

51单片机之算术运算指令ADDC、SUBB等


由本人水平有限,文章难免有错误,望告知

发布了20 篇原创文章 · 获赞 26 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/jianming21/article/details/90611173