关于单片机中的RLC运算

问题如上

(1)在6处,之所以选择带进位左移,就是将低位运算的CY结果也一块加上左移,并没有将CY清零啊~
(2)对一个数进行左移,必然会造成最高位溢出的结果,这时候CY当然就是溢出的标志位,你对BDH即10111101做左移,如果存储器有9位的话,本来应该是101111010,即17AH,但是存储器只有8位,溢出的最高位1只能由CY来标志,当然7AH要加上CY的1才是BDH的二倍。追问

如果在7处程序还要进行加法运算,就类似上面的运算,就会把CY清零,那刚才运算的结果就会受影响,该怎么办,可以把PSW压入堆栈吗?

追答

额,这要看你最终实现的效果是什么了,对于这道题目来说,它并不要求你关心运算结果的溢出(就是第十七位),只是将运算剩余结果的十六位数存放到原处,所以对于这道题目你不用纠结最后CY怎么怎么样;
当然,抛开这道题目,如果你想实现的效果是要得到正确的乘二的结果,方法可以有很多种,例如你可以再定义一个字节的存储地址32H来存储最高位的计算结果,你说的压入堆栈也是一种方法吧~

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-10-08
本程序,可以实现 30H31H 中十六位数的乘2的运算。

在6处,你不想执行7,却要去执行别的程序?

那么,在别的程序中,应该对C加以保护;
执行完毕别的程序后,再恢复C的内容。

之后再执行7。

这就是:保护现场、恢复现场。
这是编程时,常用的方法。
----
对 BDH 进行 RLC?

BDH,最高位是1,乘以2后,A,里面存不下。

对 BDH 进行乘以2,就应该使用16位数的乘以2。
用上面的程序,即可对 BDH 进行乘以2。

RLC在单片机里代表什么意思?
RLC 是带进位的循环左移,RLC A即将A的内容左移一位,将进位位C中的值移到累加器A的最低位,A的最高位移到C里。、是带进位循环左移比如:C=1,A=55H,RLC A后则为:C=0 A=ABH,即:1 01010101变为:0 10101011

单片机 10101000经过RLC后的值是多少
RLC是带进位位的左移,参加左移的共有9个位 A=10101000,如果C=1;执行RLC后,则A=01010001,C=1(A的最高位移到C,C原值移到A最低位)如果C=0;执行RLC后,则A=01010000,C=1(A的最高位移到C,C原值移到A最低位)

关于单片机查表指令时用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指令...

单片机循环移位指令中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),此时,第一...

【说得好有奖】单片机查表时用RL或RLC移位乘2的问题!!根据这个程序帮我...
RL是循环左移 移除最高位进入最低位 最高位为0时无区别 还有a只有8位 91*2=122h 但是a只能放下ffh 所以最高位舍弃 变成22 严格意义上说 左移不等同于乘2 楼主再理解一下 不懂再把问题补充一下 设表格中有1024个数据项,每个数据为2个字节,表格总长度为2048个字节 你看 这里假设有1024个...

单片机例题 不明白前面为什么要RLC 还有那个ADDC怎么回事 可以的话最好...
RLC A ;R3X2,进位在C中 MOV R3,A ;放回R3 XCH A,R2 RLC A XCH R2,A ;R2X2 ADD A,DPL ;首地址低字节与偏移量的低字节相加,因为查表是2字节,所以将x值乘以2 MOV DPL,A MOV A,DPH ADDC A,R2 ;首地址高字节与偏移量的高字节带进位相加 MOV DPH,A CLR A MOVC1...

单片机移位指令问题:为什么RLC A 左移一位相当于剩余2 啊!
因为移位之后A的最高位会丢失,但如果最高位为1,移出时会产生进位,这时进位标志CY会置1,这样,相当于将A的最高位移入CY中了,因此CY即表示乘法结果的高位。RLC A 将CY移入A的低位,然后MOV 41H,A 将A送入41H保存,即保存了乘法结果的高位。另一个问题,绝对转移指令和长转移指令的区别...

51单片机中rr,rrc,rl,rlc这些指令除了位移做跑马灯外,还有其它有实际意 ...
在数学运算中的意义就大了,左移一位就是乘以2,右移就是除以2,很有运算意义的!

单片机指令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。--- ...

单片机16位二进制转换成BCD码程序理解
在前面,是用 RLC 指令,把二进制数字,逐位移动到 Cy。楼主给出的这三个小程序,也是把左移,只是用的带进位的加法指令。MOV A, R4 ADDC A, R4 ;二倍的 R4,就是左移一位,并且把 Cy 填入最低位。DAA ;这就成为 BCD 码了。依此类推,R5、R6,都用带进位加,进行左移...

相似回答