一、上節回顧
上一講,我們看到了如何通過電路,在計算機硬件層面設計最基本的單元,門電腦,我給你看的門電路非常簡單,只能做簡單的“與(AND)”“或(OR)”“NOT(非)”和“異或(XOR)”,
這樣最基本的單比特邏輯運算。下面這些門電路的標你需要非常熟悉,后續的電路都是由這些門電路組合起來的。
這些基本的門電路,是我們計算機硬件端的最基本的“積木”,就好像了高積木里面最簡答的小方塊,看似不起眼但把他們組合起來滿最終可以搭出一個星際大戰里面千年年隼這樣的大玩意兒。
我們今天包含十億級別晶體管的現代 CPU,都是由這樣一個一個的門電路組合而成的。
二、異或們和半加器
1、2個8位整數的加法
1、2排8個開關加法得到結果
2、需要1排8位的開關
2、其實加法器就是像一個辦法把三排開關電路連起來
3、我們人在計算加法的時候一般會怎么操作
4、為什么我們需要異或?
其實異或就是一個最簡單的整數加法,所需要使用的基本電路
5、進位
那這個就對應一個與門,也就是有且只有在加數和被加數都是1的時候,我們的進位才是1
6、半加器
所以、通過一個異或們計算機出個位,通過一個與或門計算出是否僅為,我們就通過電腦算出了一位數的加法、於是、我們把兩個門電路打包,給它取一個名字,就叫做半加器
7、半加器的電路演示
三、全加器
1、半加器存在的問題
1、解決了什么問題?
2、存在什么問題?
2、全加器就是兩個半加器加上一個或門
1、工作原理
2、注意事項
3、全加器圖解
4、8位加法器可以由8個半加器串聯而成
我們在寫程序的時候如何知道自己的計算機結果是否會溢出?
看到全加器的電路設計,相信你應該明白,在整個加法器的結果中,我們其實有一個電路的信號,會標識出加法的結果是否溢出。我們可以把這個對應的信號,
輸出給到硬件中其他標志位里,讓我們的計算機知道計算的結果是否溢出。而現代計算機也正是這樣做的。這就是為什么你在撰寫程序的時候,能夠知道你的計算結果是否溢出在硬件層面得到的支持。
四、總結延伸
相信到這里,你應該已經體會到了,通過門電路來搭建算數計算機的一個小功能,就好像搭樂高積木一樣
我們用兩個門電路,搭出一個半加器,就好像我們拿兩塊樂高,疊在一起,變成一個長方形的樂高,這樣我們就有了一個新的積木組件,柱子。
我們再用兩個柱子和一個長條的積木組合一下,就變成一個積木橋。然后幾個積木橋串接在一起,又成了積木樓梯。
當我們想要搭建一個摩天大樓,我們需要很多很多樓梯。但是這個時候,我們已經不再關注最基礎的一節樓梯是怎么用一塊塊積木搭建起來的。
這其實就是計算機中,無論軟件還是硬件中一個很重要的設計思想,分層。
從簡單到復雜,我們一層層搭出了擁有更強能力的功能組件。在上面的一層,我們只需要考慮怎么用下一層的組件搭建出自己的功功能,而不需要下沉到更低層的其他組件。
就像你之前並沒有深入學習過計算機組成原理,一樣可以直接通過高級語言撰寫代碼,實現功能
在硬件層面,我們通過門電路、半加器、全加器一層層搭出了加法器這樣的功能組件。我們把這些用來做算術邏輯計算的組件叫作 ALU,也就是算術邏輯單元。當進一步打造強大的 CPU 時,
我們不會再去關注最細顆粒的門電路,只需要把門電路組合而成的 ALU,當成一個能夠完成基礎計算的黑盒子就可以了。
以此類推,后面我們講解 CPU 的設計和數據通路的時候,我們以 ALU 為一個基礎單元來解釋問題,也就夠了。