簡體   English   中英

用匯編語言減去 16 位 2 的補碼數

[英]Subtracting 16-bit 2's compliment numbers in assembly language

我正在嘗試構建一個計算機芯片,類似於在 nand2tetris 上發現的 Add16 芯片,它減去 16 而不是添加它。 但是,我不斷遇到不正確的結果。 有人能幫我嗎?

Chip Sub16 {
IN a[16], b[16];
OUT out[16];

PARTS:
Not16(in=b, out=subB);
Add16(a=a, b=notB, out=out);
}

我也試過這個版本:

Not(in=b[0], out=out0);
FullAdder(a=a[0], b=out0, c=false, sum=out[0], carry=c1);
Not(in=b[1], out=out1);
FullAdder(a=a[1], b=out1, c=c1, sum=out[1], carry=c2);

...

以此類推,數字每一步都在變大,達到 16 個。期望的結果如下:

顯示 a、b 和減法輸出的所需結果

任何可以提供的幫助將不勝感激!

AB有幾個公式。

一個是 A + ~B + 1。

另一個是〜(〜A + B)。 This latter is the one used by the HACK ALU (see https://b1391bd6-da3d-477d-8c01-38cdf774495a.filesusr.com/ugd/56440f_2e6113c60ec34ed0bc2035c9d1313066.pdf )

對於專用功能單元,第一個公式更好,因為您可以“免費”獲得 +1; 您只需要一個稍加修改的 16 位加法器和一個 16 位非單元。 我會把它留給你弄清楚它是如何完成的。

玩得開心!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM