基于MCS-51的24位数字乘法算法 [英] Multiplication algorithm for 24 bit numbers on MCS-51
本文介绍了基于MCS-51的24位数字乘法算法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试用汇编语言为MCS-51 microcontroller和this Datasheet编写程序。
它必须与24位数字相乘。
也许我问了一个愚蠢的问题,但我如何将24位的列相乘?
在下面的图片中说明了16位数字的乘法方法。24位数字的乘法方案会是什么样子?mcs
根据文档快速浏览,推荐答案-51有8x8->16倍。两个24位数字A
和B
,相当于:
A = a0 + (a1 * 256) + (a2 * 65536)
B = b0 + (b1 * 256) + (b2 * 65536)
其中a0是A的最低字节,a1是A的中间字节,a2是最高字节,bs是B的对应字节。
因此:
A * B = (a0 + (a1 * 256) + (a2 * 65536)) * (b0 + (b1 * 256) + (b2 * 65536))
= a0 * (b0 + (b1 * 256) + (b2 * 65536)) +
a1 * 256 * (b0 + (b1 * 256) + (b2 * 65536)) +
a2 * 65536 * (b0 + (b1 * 256) + (b2 * 65536))
= a0 * b0 + a0 * b1 * 256 + a0 * b2 * 65536 +
a1 * b0 * 256 + a1 * b1 * 65536 + a1 * b2 * 16777216 +
a2 * b0 * 65536 + a2 * b1 * 16777216 + a2 * b2 * 4294967296
= a0 * b0 +
256 * (a0 * b1 + a1 * b0) +
65536 * (a0 * b2 + a1 * b1 + a2 * b0) +
16777216 * (a1 * b2 + a2 * b0) +
4294967296 * (a2 * b2)
所以全部是9个8x8乘法,然后分组相加,然后根据需要对每组进行移位,最后将所有内容相加。
如果您只想要24位的结果,而不是48位的结果,您可以从16777216 *
中删除所有内容,因为这一部分显然不能构成低三个字节。或类似地停止在其他地方对其他输出大小执行此工作。
这篇关于基于MCS-51的24位数字乘法算法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文