當前位置:首頁 > 公眾號精選 > 嵌入式微處理器
[導讀]作為一名程序員,與計算機打交道的日子不計其數(shù),不管你玩硬件還是做軟件,你的世界自然都少不了計算機最核心的 —— CPU。 01 CPU是什么? CPU與計算機的關系就相當于大腦和人的關系,它是一種小型的計算機芯片,通常嵌入在電腦的主板上。 CPU的構(gòu)建是通過在


作為一名程序員,與計算機打交道的日子不計其數(shù),不管你玩硬件還是做軟件,你的世界自然都少不了計算機最核心的 —— CPU。

01
CPU是什么?
CPU與計算機的關系就相當于大腦和人的關系,它是一種小型的計算機芯片,通常嵌入在電腦的主板上。
CPU的構(gòu)建是通過在單個計算機芯片上放置數(shù)十億個微型晶體管來實現(xiàn)。
這些晶體管使它能夠執(zhí)行運行存儲在系統(tǒng)內(nèi)存中的程序所需的計算,所以,也可以說CPU決定了你電腦的計算能力。
02
CPU實際做什么?
CPU的工作核心是從程序或應用程序中獲取指令并且執(zhí)行計算。
這個過程一共有三個關鍵階段:提取,解碼和執(zhí)行。
CPU先從系統(tǒng)的RAM中提取指令,隨后解碼該指令的實際內(nèi)容,最后再由CPU的相關部分執(zhí)行該指令。
03
CPU的內(nèi)部結(jié)構(gòu)
剛才提到了很多CPU的重要性,那么CPU的內(nèi)部結(jié)構(gòu)是什么呢?又是由什么組成的呢?
下圖展示了一般程序的運行流程(以C語言為例),一般來說,了解程序的運行流程是掌握程序運行機制的基礎和前提。
在這個流程中,CPU負責解釋和運行最終轉(zhuǎn)換成機器語言的內(nèi)容,CPU主要由兩部分構(gòu)成:控制單元和算數(shù)邏輯單元(ALU)。
  • 控制單元:從內(nèi)存中提取指令并解碼執(zhí)行;

  • 算數(shù)邏輯單元(ALU):處理算數(shù)和邏輯運算。

CPU和內(nèi)存都是由許多晶體管組成的電子部件,可以把它比作計算機的心臟和大腦。
它能夠接收數(shù)據(jù)輸入、執(zhí)行指令并且處理相關信息,它與輸入/輸出(I/O)設備進行通信,這些設備向 CPU 發(fā)送數(shù)據(jù)和從 CPU 接收數(shù)據(jù)。
從功能上來看,CPU的內(nèi)容是由寄存器、控制器、運算器和時鐘四部分組成的,各個部分之間通電信號來連通。
接下來簡單介紹一下內(nèi)存,為什么說到CPU需要講一下內(nèi)存呢?
因為內(nèi)存是與CPU進行溝通的橋梁,計算機中所有程序的運行都在內(nèi)存中得到運行的。
內(nèi)存一般又被稱為主存,它的作用是存放CPU中的運算數(shù)據(jù),以及與硬盤等外部存儲設備交換的數(shù)據(jù)。
CPU會在計算機運轉(zhuǎn)時,把需要運算的數(shù)據(jù)調(diào)到主存中進行運算。
在運算完成之后,CPU將結(jié)果傳送出來,主存的運行也決定了計算機的穩(wěn)定運行。
主存一般通過控制芯片與CPU相連,由可讀寫的元素構(gòu)成,每個字節(jié)都有一個地址編號。
CPU通過地址從主存中讀取數(shù)據(jù)和指令,也可以根據(jù)地址寫入數(shù)據(jù),注意一點:當計算機關機時,內(nèi)存中的指令和數(shù)據(jù)也會被清除。
04
CPU是寄存器的集合體
在CPU的四個結(jié)構(gòu)中,寄存器的重要性遠遠高于其余三個,為什么這么說?因為程序通常是把寄存器作為對象來進行描述的。
而說到寄存器,就不得不說到匯編語言,說到匯編語言,就不得不說到高級語言,說起高級語言也就不得不提及語言的概念。
05
計算機語言
人和人之間最古老和直接的溝通媒介是語言,但是和計算機溝通,就必須按照計算機指令來交換,其中就涉及到語言的問題。
最早,為了解決計算機和人類的交流的問題,出現(xiàn)了匯編語言。
但是匯編語言晦澀難懂,所以又出現(xiàn)了像是C、C++、Java的這種高級語言,因此計算機語言一般分為低級語言和高級語言。
使用高級語言編寫的程序,經(jīng)過編譯轉(zhuǎn)換成機器語言后才能運行,而匯編語言經(jīng)過匯編器才能轉(zhuǎn)換為機器語言。
06
匯編語言
我們先來看一段采用匯編語言表示的代碼清單:

這是采用匯編語言編寫程序的一部分,匯編語言采用助記符來編寫程序,每個原本是電信號的機器語言指令會有一個與其對應的助記符。
比如,mov,add分別是數(shù)據(jù)的存儲(move)和相加(addition)的簡寫。
匯編語言和機器語言一一對應,這點和高級語言不同,我們通常把匯編語言編寫的程序轉(zhuǎn)換為機器語言的這個過程,稱之為匯編。
與之相反,將機器語言轉(zhuǎn)化為匯編語言的過程稱之為反匯編。
匯編語言可以幫助你理解計算機做了什么工作,機器語言級別的程序通過寄存器來處理,上面代碼中的eax,ebp都是表示的寄存器,它們是CPU內(nèi)部寄存器的名稱。
因此,可以說 CPU 是一系列寄存器的集合體。
一般,在內(nèi)存中的存儲通過地址編號來表示,寄存器的種類是通過名字來區(qū)分。
那些不同類型的CPU,其內(nèi)部寄存器的種類、數(shù)量以及寄存器存儲的數(shù)值范圍也都是不同的。
不過,根據(jù)功能的不同,我們可以將寄存器劃分為下面幾類:

其中,程序計數(shù)器、標志寄存器、累加寄存器、指令寄存器和棧寄存器只有一個,其他寄存器一般有好幾個。

07

程序計數(shù)器
程序計數(shù)器是用來存儲下一條指令所在單元的地址。
程序在執(zhí)行時,PC的初值作為程序第一條指令的地址,在順序執(zhí)行程序時,控制器先按照程序計數(shù)器所指出的指令地址,從內(nèi)存中取出一條指令,隨后分析和執(zhí)行該指令,并同時將PC的值加1指向下一條要執(zhí)行的指令。
我們可以通過一個事例來仔細看一下程序計數(shù)器的執(zhí)行過程:
這是一段進行相加的操作,程序啟動,在經(jīng)過編譯解析后,會經(jīng)由操作系統(tǒng)把硬盤中的程序復制到內(nèi)存中。
以上示例程序,就是將123和456執(zhí)行相加的操作,隨后將結(jié)果輸出到顯示器上,因為使用機器語言很難描述,所以這些都是經(jīng)過翻譯后的結(jié)果。
事實上,每個指令和數(shù)據(jù)都有可能分布在不同的地址上,但是為了更好的說明,就把組成一條指令的內(nèi)存和數(shù)據(jù)放在了一個內(nèi)存地址上。
地址0100是程序運行的起始位置,Windows等操作系統(tǒng)把程序從硬盤復制到內(nèi)存以后,就會將程序計數(shù)器作為設定為起始位置0100,然后再執(zhí)行程序,每次執(zhí)行一條指令后,程序計數(shù)器的數(shù)值就會增加1,或者是直接指向下一條指令的地址。
隨后,CPU會根據(jù)程序計數(shù)器的數(shù)值,從內(nèi)存中讀取命令并且執(zhí)行,換言之,程序計數(shù)器控制著程序的流程。

08

條件分支和循環(huán)機制
小伙伴們都學過高級語言,高級語言匯總的條件控制流程主要分為順序執(zhí)行、條件分支、循環(huán)判斷三種。
  • 順序執(zhí)行是按照地址的內(nèi)容順序的執(zhí)行命令。
  • 條件分支是根據(jù)條件執(zhí)行任意地址的指令。
  • 循環(huán)是重復執(zhí)行同一地址的指令。
一般情況下,順序執(zhí)行的情況較簡單,每次執(zhí)行一條指令程序計數(shù)器的值就是+1。
條件和循環(huán)分支會使得程序計數(shù)器的值指向任意的地址,這樣一來,程序就可以返回到上一個地址來重復執(zhí)行同一個指令,或者跳轉(zhuǎn)到其它任意指令。
下面,我們就以條件分支舉例來說明程序的執(zhí)行過程:
程序的開始過程和順序流程是一樣的,程序的順序流程和開始過程相同。
CPU從0100處就開始執(zhí)行命令,在0100和0101中都是順序執(zhí)行,PC的值順序+1,執(zhí)行到0102地址的指令時,判斷0106寄存器的數(shù)值大于0,跳轉(zhuǎn)到0104地址的指令,再將數(shù)值輸?shù)斤@示器中,隨后結(jié)束程序,0103的指令就被跳過了。
這和我們程序中的if()判斷相同,在不滿足條件的情況下,指令一般會直接跳過。
因此,PC的執(zhí)行過程沒有直接+1,而是下一條指令的地址。

09

標志寄存器
條件和循環(huán)分支會使用到 jump(跳轉(zhuǎn)指令),會根據(jù)當前的指令來判斷是否跳轉(zhuǎn),上面我們提到了標志寄存器,無論當前累加寄存器的運算結(jié)果是正數(shù)、負數(shù)還是零,標志寄存器都會將其保存。
CPU在進行運算時,標志寄存器的數(shù)值會根據(jù)當前運算的結(jié)果自動設定,運算結(jié)果的正、負和零三種狀態(tài)由標志寄存器的三個位表示。
標志寄存器的第一個字節(jié)位、第二個字節(jié)位、第三個字節(jié)位各自的結(jié)果都為1時,分別代表著正數(shù)、零和負數(shù)。
CPU的執(zhí)行機制比較有意思,假設累加寄存器中存儲的XXX和通用寄存器中存儲的YYY做比較,執(zhí)行比較的背后,CPU的運算機制就會做減法運算。
而無論減法運算的結(jié)果是正數(shù)、零還是負數(shù),都會保存到標志寄存器中。
結(jié)果為正表示 XXX 比 YYY 大,結(jié)果為零表示 XXX 和 YYY 相等,結(jié)果為負表示 XXX 比 YYY 小,程序比較的指令,實際上是在 CPU 內(nèi)部做減法運算。

10

函數(shù)調(diào)用機制
函數(shù)的調(diào)用和條件分支,循環(huán)機制有所不同,單純的跳轉(zhuǎn)指令無法實現(xiàn)函數(shù)的調(diào)用。
函數(shù)的調(diào)用需要在函數(shù)內(nèi)部處理后,處理流程在返回到函數(shù)調(diào)用點(函數(shù)調(diào)用指令的下一個地址)。
函數(shù)的調(diào)用處理是通過把程序計數(shù)器的值設定成函數(shù)的存儲地址來實現(xiàn)的。

11

通過地址和索引實現(xiàn)數(shù)組
接下來是基址寄存器和變址寄存器,通過這兩個寄存器,可以對主存上的特定區(qū)域進行劃分,以此實現(xiàn)類似數(shù)組的操作。
首先,可以用十六進制數(shù)將計算機內(nèi)存上的 00000000 - FFFFFFFF 的地址劃分出來。
這樣,凡是該范圍的內(nèi)存地址,只要有一個 32 位的寄存器,就可以查看全部地址。
但是,要是想像數(shù)組那樣,分割特定的內(nèi)存區(qū)域以達到連續(xù)查看的目的的話,使用兩個寄存器會更方便一些,比如,我們用兩個寄存器來表示內(nèi)存的值。
這種表示方式很像數(shù)組的構(gòu)造,數(shù)組是指同樣長度的數(shù)據(jù),在內(nèi)存中進行連續(xù)排列的數(shù)據(jù)構(gòu)造。
用數(shù)組名表示數(shù)組全部的值,通過索引來區(qū)分數(shù)組的各個數(shù)據(jù)元素,例如: a[0] - a[4],[]內(nèi)的 0 - 4 就是數(shù)組的下標。

12

CPU指令執(zhí)行過程
那說了這么多,CPU到底是怎么一條條的執(zhí)行指令的呢?幾乎全部的馮·諾伊曼型計算機的CPU,工作都可以分為5個階段:取指令、指令譯碼、執(zhí)行指令、訪存取數(shù)、結(jié)果寫回。
取指令階段就是將內(nèi)存中的指令讀取到CPU中寄存器的過程,程序寄存器用于存儲下一條指令所在的地址;
  • 在取指令完成后,立馬進入指令譯碼階段,在指令譯碼階段,指令編碼器按照預先的指令格式,對取回的指令進行拆分和解釋,識別區(qū)分出不同的指令類別和各種獲取操作數(shù)的方法;

  • 執(zhí)行指令階段的任務是完成指令所規(guī)定的各種操作,具體實現(xiàn)指令的功能;
  • 訪問取數(shù)階段的任務是:根據(jù)指令地址碼,得到操作數(shù)在主存中的地址,并從主存中讀取該操作數(shù)用于運算;
  • 結(jié)果寫回階段作為最后一個階段,把執(zhí)行指令階段的運行結(jié)果數(shù)據(jù)“寫回”到某種存儲形式:結(jié)果數(shù)據(jù)經(jīng)常被寫到CPU的內(nèi)部寄存器中,以便被后續(xù)的指令快速地存取。

-END-



推薦閱讀



【01】中科院大學本科生9個月成功設計出64位處理器:已成功流片
【02】12條CPU硬核干貨!最全解釋!
【03】CPU緩存有什么用?科普一下關于CPU緩存的作用
【04】全面分析6大國產(chǎn)CPU處理器
【05】深度剖析:CPU 到底是怎么識別代碼的?


免責聲明:整理文章為傳播相關技術(shù),版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系刪除

免責聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

嵌入式ARM

掃描二維碼,關注更多精彩內(nèi)容

本站聲明: 本文章由作者或相關機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術(shù)
關閉
關閉