-2

第二次问这个问题,因为上次人们回避了我的问题并提出了我无法使用的解决方案。我正在用一种非常简单的汇编语言制作乘法器,其中我有 BEQ、NAND 和 ADD 来创建 SRL。我还必须将乘数保持在 50 行以下(到目前为止使用了 16 行),因此希望该解决方案可以循环使用。

我的问题是如何仅使用 NAND 和 ADD 实现 SRL

注意:请不要建议通过将一个数字添加到自身 x 次来相乘。我现在正在研究的方法可以通过解决 SRL 问题来完成。

谢谢。

4

1 回答 1

1

我不认为人们“回避”了你的问题。这没什么好用的。NAND按位运行,因此您唯一希望通过指令获取位位置之间的信息是加法中的进位。我们有x+x = SLL x. 你没有说你的处理器。如果您有寄存器对,您可以将 x 加载到一对寄存器的低位寄存器中,然后为 N 位宽的寄存器左移 N-1 次。高寄存器将有你需要的东西。

否则会有一个测试和设置循环。

  ans = 0
  test = 2
  set = 1
next:
  if NAND(-1,NAND(x,test)) == 0 goto skip_set
  ans = ans + set
skip_set: 
  set = set + set
  test = test + test
  if test == 0 goto done
  goto next
done:

最后,如果你的词很窄,你可以在内存中写一个表格。

我知道您正在寻找 SRL,但当然可以仅使用 SLL 实现乘法。对于x*y,它会是这样的:

  ans = 0
  test = 1
next:
  if NAND(-1,NAND(x,test)) == 0 goto skip
  ans = ans + y
skip:
  y = y + y
  test = test + test
  if test == 0 goto done
  goto next
done:
于 2013-02-13T00:46:02.217 回答