05.08 通俗的說一說指令集是什麼?CPU是如何工作的?

前言:

挺久之前寫過一篇文章《 》,有網友回覆要求講一講CPU是如何工作的。

老實說,雖然在很多年前學過數字電路,也學過一點彙編語言,可是早已經交還給老師了,更不要說當年就沒怎麼學好。

一直拖了很久,看過一些資料之後,才再次提起這一事,本人試圖用最通俗的語句來描述一下什麼是指令集和CPU的工作原理。說得不對,也請大家包涵指正。


要說清楚CPU如何工作,我們先得了解一下程序是如何運行的,因為CPU是由程序驅動並完成程序的指令,從而得到運算結果的。

在最早的計算機上,編程人員將計算要求轉換成1010這樣的二進制程序,再將1010在紙帶上用孔來表示,打孔的紙帶輸入到計算機之後,計算機就能計算了。

這紙帶上的二進制程序就是機器語言,這些孔就是告訴計算機,該讀數據、進行加減乘除、或者“與或”邏輯運算,而紙帶上直接的輸入是“孔”和“非孔”,也就“斷電”和“通電”,反應在晶體管上的狀態就是“閉”與“開”,如果晶體管是一個燈泡,那它表現出來就是一閃一滅。

然而,機器語言太過於專業難懂,科學家們用了一種高級的語言來代替它,這就是彙編語言。彙編語言更接近人類的語言,用編譯器可以將彙編語言轉為機器可以識別的機器語言。


這編譯器就相當於一個翻譯機,它根據設定好的規則,將彙編語言一條條轉化為二進制語言。

這個時候,問題就來了!編譯器所用的規則,是由設計計算機(現在歸結為CPU)的人規定的,那麼用匯編語言的工程師,就必須按照他所給的規則來編,要不然,編譯器轉化出來的二進制語言就是亂七八糟的,在電腦上反應出來的就是藍屏了,因為CPU根本不管你輸入的101010是對是錯,它就按給的來執行,這時出來的結果就不知道是什麼東西了。

好了,設計CPU的人給出的編寫規則就可以說是指令,這一系列的規則就是指令集(合)。

而設計CPU的廠商有多家,這樣就產生了不同的指令集,比如intel陣營的8086指令集,ARM陣營的RISC指令集。不同陣營,其對應的彙編語言也是不一樣的。

雖然彙編語言比較接近人類語言,但是畢竟還是過於難懂,這也是為什麼古代有那麼多秘籍,能練成絕世武功的人少之又少,那是因為,並不一定所有得到秘籍的人都能看得懂。

為了解決跨平臺運行程序的問題,科學家又發展出了各種各樣的高級語言,比如C、C++、VB、PHP、JAVA等等,用這些語言編寫的程序要麼在相應系統正確的運行環境中直接運行,要麼經過編譯,打包出對應的程序就可以了。比如用JAVA或PHP寫了一個APP,通過打包工具,可以直接打包成安卓APP,也可以打包成蘋果APP,這就解決了彙編語言不兼容的問題。

用下面的圖表示一下這三類語言的區別與關係:

  1. 用戶的需求就如探子得到的情報,大帥必須對敵人來犯進行處理。

  2. 這時大帥就寫了一個“射箭”的程序。

  3. 旗手將“射箭”轉化成了旗語的彙編語言。

  4. 最後箭隊的隊長就將旗語轉化成了“拉弓”、“放箭”這樣的二進制機器語言。

  5. 箭兵得到命令,按指令進行操作。

通俗的說一說指令集是什麼?CPU是如何工作的?

如何打一場戰爭

好了,這個箭隊就是最終執行任務的CPU。

更專業些的描述是下面的圖形

通俗的說一說指令集是什麼?CPU是如何工作的?

那麼CPU的工作原理,就是將輸入的信息轉化成10101數字信號,這些信號通過CPU模塊轉換成高電平與低電平,(《 》),這些模擬電信號按指定通過不同的模塊,CPU模塊上的微小晶體管就會產生“閉”與“開”的動作,最終得到計算結果。

可進行讀、寫、轉換等操作的模塊是下圖中的control(控制器),存放數據的是cache、DRAM,真正進行計算的是ALU單元。

通俗的說一說指令集是什麼?CPU是如何工作的?

左CPU右GPU的微架構

相信看到這裡的朋友應該大致對CPU和指令集有些概念了,現在再去百度,應該很容易理解那些專業的內容了。


分享到:


相關文章: