cpu是如何計算加減法的

工业奇迹档案
7粉絲
2026年7月21日
視頻概述
AI 生成本影片詳細解析了 CPU 執行加減法運算的底層原理,從最基礎的晶體管開關概念出發,逐步推導出邏輯門、半加器、全加器,最終解釋算術邏輯單元(ALU)如何透過指令解碼器來執行特定的數學運算。
CPU是如何計算加減法的?
這個看似簡單的問題
計算機處理起來卻非常複雜
CPU裏面是一塊小芯片
將芯片放大
可以看到CPU內部有上百億的晶體管
晶體管可以使用這種符號來表示
它的一端是發射極
另一端是極電極
中間是基極
當發射極通電時
晶體管是無法導通的
但是如果在基極上施加一個小電流
晶體管就會被導通
本質上晶體管可以看作一個開關
只不過晶體管是通過電信號來操控的
現在我們將兩個晶體管串聯起來
當兩個晶體管的基極輸入都爲0
或者兩個晶體管任何一個輸入爲0時
晶體管都不會被導通
只有當兩個晶體管的基極都輸入1時
整個電路纔會被導通
這種電路也被稱爲語門電路
它的電路符號是這樣的
除了串聯
我們還可以將晶體管並聯起來
當基極輸入都爲0時
輸出爲0
電路無法導通
但是隻要有一個輸入爲1
或者二者都爲1
輸出就爲1
電路就會被導通
這種電路也被稱爲語門電路
它的電路符號是這樣的
現在我們將晶體管的輸出端往前拉
當基極不通電
也就是爲0時
輸出端有電流通過
記錄爲1
當基極通電
也就是爲1時
輸出端沒有電流通過
記錄爲0
可以看到
輸入與輸出的值剛好是相反的
這種電路被稱爲非門電路
到這裏我們已經得到了語門
或門
非門三種最基本的門電路
有了這三種門電路
我們可以組成更爲複雜的異或門電路
它是兩個輸入
尤其只有一個爲1時
輸出結果才爲1
其他情況結果都爲0
異或門電路的符號是這樣的
有了這四種門電路
我們就能設計一個加法器來計算加法了
設計前
我們先來看一個二進制加法
前面三組計算非常簡單
但是計算一加一時有所不同
因爲二進制是逢二進一
所以計算一加一時
低位滿二向前進一位
所以得到一零
同時我們將前面三組的計算結果補上零
然後拆分成這種真值表
問題是電路要怎麼設計
才能輸出右圖所示的真值表呢
我們先將進位輸出這一列隱藏掉
然後來分析一下這些值
可以發現
兩個輸入尤其只有一個爲1
輸出結果才爲1
其他情況結果都爲0
這不就是易貨門電路的特性嗎
所以這個加法器中
首先需要一個易貨門電路
來進行求和
然後我們接着分析
現在將求和這一列隱藏掉
可以發現
兩個輸入必須都爲1
輸出結果才爲1
其他都爲0
這不正是雨門電路的特性嗎
所以我們在加法器中
再放一個雨門電路
來求進位值
這其實就組成了一個最簡單的加法器
但是它只能實現
兩個一位二進制數的加法運算
也被稱爲半加器
現在我們用半加器來計算
多位的二進制加法
會發生什麼呢
從右往左
先計算1加1
1加1滿二進1
接着計算0加1
由於前面進位了一個1
但是半加器沒有單獨的輸入
來接收這個1
所以得到的結果還是1
接着再計算1加1
得到10
最終半加器得到的結果1010
與正確答案1100並不相等
之所以會這樣
問題就出在這個進位上
爲了解決進位問題
我們將半加器繼續改進
設計成這種全加器
全加器在輸入端多加了一個進位輸入
爲了便於理解
我們先不要關心全加器內部
單個晶體管是如何運行的
我們直接將它們看成一個整體
現在我們再來計算前面的加法
還是先計算1加1
最開始時沒有進位
所以進位爲0
1加1加0得到的結果爲10
接着計算0加1
注意這裏
這時計算的進位輸出1
會被複制給下一個全加器的進位輸入
所以計算1加0加1
得到結果爲10
這個進位輸出1
會繼續複製給下一個全加器的進位輸入
所以計算1加1加1
得到111
最終結果爲1100
這和正確結果是一樣的
如果我們想計算8位的二進制計算
只需要將8個全加器連接起來
就能進行8位的加法運算了
爲了便於理解
我們還是不要關注細節
而是將它們看成一個整體
根據加法器
我們還可以設計出減法器
減法器內部晶體管連接是這樣的
同時還可以設計出增量器和減量器
然後將這些運算器作爲一個整體
封裝到CPU的內部
這裏有個問題
CPU怎麼知道該調用這幾個運算器中的哪一個呢
其實很簡單
計算機運行時
會將程序代碼
解析成彙編指令代碼
我們看第三行的ADD指令
指令解析後
其實就對應加法器
而SUB解析後
則對應的是減法器
問題是這些指令是如何解析的呢
這就要用到二進制解碼器
當我們向解碼器輸入不同的組合值
會激活不同位置的輸出信號
爲了便於理解
還是將它們封裝起來
然後我們來看一下具體執行過程
由於計算機底層只認識二進制
所以彙編代碼最終會被翻譯成二進制
對於二進制的前兩位
如果是00
代表是算數運算指令
接下來的兩位
00代表加法運算
01代表減法運算
11代表遞減運算
這兩位二進制也被稱爲操作碼
當CPU需要進行計算時
會先判斷二進制前兩位
是否爲算數運算指令
如果是的
CPU會將操作碼傳入解碼器
00代表加法運算
所以解碼器會調用加法器來進行運算
然後將兩個輸入端加入進來
並與每個運算器相連接
這樣一來
運算器就能根據指令的不同
調用相應的運算器進行運算
然後我們再將這個運算器整體進行封裝
一個基礎的算數邏輯單元就完成了
算數邏輯單元接收兩個輸入值
然後根據操作碼的不同
內部會調用不同的運算器
最終得到相應的計算結果
當然現代的CPU遠遠比這複雜
內部採用的是更爲先進的MOS晶體管
可以實現更爲複雜的算數運算和邏輯運算
本視頻只是在非常淺顯的層面進行了探討
