我正在尝试使用MCS-51 microcontroller为this Datasheet的汇编语言编写程序。
必须乘以24位数字。
也许我问一个愚蠢的问题,但我怎么会乘以24位的列?
在下面的图片中说明了乘以16位数字的方法。如何看待24位数的乘法方案?
答案 0 :(得分:4)
根据文档的快速浏览,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 *
中删除所有内容,因为很明显该部分不能用于低三字节。或者类似地停止在其他地方为其他输出尺寸做工作。