装配中的快速乘法算法

时间:2015-01-05 10:49:42

标签: algorithm assembly binary

我的任务是编写一个编译器,将小编程语言编译为伪汇编语言(寄存器和存储单元的长度不确定)。

我要做的就是转换这样的指示:

a = b * c

到一组INC,SHL i,ADD i指令(其中i是指向存储器的指针,只有一个可用的寄存器)将执行乘法运算。 问题是,算法必须在O(log n)时间内完成它。

有人能逐步解释解决这个问题的算法吗? 我的朋友提到了Booth-Mcsorley算法,但我很难理解。

编辑: 伪装配指令包括:READ,WRITE,LOAD i,STORE i,ADD i,SUB i,SHR i,SHL i,INC,RESET,JUMP k,JZERO k,JODD k(如果寄存器为奇数则跳转到k)

1 个答案:

答案 0 :(得分:3)

由于这是一个假的汇编程序,我想知道为什么速度很重要?更有可能的是,它不鼓励你实现一个天真的迭代加法算法,其长度将与右手操作数的大小成比例(或者如果你想要一个简单的优化,则两个操作数中的较小者,但O(n)尽管如此)。

在缺少乘法指令的指令集中实现乘法的方法是使用移位和加法(在二进制中基本上长乘法)。根据您提供的说明,这似乎是最可能需要的解决方案。

这个问题:How can I multiply and divide using only bit shifting and adding? 因此可能具有相关性。 C中的O(log2 n)的shift + add实现表示为What is the time complexity of this multiplication algorithm?的答案,但可以适应您的指令集。

相关问题