From Nand to Tetris系列(三)

Chapter 3. Boolean Arithmetic and the ALU

如何使用boolean值來代表一個數字(number),這邊說明基本的二進制轉換。
以k個bit為例,最大值可表示2^k-1,但需要保留一半的範圍表示負數(MSB為1的部分)。

數值加法:
數值加法運算是透過”加法器(adder)”的硬體完成,而加法器則是由”全加器(Full Adder)”組成,兩個”半加器(Half Adder)”可以組成一個全加器。

課程使用的加法器定義如下:
Half Adder: add two bits output sum and carry
Full Adder: add three bits(with carry)
最後組成16-bit Adder

負數表示:
使用2補數(2’s complement)以避免-0的問題,原理是透過模數(modulo),由-1+1捨棄最高位後等於從0開始循環。

而減法等於加上一個負數,因此數值減法可以透過加法器實現。

如何計算2補數:
假設計算-x,由於是modulo,可以理解成計算:

2^n-x
= 1+(2^n-1) - x

而其中(2^n-1)為全為1的值,例如1111,將其減去x等於對每個bit作翻轉
最後加一。
加一的部分可以當作從右邊到左邊,將所有bit翻轉直到第一次翻轉0到1。

Arithmetic Logic Unit (ALU):
本節的課程作業為實作一個簡單的ALU。


From Nand to Tetris系列(三)
https://chris-suo.github.io/ChrisComplete/2024/06/28/Nand2Tetris-3/
Author
Chris Suo
Posted on
June 28, 2024
Licensed under