我不認爲人們「迴避」你的問題。這與合作無關。 NAND按位進行操作,因此只有在指令位位置之間獲取信息的唯一希望是進位加載。我們有x+x = SLL x
。你沒有說你的處理器。如果你有寄存器對,你可以在一對寄存器的低寄存器中加載x,然後向左移N-1次以得到N位寬寄存器。高登記冊將有你所需要的。
否則有一個測試和設置循環。
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:
你也有和代替NAND – 2013-02-13 07:27:49
我以爲每個人都能弄清楚,'NAND(1,NAND(A,B))== AND(A,B) '! – Gene 2013-02-13 14:25:42
我應該提到這當然是一個字而不是一點點,你想要'NAND(全部是1,NAND(a,b))',或者如果你有兩個補碼算術,那麼'NAND(-1,NAND (A,b))'。 – Gene 2013-02-14 04:16:33