⑴ 单片机移位指令问题:为什么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