Assembly 从ADD和NAND向右移位逻辑?

Assembly 从ADD和NAND向右移位逻辑?,assembly,add,bit-shift,Assembly,Add,Bit Shift,第二次问这个问题是因为上次人们回避了我的问题,提出了我无法使用的解决方案。我正在用一种非常简单的汇编语言制作一个乘法器,我用BEQ、NAND和ADD来创建一个SRL。我还必须将乘法器保持在50行以下(到目前为止使用了16行),以便有希望将解决方案放入循环中 我的问题是如何实现一个只有NAND和ADD的SRL 注意:请不要建议将一个数字乘以x。我现在正在研究的方法可以通过解决SRL问题来完成 谢谢。我认为人们不会“回避”你的问题。这是没有多少工作。NAND是按位操作的,因此,通过指令获取位位置之间

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

我的问题是如何实现一个只有NAND和ADD的SRL

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

谢谢。

我认为人们不会“回避”你的问题。这是没有多少工作。NAND是按位操作的,因此,通过指令获取位位置之间信息的唯一希望是add中的进位。我们有
x+x=sllx
。你没有提到你的处理器。如果有寄存器对,可以在一对寄存器的低位寄存器中加载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:

你也有,而不是NANDI假设每个人都能算出NAND(1,NAND(a,b))==和(a,b)!我应该提到的是,当然对于一个字而不是一个字,你会想要
NAND(所有的,NAND(a,b))
或者如果你有两个补码算法,那么
NAND(-1,NAND(a,b))
@akishuihkonen,只有NAND或NOR,你可以做任何布尔逻辑表达式,一些早期的可编程芯片有1或2个NANDs/NOR阵列