二进制乘法:你如何"decompose"乘法器?



所以我正在尝试使用移位和添加算法在汇编语言程序中实现乘数。我在此 ISA 中没有可用的左移指令,但我确实了解向自身添加一个数字会将左移一个数字。

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

那么,我如何在组装中做到这一点呢?我很困惑。谢谢!

也许是 如何仅使用位移位和加法来乘除? 其中有更多细节。

在 x86 上,给定 EDX 中的15,你会这样做

lea eax, [rdx + rdx*4]

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

另请参阅如何使用逻辑门将二进制表示乘以十? computerscience.SE 以获取有关乘法的更多背景信息。

轮班指令比IMUL指令快吗? 有一些东西。

最新更新