2013-02-13 58 views
-2

再次提出這個問題是因爲上次人們迴避我的問題並建議我不能使用的解決方案。我正在用一種非常簡單的彙編語言編寫乘法器,其中我使用BEQ,NAND和ADD來創建SRL。我還必須將乘數保持在50行以下(迄今爲止使用了16行),希望解決方案可以循環使用。從ADD和NAND向右移位邏輯?

我的問題是我怎麼能實現一個SRL只有與非門和ADD

注:請不要建議加入了許多自身x次相乘。我現在正在研究的方法可以通過計算SRL問題來完成。

謝謝。

回答

1

我不認爲人們「迴避」你的問題。這與合作無關。 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: 
+0

你也有和代替NAND – 2013-02-13 07:27:49

+0

我以爲每個人都能弄清楚,'NAND(1,NAND(A,B))== AND(A,B) '! – Gene 2013-02-13 14:25:42

+0

我應該提到這當然是一個字而不是一點點,你想要'NAND(全部是1,NAND(a,b))',或者如果你有兩個補碼算術,那麼'NAND(-1,NAND (A,b))'。 – Gene 2013-02-14 04:16:33