⑴ 單片機移位指令問題:為什麼RLC A 左移一位相當於剩餘2 啊 !
你這個程序只有第一個問題的解答,即只有X2的操作。X2的操作比較好理解,P進制運算中,將數左移一位就是乘P。如10進制數左移一位就是乘10。你對後面的程序理解有問題。注釋「;累加器高位送入41H單元」是整個後面三條語句完成的,而並不是MOV 40H,A這條語句完成的。另:程序有問題,CLR C 這句應該是CLR A 。因為移位之後A的最高位會丟失,但如果最高位為1,移出時會產生進位,這時進位標志CY會置1,這樣,相當於將A的最高位移入CY中了,因此CY即表示乘法結果的高位。RLC A 將CY移入A的低位,然後MOV 41H,A 將A送入41H保存,即保存了乘法結果的高位。
另一個問題,絕對轉移指令和長轉移指令的區別就是轉移的地址范圍不一樣。絕對轉移指令的轉移地址為11位(2K),長轉移指令的轉移地址為16位(64K)。詳細區別與使用可參考網路文庫
⑵ 關於單片幾中RL 和RLC的區別
rl是左移指令,參加左移的是8個位
rlc是帶進位位的左移,參加左移的共有9個位
設a=01000001,c=1;
則如果執行rl
,則a=10000010,c=1(a所有位左移一位,最低位補零,c不參加移位操作,保持原值不變)
如果執行rlc後,則a=10000011,c=0(a的最高位移到c,c原值移到a最低位)
⑶ 單片機中匯編語言RLC是什麼意思
RLC 是帶進位的循環左移,RLC A即將A的內容左移一位,將進位位C中的值移到累加器A的最低位,A的最高位移到C里。
譬如說:設A=01000001,C=1;
則如果執行RL ,則A=10000010,C=1(A所有位左移一位,最低位補零,C不參加移位操作,保持原值不變),如果執行RLC後,則A=10000011,C=0(A的最高位移到C,C原值移到A最低位)。
C=1,A=55H,RLC A後則為:C=0 A=ABH,即:1 01010101變為:0 10101011
(3)單片機rlc擴展閱讀:
匯編語言ROL和RCL的區別方法:
AL=10100000時,ROL AL,1就把最高位的 1 移到最後,使AL變成 0100 0001,同時移出的1送CF;ROL AL,CL(CL=2),相當於2次 ROL AL,1,所以AL變成 1000 0010,最後移出的0送CF。
RCL AL,1則把AL的最高位1送給CF,使CF=1,AL其它位相應左移,成為 0100 000X,最後空下的X位被CF原來的值補齊;同樣,ROL AL,CL(CL=2),相當於2次 RCL AL,1,最後AL變成 1000 00X1,AL原第二位的0到了CF,CF原來的值補AL中的x。
⑷ RLC在單片機里什麼意思
RLC 是帶進位的循環左移,
RLC A
即將A的內容左移一位,將進位位C中的值移到累加器A的最低位,A的最高位移到C里。、
是帶進位循環左移比如:
C=1,A=55H,RLC A後則為:C=0 A=ABH,即:
1 01010101變為:
0 10101011
⑸ 從這兩段單片機匯編程序來看,RR,RL和RRC,RLC在這里區別不大
不一樣,
不帶C的循環,就A里的8位數據自循環,移動8次,循環一周.
帶C的就不一樣,移動一次,C的狀態會移入A,而A的移出的位會移進C.
就是C參與了移動,所以C的位的狀態會影響結果.
⑹ 單片機指令RLC A帶進位的循環轉移,怎麼進位呀進位進到哪裡去呀可以舉一個例子嗎
先看 RL A,這條指令只是把 A 中的八位數,循環左移。
再看 RLC A,這條指令把 A 中的八位數,以及C,共九位數,循環左移。
例如:C = 1,A = 0011 0000,執行RLC A 後:
A 中的最高位 0,移到C;C 中原來的 1,移到 A 的最低位。
結果:C = 0,A = 0110 0001。
------------------
如果執行 RL A,則僅有 A 循環移位,C 就不變了。
結果:C = 1,A = 0110 0000。
⑺ 單片機循環移位指令中A=7AH,CY=1,執行指令RLC A,結果是怎麼算的
首先,RLC表示A帶進位標志(CY)循環左移一次,相當於乘以2;
進位標志CY=1,則A=7AH=123D(十進制的123)的帶進位標志用二進製表示為1 0111 1010 ,將其整體左移一位(就像是排頭走到最後一個,其他8個依次補位),
變為0 1111 0101,即十六進制的F5H=246D(即十進制的246),此時,第一個數 0 就是進位標志,即CY=0
所以,執行後結果為,(A)=F5H,CY=0。F5H=246D=123D×2
⑻ 在51單片機中,用匯編語言,RLC A,為什麼左移兩位以後,不是兩個燈點亮
用RLC A左移,其中包括了進位位Cy了,A左移兩位以後不一定變成11111100,因為原來Cy的狀態未知,所以,不是亮兩個LED,當然需要是LED的負極接在I/O腳上,是0有效才能是輸出0使LED亮。
要保證變成11111100,需要這么寫:
CLR C
RLC A
CLR C
RLC A
如果是循環左移的話,就寫一對;
MOV R7,#8 ;循環8次
LOP:CLR C
RLC A
MOV P0,A
DJNZ R7,LOP
..................
⑼ 關於單片機查表指令時用RLC左移指令
MOV
DPTR,#TAB
MOV
A,R3
;
如
R2R
3
=
0292H
=
0000
0010
1001
0010
(
十進制
658
)
CLR
C
;
C
=0
A=
1001
0010
RLC
A
;
A
=
0010
0100
C
=
1
(
左移一位)
XCH
A,R2
;
A
<=>
R2
A
=
0000
0010
C=1
RLC
A
;
A
=
0000
0101
C
=
0
(
左移一位)
XCH
AR2
;
A
<=>
R2
R2=0000
0101
A
=
0010
0100
(
十六進制
0524H)
ADD
A,DPL
;
(
十進制
1316)
MOV
DPL,A;調整DPL,DPH
MOV
A,DPH
ADDC
A,R2
MOV
DPH,A
CLR
A
MOVC
A,@A+DPTR;查表
MOV
R2,A;第一位元組
CLR
A
INC
DPTR
MOVC
A,@A+DPTR;查第二位元組
MOV
R3,A
RET
TAB:
DW
XXXXH;共1024個
數據項
DW
XXXXH
......
DW
XXXXH