CPU 是如何理解 01 二進制的?

大家好,我是小風哥。

準確來說,CPU 不認識也不理解任何東西

CPU 就像一個單細胞一樣,本身不具備任何思考能力,沒什麼自己的想法,你給它一個刺激,它只是簡單的會有一個反應。

那這個刺激是什麼呢?是電壓,硬件感知到的僅僅就是電壓。

電壓有兩種,高電壓和低電壓。

你馬上就能反應過來,這就是 01 二進制,高電壓代表 1 低電壓代表 0,0 和 1 僅僅是人類可以理解的東西,硬件電路可不理解這玩意,它僅僅就是靠電流驅動來工作。

讓我們來看看這個簡單的電路,這個就是與門:

你能說這個電路理解它自己該做什麼嗎?它有自我意識嗎?當然沒有。

所以說這個問題的答案非常簡單:

CPU 根本就不能理解任何東西,之所以 CPU 能正常工作,僅僅是因爲你 (製作 CPU 的人) 讓它這麼工作

這個問題就好比你問一輛自行車是如何理解自己怎麼跑起來的?還不是因爲你設計了車輪、車鏈然後用腳一蹬跑起來的。

你希望兩個開關都打開燈才亮,因此你這樣設計電路,這就是與門;你希望任意一個開關打開燈就亮,因此你那樣設計電路,這就是或門;你希望關閉開關燈才亮,這就是非門,有了與或非你可以搭建出任意複雜的邏輯電路,比如下面這個能執行加操作的加法器。

看看這個電路,你能說它知道自己是在執行加法操作嗎,這當然是人類認爲這個電路的輸出等價於加法操作的結果。

儘管這個電路看上去很不錯,給定兩個輸入得到的輸出和我們人類認爲的加法是一樣一樣的,但這有點簡單。

除了加法是不是還應該有其它操作,如果有多種類型的操作那麼就必須告訴電路該操作的類型是什麼 (操作碼),操作的數字是什麼 (操作數)。

這樣給它一個輸入就能按照我們的想法來控制電路了,BOOM!!!宇宙大爆炸!

哦不對,CPU 誕生了!

人類編寫的代碼必須首先轉爲 01 二進制,之後才能驅動 CPU 工作。

當然,怎麼把一坨代碼高效等價的轉爲 1001011100。。。這項工作可不簡單,人類探索了幾十年,一干人等還獲得了圖靈獎,可見這個問題的重要程度以及難度。

你今天能簡單點一下 build 按鈕或簡單運行一個命令就能把你寫的代碼轉爲 01 串,要知道這簡單的背後是靠無數天才榨乾天量的腦細胞才實現的。

從這裏應該應該能看出來,CPU 根本不認識任何語言,理解編程語言的其實是編譯器

現在我們能給 CPU 輸入了,那輸出呢?

剩下的僅僅就是解釋了,比如給你一個 01 串,01001101,你可以認爲這是一個數字,也可以認爲這是一個字符,也可以是表示 RGB 顏色,一切都看你怎麼解釋,這就是軟件的工作了。

最終的目的只有一個:讓人類能看懂

整個流程就是這樣的:

計算機真是一個非常神奇的機器,如此簡單,卻又能完成複雜無比的工作。

現在你應該明白了吧,計算機所謂能理解二進制就好比你的檯燈能理解開關一樣。

它們真的對此一無所知。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/b5FAVwWryxMN__ZmK2Jjpg