‘壹’ 关于单片机中16进制转BCD码的程序中,为什么不能用RLC代替ADDC
因为DA A这条指令需要C,AC这些位单元协助,而RLC 不影响AC,所以只能用ADDC,ADD.
而且像INC这类指令也不可以。
‘贰’ 单片机指令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
‘肆’ 单片机移位指令问题:为什么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)。详细区别与使用可参考网络文库
‘伍’ 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的位的状态会影响结果.
‘柒’ 51单片机中rr,rrc,rl,rlc这些指令除了位移做跑马灯外,还有其它有实际意义的作用吗 我觉得就是个废物
在数学运算中的意义就大了,左移一位就是乘以2,右移就是除以2,很有运算意义的!
‘捌’ 关于单片机查表指令时用RLC左移指令
【1】表格中存放了1024个数据,编号0-1023项。每个数据2个字节。
【2】R3,R2,构成16位的编号。二进制格式。编号为x。
【3】第x项的数据起始地址应为 TAB+(2*x)。
【4】2*x,其实就是左移一次x。由于x是16位的。但51没有16位循环左移指令。
【5】借助于A,利用带进位位循环左移RLC A指令,完成R3,R2左移一次。其中,低位的R2部分,左移时,R2最高位借助于Cy进位位补足到R3的最低位。
理解一下RLC A这条指令的功能,影响的标志位就可以了。