<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 設計應用 > 一篇關(guān)于CPU的入門(mén)知識

一篇關(guān)于CPU的入門(mén)知識

作者: 時(shí)間:2024-03-05 來(lái)源:網(wǎng)絡(luò ) 收藏

不管你玩硬件還是做軟件,你的世界都少不了計算機最核心的 —— 。

本文引用地址:http://dyxdggzs.com/article/202403/456020.htm

01. 是什么?

與計算機的關(guān)系就相當于大腦和人的關(guān)系,它是一種小型的計算機芯片,通常嵌入在電腦的主板上。CPU的構建是通過(guò)在單個(gè)計算機芯片上放置數十億個(gè)微型晶體管來(lái)實(shí)現,這些晶體管使它能夠執行運行存儲在系統內存中的程序所需的計算,所以,也可以說(shuō)CPU決定了你電腦的計算能力。

02. CPU實(shí)際做什么?

CPU的工作核心是從程序或應用程序中獲取指令并且執行計算。這個(gè)過(guò)程一共有三個(gè)關(guān)鍵階段:提取,解碼和執行。CPU先從系統的RAM中提取指令,隨后解碼該指令的實(shí)際內容,最后再由CPU的相關(guān)部分執行該指令。

03. CPU的內部結構

剛才提到了很多CPU的重要性,那么CPU的內部結構是什么呢?又是由什么組成的呢?下圖展示了一般程序的運行流程(以C語(yǔ)言為例),一般來(lái)說(shuō),了解程序的運行流程是掌握程序運行機制的基礎和前提。

640-3.jpeg

在這個(gè)流程中,CPU負責解釋和運行最終轉換成機器語(yǔ)言的內容,CPU主要由兩部分構成:控制單元和算數邏輯單元(ALU)。

· 控制單元:從內存中提取指令并解碼執行;

· 算數邏輯單元(ALU):處理算數和邏輯運算。

CPU和內存都是由許多晶體管組成的電子部件,可以把它比作計算機的心臟和大腦。它能夠接收數據輸入、執行指令并且處理相關(guān)信息,它與輸入/輸出(I/O)設備進(jìn)行通信,這些設備向CPU發(fā)送數據和從CPU接收數據。

從功能上來(lái)看,CPU的內容是由寄存器、控制器、運算器和時(shí)鐘四部分組成的,各個(gè)部分之間通電信號來(lái)連通。

接下來(lái)簡(jiǎn)單介紹一下內存,為什么說(shuō)到CPU需要講一下內存呢?因為內存是與CPU進(jìn)行溝通的橋梁,計算機中所有程序的運行都在內存中得到運行的。

內存一般又被稱(chēng)為主存,它的作用是存放CPU中的運算數據,以及與硬盤(pán)等外部存儲設備交換的數據。CPU會(huì )在計算機運轉時(shí),把需要運算的數據調到主存中進(jìn)行運算。在運算完成之后,CPU將結果傳送出來(lái),主存的運行也決定了計算機的穩定運行。主存一般通過(guò)控制芯片與CPU相連,由可讀寫(xiě)的元素構成,每個(gè)字節都有一個(gè)地址編號。

CPU通過(guò)地址從主存中讀取數據和指令,也可以根據地址寫(xiě)入數據,注意一點(diǎn):當計算機關(guān)機時(shí),內存中的指令和數據也會(huì )被清除。

04. CPU是寄存器的集合體

在CPU的四個(gè)結構中,寄存器的重要性遠遠高于其余三個(gè),為什么這么說(shuō)?因為程序通常是把寄存器作為對象來(lái)進(jìn)行描述的。

而說(shuō)到寄存器,就不得不說(shuō)到匯編語(yǔ)言,說(shuō)到匯編語(yǔ)言,就不得不說(shuō)到高級語(yǔ)言,說(shuō)起高級語(yǔ)言也就不得不提及語(yǔ)言的概念。

05. 計算機語(yǔ)言

人和人之間最古老和直接的溝通媒介是語(yǔ)言,但是和計算機溝通,就必須按照計算機指令來(lái)交換,其中就涉及到語(yǔ)言的問(wèn)題。最早,為了解決計算機和人類(lèi)的交流的問(wèn)題,出現了匯編語(yǔ)言。

但是匯編語(yǔ)言晦澀難懂,所以又出現了像是C、C++、Java的這種高級語(yǔ)言,因此計算機語(yǔ)言一般分為低級語(yǔ)言和高級語(yǔ)言。

使用高級語(yǔ)言編寫(xiě)的程序,經(jīng)過(guò)編譯轉換成機器語(yǔ)言后才能運行,而匯編語(yǔ)言經(jīng)過(guò)匯編器才能轉換為機器語(yǔ)言。

06. 匯編語(yǔ)言

我們先來(lái)看一段采用匯編語(yǔ)言表示的代碼清單:

640-4.jpeg

這是采用匯編語(yǔ)言編寫(xiě)程序的一部分,匯編語(yǔ)言采用助記符來(lái)編寫(xiě)程序,每個(gè)原本是電信號的機器語(yǔ)言指令會(huì )有一個(gè)與其對應的助記符。比如,mov、add分別是數據的存儲(move)和相加(addition)的簡(jiǎn)寫(xiě)。

匯編語(yǔ)言和機器語(yǔ)言一一對應,這點(diǎn)和高級語(yǔ)言不同,我們通常把匯編語(yǔ)言編寫(xiě)的程序轉換為機器語(yǔ)言的這個(gè)過(guò)程,稱(chēng)之為匯編。與之相反,將機器語(yǔ)言轉化為匯編語(yǔ)言的過(guò)程稱(chēng)之為反匯編。

匯編語(yǔ)言可以幫助你理解計算機做了什么工作,機器語(yǔ)言級別的程序通過(guò)寄存器來(lái)處理,上面代碼中的eax,ebp都是表示的寄存器,它們是CPU內部寄存器的名稱(chēng)。

因此,可以說(shuō)CPU是一系列寄存器的集合體。一般,在內存中的存儲通過(guò)地址編號來(lái)表示,寄存器的種類(lèi)是通過(guò)名字來(lái)區分。

那些不同類(lèi)型的CPU,其內部寄存器的種類(lèi)、數量以及寄存器存儲的數值范圍也都是不同的。不過(guò),根據功能的不同,我們可以將寄存器劃分為下面幾類(lèi):

640.png

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

07. 程序計數器

程序計數器是用來(lái)存儲下一條指令所在單元的地址。程序在執行時(shí),PC的初值作為程序第一條指令的地址,在順序執行程序時(shí),控制器先按照程序計數器所指出的指令地址,從內存中取出一條指令,隨后分析和執行該指令,并同時(shí)將PC的值加1指向下一條要執行的指令。

我們可以通過(guò)一個(gè)事例來(lái)仔細看一下程序計數器的執行過(guò)程:

640-5.jpeg

這是一段進(jìn)行相加的操作,程序啟動(dòng),在經(jīng)過(guò)編譯解析后,會(huì )經(jīng)由操作系統把硬盤(pán)中的程序復制到內存中。

以上示例程序,就是將123和456執行相加的操作,隨后將結果輸出到顯示器上,因為使用機器語(yǔ)言很難描述,所以這些都是經(jīng)過(guò)翻譯后的結果。事實(shí)上,每個(gè)指令和數據都有可能分布在不同的地址上,但是為了更好的說(shuō)明,就把組成一條指令的內存和數據放在了一個(gè)內存地址上。

地址0100是程序運行的起始位置,Windows等操作系統把程序從硬盤(pán)復制到內存以后,就會(huì )將程序計數器作為設定為起始位置0100,然后再執行程序,每次執行一條指令后,程序計數器的數值就會(huì )增加1,或者是直接指向下一條指令的地址。

隨后,CPU會(huì )根據程序計數器的數值,從內存中讀取命令并且執行,換言之,程序計數器控制著(zhù)程序的流程。

08. 條件分支和循環(huán)機制

小伙伴們都學(xué)過(guò)高級語(yǔ)言,高級語(yǔ)言匯總的條件控制流程主要分為順序執行、條件分支、循環(huán)判斷三種。構成:控制單元和算數邏輯單元(ALU)。

· 順序執行是按照地址的內容順序的執行命令。

· 條件分支是根據條件執行任意地址的指令。

· 循環(huán)是重復執行同一地址的指令。

一般情況下,順序執行的情況較簡(jiǎn)單,每次執行一條指令程序計數器的值就是+1。條件和循環(huán)分支會(huì )使得程序計數器的值指向任意的地址,這樣一來(lái),程序就可以返回到上一個(gè)地址來(lái)重復執行同一個(gè)指令,或者跳轉到其它任意指令。

下面,我們就以條件分支舉例來(lái)說(shuō)明程序的執行過(guò)程:

640-6.jpeg

程序的開(kāi)始過(guò)程和順序流程是一樣的,程序的順序流程和開(kāi)始過(guò)程相同。

CPU從0100處就開(kāi)始執行命令,在0100和0101中都是順序執行,PC的值順序+1,執行到0102地址的指令時(shí),判斷0106寄存器的數值大于0,跳轉到0104地址的指令,再將數值輸到顯示器中,隨后結束程序,0103的指令就被跳過(guò)了。

這和我們程序中的if()判斷相同,在不滿(mǎn)足條件的情況下,指令一般會(huì )直接跳過(guò)。因此,PC的執行過(guò)程沒(méi)有直接+1,而是下一條指令的地址。

09. 標志寄存器

條件和循環(huán)分支會(huì )使用到 jump(跳轉指令),會(huì )根據當前的指令來(lái)判斷是否跳轉,上面我們提到了標志寄存器,無(wú)論當前累加寄存器的運算結果是正數、負數還是零,標志寄存器都會(huì )將其保存。

CPU在進(jìn)行運算時(shí),標志寄存器的數值會(huì )根據當前運算的結果自動(dòng)設定,運算結果的正、負和零三種狀態(tài)由標志寄存器的三個(gè)位表示。標志寄存器的第一個(gè)字節位、第二個(gè)字節位、第三個(gè)字節位各自的結果都為1時(shí),分別代表著(zhù)正數、零和負數。

640-7.jpeg

CPU的執行機制比較有意思,假設累加寄存器中存儲的XXX和通用寄存器中存儲的YYY做比較,執行比較的背后,CPU的運算機制就會(huì )做減法運算。而無(wú)論減法運算的結果是正數、零還是負數,都會(huì )保存到標志寄存器中。

結果為正表示 XXX 比 YYY 大,結果為零表示 XXX 和 YYY 相等,結果為負表示 XXX 比 YYY 小,程序比較的指令,實(shí)際上是在 CPU 內部做減法運算。

10. 函數調用機制

函數的調用和條件分支,循環(huán)機制有所不同,單純的跳轉指令無(wú)法實(shí)現函數的調用。函數的調用需要在函數內部處理后,處理流程在返回到函數調用點(diǎn)(函數調用指令的下一個(gè)地址)。

函數的調用處理是通過(guò)把程序計數器的值設定成函數的存儲地址來(lái)實(shí)現的。

11. 通過(guò)地址和索引實(shí)現數組

接下來(lái)是基址寄存器和變址寄存器,通過(guò)這兩個(gè)寄存器,可以對主存上的特定區域進(jìn)行劃分,以此實(shí)現類(lèi)似數組的操作。

首先,可以用十六進(jìn)制數將計算機內存上的 00000000 - FFFFFFFF 的地址劃分出來(lái)。這樣,凡是該范圍的內存地址,只要有一個(gè) 32 位的寄存器,就可以查看全部地址。

但是,要是想像數組那樣,分割特定的內存區域以達到連續查看的目的的話(huà),使用兩個(gè)寄存器會(huì )更方便一些,比如,我們用兩個(gè)寄存器來(lái)表示內存的值。

640-10.jpeg

這種表示方式很像數組的構造,數組是指同樣長(cháng)度的數據,在內存中進(jìn)行連續排列的數據構造。

用數組名表示數組全部的值,通過(guò)索引來(lái)區分數組的各個(gè)數據元素,例如: a[0] - a[4],[]內的 0 - 4 就是數組的下標。

12. CPU指令執行過(guò)程

那說(shuō)了這么多,CPU到底是怎么一條條的執行指令的呢?幾乎全部的馮·諾伊曼型計算機的CPU,工作都可以分為5個(gè)階段:取指令、指令譯碼、執行指令、訪(fǎng)存取數、結果寫(xiě)回。

取指令階段就是將內存中的指令讀取到CPU中寄存器的過(guò)程,程序寄存器用于存儲下一條指令所在的地址;

· 在取指令完成后,立馬進(jìn)入指令譯碼階段,在指令譯碼階段,指令編碼器按照預先的指令格式,對取回的指令進(jìn)行拆分和解釋?zhuān)R別區分出不同的指令類(lèi)別和各種獲取操作數的方法;

· 執行指令階段的任務(wù)是完成指令所規定的各種操作,具體實(shí)現指令的功能;

· 訪(fǎng)問(wèn)取數階段的任務(wù)是:根據指令地址碼,得到操作數在主存中的地址,并從主存中讀取該操作數用于運算;

· 結果寫(xiě)回階段作為最后一個(gè)階段,把執行指令階段的運行結果數據“寫(xiě)回”到某種存儲形式:結果數據經(jīng)常被寫(xiě)到CPU的內部寄存器中,以便被后續的指令快速地存取。



關(guān)鍵詞: CPU

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>