从ADD和NAND向右移动逻辑?

时间:2013-02-13 00:08:51

标签: assembly add bit-shift

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

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

注意:请不要建议通过向自身添加数字乘以x倍。我现在正在处理的方法可以通过找出SRL问题来完成。

感谢。

1 个答案:

答案 0 :(得分: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: