不管你玩硬件還是做軟件,你的世界都少不了計算機最核心的 —— CPU。
01CPU是什么?CPU與計算機的關系就相當于大腦和人的關系,它是一種小型的計算機芯片,通常嵌入在電腦的主板上。CPU的構建是通過在單個計算機芯片上放置數十億個微型晶體管來實現。這些晶體管使它能夠執行運行存儲在系統內存中的程序所需的計算,所以,也可以說CPU決定了你電腦的計算能力。02CPU實際做什么?CPU的工作核心是從程序或應用程序中獲取指令并且執行計算。這個過程一共有三個關鍵階段:提取,解碼和執行。CPU先從系統的RAM中提取指令,隨后解碼該指令的實際內容,最后再由CPU的相關部分執行該指令。03CPU的內部結構剛才提到了很多CPU的重要性,那么CPU的內部結構是什么呢?又是由什么組成的呢?下圖展示了一般程序的運行流程(以C語言為例),一般來說,了解程序的運行流程是掌握程序運行機制的基礎和前提。在這個流程中,CPU負責解釋和運行最終轉換成機器語言的內容,CPU主要由兩部分構成:控制單元和算數邏輯單元(ALU)。-
控制單元:從內存中提取指令并解碼執行;
-
算數邏輯單元(ALU):處理算數和邏輯運算。
07
程序計數器程序計數器是用來存儲下一條指令所在單元的地址。程序在執行時,PC的初值作為程序第一條指令的地址,在順序執行程序時,控制器先按照程序計數器所指出的指令地址,從內存中取出一條指令,隨后分析和執行該指令,并同時將PC的值加1指向下一條要執行的指令。我們可以通過一個事例來仔細看一下程序計數器的執行過程:這是一段進行相加的操作,程序啟動,在經過編譯解析后,會經由操作系統把硬盤中的程序復制到內存中。以上示例程序,就是將123和456執行相加的操作,隨后將結果輸出到顯示器上,因為使用機器語言很難描述,所以這些都是經過翻譯后的結果。事實上,每個指令和數據都有可能分布在不同的地址上,但是為了更好的說明,就把組成一條指令的內存和數據放在了一個內存地址上。地址0100是程序運行的起始位置,Windows等操作系統把程序從硬盤復制到內存以后,就會將程序計數器作為設定為起始位置0100,然后再執行程序,每次執行一條指令后,程序計數器的數值就會增加1,或者是直接指向下一條指令的地址。隨后,CPU會根據程序計數器的數值,從內存中讀取命令并且執行,換言之,程序計數器控制著程序的流程。08
條件分支和循環機制小伙伴們都學過高級語言,高級語言匯總的條件控制流程主要分為順序執行、條件分支、循環判斷三種。- 順序執行是按照地址的內容順序的執行命令。
- 條件分支是根據條件執行任意地址的指令。
- 循環是重復執行同一地址的指令。
09
標志寄存器條件和循環分支會使用到 jump(跳轉指令),會根據當前的指令來判斷是否跳轉,上面我們提到了標志寄存器,無論當前累加寄存器的運算結果是正數、負數還是零,標志寄存器都會將其保存。CPU在進行運算時,標志寄存器的數值會根據當前運算的結果自動設定,運算結果的正、負和零三種狀態由標志寄存器的三個位表示。標志寄存器的第一個字節位、第二個字節位、第三個字節位各自的結果都為1時,分別代表著正數、零和負數。CPU的執行機制比較有意思,假設累加寄存器中存儲的XXX和通用寄存器中存儲的YYY做比較,執行比較的背后,CPU的運算機制就會做減法運算。而無論減法運算的結果是正數、零還是負數,都會保存到標志寄存器中。結果為正表示 XXX 比 YYY 大,結果為零表示 XXX 和 YYY 相等,結果為負表示 XXX 比 YYY 小,程序比較的指令,實際上是在 CPU 內部做減法運算。10
函數調用機制函數的調用和條件分支,循環機制有所不同,單純的跳轉指令無法實現函數的調用。函數的調用需要在函數內部處理后,處理流程在返回到函數調用點(函數調用指令的下一個地址)。函數的調用處理是通過把程序計數器的值設定成函數的存儲地址來實現的。11
通過地址和索引實現數組接下來是基址寄存器和變址寄存器,通過這兩個寄存器,可以對主存上的特定區域進行劃分,以此實現類似數組的操作。首先,可以用十六進制數將計算機內存上的 00000000 - FFFFFFFF 的地址劃分出來。這樣,凡是該范圍的內存地址,只要有一個 32 位的寄存器,就可以查看全部地址。但是,要是想像數組那樣,分割特定的內存區域以達到連續查看的目的的話,使用兩個寄存器會更方便一些,比如,我們用兩個寄存器來表示內存的值。這種表示方式很像數組的構造,數組是指同樣長度的數據,在內存中進行連續排列的數據構造。用數組名表示數組全部的值,通過索引來區分數組的各個數據元素,例如: a[0] - a[4],[]內的 0 - 4 就是數組的下標。12
CPU指令執行過程那說了這么多,CPU到底是怎么一條條的執行指令的呢?幾乎全部的馮·諾伊曼型計算機的CPU,工作都可以分為5個階段:取指令、指令譯碼、執行指令、訪存取數、結果寫回。取指令階段就是將內存中的指令讀取到CPU中寄存器的過程,程序寄存器用于存儲下一條指令所在的地址;-
在取指令完成后,立馬進入指令譯碼階段,在指令譯碼階段,指令編碼器按照預先的指令格式,對取回的指令進行拆分和解釋,識別區分出不同的指令類別和各種獲取操作數的方法;
- 執行指令階段的任務是完成指令所規定的各種操作,具體實現指令的功能;
- 訪問取數階段的任務是:根據指令地址碼,得到操作數在主存中的地址,并從主存中讀取該操作數用于運算;
-
結果寫回階段作為最后一個階段,把執行指令階段的運行結果數據“寫回”到某種存儲形式:結果數據經常被寫到CPU的內部寄存器中,以便被后續的指令快速地存取。
-「END」-
聲明:本號對所有原創、轉載文章的陳述與觀點均保持中立,推送文章僅供讀者學習和交流。文章、圖片等版權歸原作者,如有侵權,請聯系刪除。
審核編輯黃宇
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
寄存器
+關注
關注
31文章
5336瀏覽量
120235 -
cpu
+關注
關注
68文章
10855瀏覽量
211597
發布評論請先 登錄
相關推薦
xilinx ddr2硬核管腳問題
我用xilinx spartan-6fpga 它硬核的管腳是固定的還是可配置的我在xilinx提供的文檔里找不到關于硬核管腳的分配求指導
發表于 08-11 09:28
關于ALTER 的FPGA的PCIe硬核的疑問
本人想問下,FPGA的介紹中有些事說帶有PCIe硬核的,那么這個FPGA直接購買后就可以使用這個硬核完成PCIE功能了嗎?不再需要購買其他什么許可文件之類的東西了嗎? 這點不是很清楚,順便問一下帶有這中硬核的FPGA大概要多少錢
發表于 12-12 17:52
關于TCP3D硬核的輸入數據如何獲得
硬核數據為1024*3個整形數據,如果說3列數分別代表了數據、兩個校驗,那么是如何將1bit變成一個整形呢?數據是否被放大了6倍?其中是否還處理?
發表于 06-21 17:05
關于CPU的12個必須知道的知識點
的計算機芯片,通常嵌入在電腦的主板上。 CPU的構建是通過在單個計算機芯片上放置數十億個微型晶體管來實現。 這些晶體管使它能夠執行運行存儲在系統內存中的程序所需的計算,所以,也可以說CPU決定了你電腦的計算能力。 02
關于CPU的12個硬核干貨
和人的關系,它是一種小型的計算機芯片,通常嵌入在電腦的主板上。CPU的構建是通過在單個計算機芯片上放置數十億個微型晶體管來實現。這些晶體管使它能夠執行運行存儲在系統內存中的程序所需的計算,所以,也可以說CPU決定了你電腦的計算能
發表于 12-31 14:48
?303次閱讀
12個關于CPU的硬核知識!
CPU和內存都是由許多晶體管組成的電子部件,可以把它比作計算機的心臟和大腦。它能夠接收數據輸入、執行指令并且處理相關信息,它與輸入/輸出(I/O)設備進行通信,這些設備向 CPU 發送數據和從 CPU 接收數據。
評論