二进制乘法:你如何“分解”乘数?

时间:2018-05-16 03:58:21

标签: assembly binary multiplication

所以我试图使用shift和add算法在汇编语言程序中实现乘法器。我在这个ISA中没有可用的左移指令,但我确实知道为自己添加一个数字会将数字左移一个。

假设我想乘以5 * 15,即101乘以1111。我知道我需要在15中将每个部分位乘以5,但我对如何访问/使用这些部分位感到困惑。从右到左,我将1乘以101得到101,添加一个占位符向左移,然后继续每个连续的位,得到101010100101000。然后我将这些数字相加得到1001011即75,这是正确的答案。

那么,我怎样才能在装配中做到这一点?我很困惑。谢谢!

1 个答案:

答案 0 :(得分:1)

可能是How can I multiply and divide using only bit shifting and adding? 的副本,其中包含更多细节。

在x86上的

,在EDX中给定15,你可以

lea eax, [rdx + rdx*4]

EAX = (EDX<<2) + EDX = EDX*5,因为101(1<<2) + (1<<0)

有关multiply的更多背景,请参阅computerscience.SE上的How can I multiply a binary representation by ten using logic gates?

Is a shift instruction faster than an IMUL instruction?有一些东西。