[英]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 個。期望的結果如下:
任何可以提供的幫助將不勝感激!
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.