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
下表第一列为:循环次数-执行点
其余各列为逻辑运算指令执行点的操作结果。
|
逻辑尺以二进制数表示二值逻辑序列,逐位移出,并据此行逻辑控制。