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
下表第一列為:循環次數-執行點
其余各列為邏輯運算指令執行點的操作結果。
|
邏輯尺以二進制數表示二值邏輯序列,逐位移出,并據此行邏輯控制。