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