【问题标题】:Multiplication algorithm for 24 bit numbers on MCS-51MCS-51 上 24 位数字的乘法算法
【发布时间】:2017-01-23 20:47:03
【问题描述】:

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

它必须乘以 24 位数字。

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

在下图中,说明了乘以 16 位数字的方法。 24 位数字的乘法方案如何?

【问题讨论】:

  • 几乎相同的方式,但有更多的部分产品,你知道长乘法吗?

标签: assembly microcontroller multiplication


【解决方案1】:

根据对文档的快速浏览,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)

所以这都是九个 8x8 乘法,然后分组相加,然后根据需要移动每个组,然后在最后添加所有内容。

如果您只想要一个 24 位结果而不是 48 位结果,您可以从16777216 * 中删除所有内容,因为显然该部分无法贡献低三个字节。或者类似地停止在其他地方为其他输出尺寸做这项工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    相关资源
    最近更新 更多