0
我想用this Datasheet來編程MCS-51 microcontroller的彙編語言程序。用於MCS-51上24位數的乘法算法
它必須乘以24位數字。
也許我問一個愚蠢的問題,但我怎麼會乘以一列24位?
下面的圖片說明了乘法16位數字的方式。如何看24位數的乘法方案?根據在本文檔的快速偷看
我想用this Datasheet來編程MCS-51 microcontroller的彙編語言程序。用於MCS-51上24位數的乘法算法
它必須乘以24位數字。
也許我問一個愚蠢的問題,但我怎麼會乘以一列24位?
下面的圖片說明了乘法16位數字的方式。如何看24位數的乘法方案?根據在本文檔的快速偷看
中,MCS-51具有8x8-> 16乘法。你們兩個24位數字A
和B
,這等同於:
A = a0 + (a1 * 256) + (a2 * 65536)
B = b0 + (b1 * 256) + (b2 * 65536)
其中,A0爲最低字節,A1是中間字節,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 *
中刪除所有的東西,因爲顯然那個部分對低三字節不起作用。或者同樣停止在其他地方爲其他輸出尺寸進行工作。
幾乎相同的方式,但有更多的部分產品,你知道很長的乘法權嗎? – harold