Ⅰ 51单片机,查表指令,乘2用移位。
51单片机查表指令是:MOVC A,@A+DPTR
DPTR是表的首地址,第二个A是偏移量。第一个A是取出的结果。
乘2相当于左移一位,即:RLC A(C需要先清零)
除2相当于右移一位,即:RRC A(C需要先清零)
Ⅱ 求教:51单片机,十六位二进制数乘以2后放回原单元,用移位的方法怎么做
左移其实就是乘法。
例如十进制;10左移一位就是100,相当于10*10;
二进制:10左移一位就是100,从原先的2变为4,就是乘以2;
左移一位就是把原来的数乘以"进制".
二进制x2就是左移一位。
Ⅲ 单片机第三章作业,用移位的方法实现16位二进制数乘3的程序,16位二进制数在R0R1中,结果在R2R3中。
最要练习的是带进位移位,带进位加法 clr c;RLCR1,RLC R0.这个结果再加上(R0R1)。就是乘以3的结果。结果放到R2R3,很久没有用51了,指令都忘了。但是这个题目没有考虑溢出。比如FFFF×3后就不止16位了。R2R3放不下了
Ⅳ 单片机指令部分,两个16进制的数怎么相乘
你可以用两个寄存器放一个数字,然后AB相乘就转换为四个寄存器相乘,结果放在四个寄存器中,这样数字就可以放下了。八位的寄存器最多能达到0FFH,放不下这么大的数,所以分开存放,然后进行相乘,可以得到结果。
Ⅳ 【说得好有奖】单片机查表时用RL或RLC移位乘2的问题!!根据这个程序帮我分析下
RL是循环左移 移除最高位进入最低位 最高位为0时无区别
还有a只有8位 91*2=122h 但是a只能放下ffh 所以最高位舍弃 变成22
严格意义上说 左移不等同于乘2 楼主再理解一下 不懂再把问题补充一下
设表格中有1024个数据项,每个数据为2个字节,表格总长度为2048个字节
你看 这里假设有1024个数据项 如果是超出部分无法查表的话 那么ffff-1024=efdbh 一共有这么多的数据不能查 显然题意不是这样的。
Ⅵ 32位单片机计算两个int16的数相乘和两个int32的数相乘,所花的周期一样吗
一般是一样的。
这个具体可以查一下芯片内核指令代码的手册,如果有硬件乘法指令的系统,16位运算与32位运算所用时间,一般是一样的。
楼上的忽略了32位机这个前提。一般在32位机上是会有硬件乘法指令或者是乘法器部件,是可以在单周期内计算32位乘法的。而16位的乘法,一般都是扩展成32位的乘法来实现,所以说时间一般来说是一样的,都是一个周期。
特殊的情况包括,
没有硬件乘法,使用移位加程序模拟乘法功能,32位的乘法时间可能会比16位乘多一倍,当然这还取决于乘法模拟算法的具体实现。
用32位实现16位乘法,可能需要对16位数进行额外的扩展调整,这时是16位的慢一点。一般在C语言中就是根据系统字长规定int的类型,所以在C语言中如果不考虑移植,多使用int可能会提高编译的效率,在32位机上最好使用32位的数据进行计算反而更快一些。
Ⅶ 单片机 怎么用位移的方法实现乘除法
因为在寄存器里的数都是二进制的,所以乘以2:左移一位;乘以4左移两位;乘以8左移三位……依此类推(但要注意寄存器总共有多少位,防止溢出),除法用右移。
直接移位只能计算乘数(或除数)为2的n次方的乘(除)运算,对于一般的乘除法,还要配合加(减)法运算,比如a?9=a??3+a
实际上二进制数的基本运算即加,取反,移位等,通过变换来计算减,乘,除。
可以验证,用单片机C语言编程计算乘数为2的n次方的乘法运算比乘数为一般数的乘法运算要快得多,就是因为前者只需直接移位,后者还需配合加法或经多步运算
Ⅷ 51单片机中,将R3中的数乘4(用移位指令)。 有人给的答案:
你要乘以4左移是乘以2,所以要做两次左移,另外由于左移的RLC是带进位C的,所以为了避免失误每次左移前都要将C进位清0