基于MCS-51的24位数字乘法算法 [英] Multiplication algorithm for 24 bit numbers on MCS-51

查看:14
本文介绍了基于MCS-51的24位数字乘法算法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试用汇编语言为MCS-51 microcontrollerthis Datasheet编写程序。

它必须与24位数字相乘。

也许我问了一个愚蠢的问题,但我如何将24位的列相乘?

在下面的图片中说明了16位数字的乘法方法。24位数字的乘法方案会是什么样子?

mcs

根据文档快速浏览,推荐答案-51有8x8->16倍。两个24位数字AB,相当于:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆