Assembly MCS-51上24位数字的乘法算法

Assembly MCS-51上24位数字的乘法算法,assembly,microcontroller,multiplication,Assembly,Microcontroller,Multiplication,我正在尝试用汇编语言为一个带有 它必须乘以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的相应内容 因此

我正在尝试用汇编语言为一个带有

它必须乘以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)
因此,这是所有九个8x8倍数,然后分组相加,然后根据需要移动每组,最后将所有内容相加


如果您只想要一个24位的结果,而不是48位的结果,那么您可以从
16777216*
中删除所有内容,因为很明显,这一部分不会产生低三个字节。或者类似地,停止在其他地方进行其他输出尺寸的工作。

快速浏览文档,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)
因此,这是所有九个8x8倍数,然后分组相加,然后根据需要移动每组,最后将所有内容相加


如果您只想要一个24位的结果,而不是48位的结果,那么您可以从
16777216*
中删除所有内容,因为很明显,这一部分不会产生低三个字节。或者类似地,停止在其他地方进行其他输出大小的工作。

基本相同,但对于更多的部分积,您知道长乘法,对吗?基本相同,但对于更多的部分积,您知道长乘法,对吗?