所以我试图使用shift和add算法在汇编语言程序中实现乘法器。我在这个ISA中没有可用的左移指令,但我确实知道为自己添加一个数字会将数字左移一个。
假设我想乘以5 * 15,即101
乘以1111
。我知道我需要在15中将每个部分位乘以5,但我对如何访问/使用这些部分位感到困惑。从右到左,我将1
乘以101
得到101,添加一个占位符向左移,然后继续每个连续的位,得到1010
,10100
和101000
。然后我将这些数字相加得到1001011
即75,这是正确的答案。
那么,我怎样才能在装配中做到这一点?我很困惑。谢谢!
答案 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?有一些东西。