1. 邏輯運(yùn)算指令的一般性說(shuō)明
* 與、或、異或的邏輯運(yùn)算指令可以Acc或direct為目標(biāo)。但是以direct為目標(biāo)時(shí),另一操作數(shù)只能是Acc或立即數(shù)。
* 與、或、異或是對(duì)位邏輯運(yùn)算。
* 其他邏輯運(yùn)算指令只對(duì)Acc操作。
* 小循環(huán)不影響Cy,大循環(huán)Cy在循環(huán)圈內(nèi)。
* 除了RLC和RRC,邏輯運(yùn)算指令不影響P以外的標(biāo)志位。
2. 與、或、異或的特殊用途
* 用ANL指令屏蔽指定位
例:ANL A,#0FH ;屏蔽高4位
* 用ORL指令將指定位置1
例:ORL A,#0FH ;將低4位置1
* 用ORL指令拼接一個(gè)字節(jié)
例:ANL A,#0FH
ANL B,#0F0H
ORL A,B
* 用XRL指令將指定位取反
例:XRL A,#55H ;將D0、D2、D4、D6等位取反
表 3-4 邏輯運(yùn)算指令
操作碼 |
目標(biāo)操作數(shù) |
參與運(yùn)算的操作數(shù) |
說(shuō) 明 |
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)左小循環(huán),不影響Cy |
|
RLC |
A |
← (A)左大循環(huán) |
|
RR |
A |
(A)右小循環(huán),不影響Cy |
|
RRC |
A |
→ (A)右大循環(huán) |
3. 循環(huán)移位邏輯運(yùn)算指令的應(yīng)用
* 乘除法運(yùn)算
左移=無(wú)符號(hào)數(shù)乘2,右移=有符號(hào)數(shù)除2。
例:A×B,積存(BA)
算法:乘數(shù)在(A),積在(R2)(A)。
1) (A)右移一位;
2) (A)移出的一位若為1,則(R2)+被乘數(shù)(B);
3) 積(R2)(A)雙字節(jié)右移一位;第2、3步循環(huán)8次。
為簡(jiǎn)化,假定為4位,循環(huán)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
下表第一列為:循環(huán)次數(shù)-執(zhí)行點(diǎn)
其余各列為邏輯運(yùn)算指令執(zhí)行點(diǎn)的操作結(jié)果。
|
邏輯尺以二進(jìn)制數(shù)表示二值邏輯序列,逐位移出,并據(jù)此行邏輯控制。