专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

逻辑运算指令

作者:佚名   来源:本站原创   点击数:  更新时间:2007年09月19日   【字体:

1.    逻辑运算指令的一般性说明

*          与、或、异或的逻辑运算指令可以Acc或direct为目标。但是以direct为目标时,另一操作数只能是Acc或立即数。

*          与、或、异或是对位逻辑运算。

*          其他逻辑运算指令只对Acc操作。

*          小循环不影响Cy,大循环Cy在循环圈内。

*          除了RLC和RRC,逻辑运算指令不影响P以外的标志位。


2.           与、或、异或的特殊用途

*          用ANL指令屏蔽指定位

例:ANL  A,#0FH  ;屏蔽高4位

*          用ORL指令将指定位置1

例:ORL  A,#0FH  ;将低4位置1

*          用ORL指令拼接一个字节

例:ANL  A,#0FH

ANL  B,#0F0H

ORL  A,B

*          用XRL指令将指定位取反

例:XRL  A,#55H  ;将D0、D2、D4、D6等位取反

表 3-4  逻辑运算指令

操作码

目标操作数

参与运算的操作数

说         明

 

ANL

    A

 Rn; direct; @Ri; # data

 

  逻辑与

  direct

 A; # data

 

 ORL

    A

 Rn; direct; @Ri; # data

 

  逻辑或

  direct

 A; # data

 

 XRL

    A

 Rn; direct; @Ri; # data

 

  逻辑异或

  direct

 A; # data

CPL A

累加器(A)取反

CLR A

累加器(A)清零

RL

 

    A

                           

   (A)左小循环,不影响Cy

RLC

 

A

 

  ←  (A)左大循环

RR

 

A

 

     (A)右小循环,不影响Cy

RRC

 

A

 

   →   (A)右大循环

 

 

3.    循环移位逻辑运算指令的应用

*          乘除法运算

左移=无符号数乘2,右移=有符号数除2。

例:A×B,积存(BA)

算法:乘数在(A),积在(R2)(A)。

1)     (A)右移一位;

2)     (A)移出的一位若为1,则(R2)+被乘数(B);

3)     积(R2)(A)双字节右移一位;第2、3步循环8次。

为简化,假定为4位,循环4次。(A)=1011, (B)=1111


MOV  R2,#0

MOV  R3,#8

CLR   C

RRC  A

 LP:XCH  A,R2

JNC  RRR

ADD  A,B

RRR:RRC  A

XCH  A,R2  ;①

RRC  A       ;②

DJNZ  R3,LP

MOV  B,R2

   下表第一列为:循环次数-执行点

其余各列为逻辑运算指令执行点的操作结果。

循环

R2

C

A

C

初态

0000

0101

1

1-①

0111

1

0101

1-②

0111

1010

1

2-①

1011

0

1010

2-②

1011

0101

0

3-①

0101

1

0101

3-②

0101

1010

1

4-①

1010

1

1010

4-②

1010

0101

0

 

 
 

 

 

 

 

 逻辑尺以二进制数表示二值逻辑序列,逐位移出,并据此行逻辑控制。

关闭窗口