CPU,Central Processing Unit,翻譯過來叫中央處理器。是一塊超大規模的集成電路,是一台計算機的運算核心(Core)和控制核心( Control Unit)。電腦中所有操作都由CPU負責讀取指令,對指令譯碼並自行。
一、組成結構
CPU的根本任務就是執行指令,對計算機來說最終都是一串由“0”和“1”組成的序列。CPU從邏輯上可以划分成3個模塊,分別是控制單元、運算單元和存儲單元,這三部分由CPU內部總線連接起來。如下圖
1.1、控制單元
控制單元是整個CPU的指揮控制中心,包括指令寄存器IR(Instruction Register)、指令譯碼器ID(Instruction Decoder)和操作控制器OC(Operation Controller)、時序發生器和程序計數器等部件,對協調整個電腦有序工作極為重要。它根據用戶預先編好的程序,依次從存儲器中取出各條指令,放在指令寄存器IR中,通過指令譯碼(分析)確定應該進行什么操作,然后通過操作控制器OC,按確定的時序,向相應的部件發出微操作控制信號。操作控制器OC中主要包括節拍脈沖發生器、控制矩陣、時鍾脈沖發生器、復位電路和啟停電路等控制邏輯。
- 程序計數器(PC)
又稱指令計數器,用來確定下一條指令的地址。在程序開始執行前,必須將它的起始地址,即程序的一條指令所在的內存的那樣地址送入PC,因此PC的內容及是從內存提取的第一條指令的地址。當執行指令時,CPU將自動修改PC內容,以便使其保持的總是將要執行的下一條指令的地址。由於大多數指令是順序執行,所以修改的過程通才只是簡單的對PC加一個1,但是遇到跳轉指令時,那么后續的指令地址必須從指令的地址段取得,由跳轉指定來規定。
- 指令寄存器
用來保存當前正在執行的指令。當執行一條指令時,先把他從內存取到緩沖寄存器中,然后在傳送到指令寄存器。 - 指令譯碼器
分析和執行當前指令的部件。為了執行給定的指令,必須對操作碼進行測試,以便識別所要求的操作。操作碼一經譯碼后,即可向操作控制器發出具體的操作的信號。 - 操作控制器(OC)
用來產生各種操作控制信號。CPU內的每個功能部件都完成一定的特定功能。然而信息怎樣才能在各部件之間傳送呢?也就是說,數據的流動是由什么部件控制的呢? 通常把許多數字部件之間傳送信息的通路稱為“數據通路”。信息從什么地方開始,中間經過哪個寄存器或多路開關,最后傳到哪個寄存器,都要加以控制。在各寄存器之間建立數據通路的任務,是由稱為“操作控制器”的部件來完成的。操作控制器的功能就是根據指令操作碼和時序信號,產生各種操作控制信號,以便正確地建立數據通路,從而完成取指令和執行指令的控制。 - 時序發生器
CPU中一個類似“作息時間”的東西,使計算機可以准確、迅速、有條不紊地工作。機器一旦被啟動,即CPU開始取指令並執行指令時,操作控制器就利用定時脈沖的順序和不同的脈沖間隔,有條理、有節奏地指揮機器的動作,規定在這個脈沖到來時做什么,在那個脈沖到來時又做什么,給計算機各部分提供工作所需的時間標志。為此,需要采用多級時序體制。從時間上來說,取指令事件發生在指令周期的第一個CPU周期中,即發生在“取指令”階段,而取數據事件發生在指令周期的后面幾個CPU周期中,即發生在“執行指令”階段。從空間上來說,如果取出的代碼是指令,那么一定送往指令寄存器,如果取出的代碼是數據,那么一定送往運算器。由此可見,時間控制對計算機來說是太重要了。
1.2、運算單元
是運算器的核心。可以執行算術運算(包括加減乘數等基本運算及其附加運算)和邏輯運算(包括移位、邏輯測試或兩個值比較)。相對控制單元而言,運算器接受控制單元的命令而進行動作,即運算單元所進行的全部操作都是由控制單元發出的控制信號來指揮的,所以它是執行部件。由算術運算邏輯單元(ALU)、累加器、數據緩沖寄存器、狀態寄存器和通用寄存器組組成,它是數據加工處理部件。
- 算術運算邏輯單元(ALU)
實現多組算術運算和邏輯運算的組合邏輯電路,簡稱ALU。由"And Gate"(與門) 和"Or Gate"(或門)構成的算術邏輯單元,主要功能是進行整數的二位元的算術運算,如加減乘(不包括整數除法)。 - 累加器(AC)
當運算器的算術邏輯單元執行算術或邏輯運算時,為ALU提供一個工作區。暫時存放運算結果信息。目前CPU中的有多達16個、32個、甚至更多的累加器。 - 數據緩沖寄存器(DR)
用來暫時存放由內存讀出的指令或數據,反之,當向內存存入指令或數據時,也暫時將它們存放在DR中。作為CPU和內存及外部設備間信息傳送的中專站。 - 狀態寄存器(PSW)
保存由算術指令和邏輯指令運行或測試的結果建立的各種條件碼內容,如運算結果進位標志、溢出標志,為零標志、為負標志等。 - 通用寄存器組
通用寄存器可用於傳送和暫存數據,也可參與算術邏輯運算,並保存運算結果。除此之外,它們還各自具有一些特殊功能。通用寄存器的長度取決於機器字長,匯編語言程序員必須熟悉每個寄存器的一般用途和特殊用途,只有這樣,才能在程序中做到正確、合理地使用它們。
1.3、存儲單元
包括CPU片內緩存和寄存器組,是CPU中暫時存放數據的地方,里面保存着那些等待處理的數據,或已經處理過的數據,CPU訪問寄存器所用的時間要比訪問內存的時間短。采用寄存器,可以減少CPU訪問內存的次數,從而提高了CPU的工作速度。但因為受到芯片面積和集成度所限,寄存器組的容量不可能很大。寄存器組可分為專用寄存器和通用寄存器。專用寄存器的作用是固定的,分別寄存相應的數據。而通用寄存器用途廣泛並可由程序員規定其用途,通用寄存器的數目因微處理器而異。
1.4、內部詳細結構
根據上面的講述,我們大致可以得到CPU的內部結構,如圖
二、功能
- 處理指令
這是指控制程序中指令的執行順序。程序中的各指令之間是有嚴格順序的,必須嚴格按程序規定的順序執行,才能保證計算機系統工作的正確性。 - 執行操作
一條指令的功能往往是由計算機中的部件執行一系列的操作來實現的。CPU要根據指令的功能,產生相應的操作控制信號,發給相應的部件,從而控制這些部件按指令的要求進行動作。 - 控制時間
時間控制就是對各種操作實施時間上的定時。在一條指令的執行過程中,在什么時間做什么操作均應受到嚴格的控制。只有這樣,計算機才能有條不紊地工作。 - 數據處理
即對數據進行算術運算和邏輯運算,或進行其他的信息處理
三、運行原理
CPU從存儲器或高速緩沖存儲器中取出指令,放入指令寄存器,並對指令譯碼。它把指令分解成一系列的微操作,然后發出各種控制命令,執行微操作系列,從而完成一條指令的執行。指令是計算機規定執行操作的類型和操作數的基本命令。指令是由一個字節或者多個字節組成,其中包括操作碼字段、一個或多個有關操作數地址的字段以及一些表征機器狀態的狀態字以及特征碼。有的指令中也直接包含操作數本身。
- 初始化PC
由程序計數器(PC)指定指令在存儲器的位置。(程序計數器保存供識別程序位置的數值。換言之,程序計數器記錄了CPU在程序里的蹤跡。) - 取指令
根據PC,從存儲器或高速緩沖存儲器中檢索指令(為數值或一系列數值)放到指令寄存器。 - 指令解碼
CPU根據存儲器提取到的指令來決定其執行行為。首先譯碼,指令被拆解為有意義的片段。根據CPU的指令集架構(ISA)定義將數值解譯為指令。一部分的指令數值為運算碼(Opcode),其指示要進行哪些運算。其它的數值通常供給指令必要的信息,諸如一個加法(AddiTIon)運算的運算目標。二是分析參與這次操作的各操作數所在的地址,即操作數的有效地址。 - 執行指令
在提取和解碼階段之后,緊接着進入執行階段。該階段中,連接到各種能夠進行所需運算的CPU部件。例如,要求一個加法運算,算術邏輯單元(ALU,ArithmeTIc Logic Unit)將會連接到一組輸入和一組輸出。輸入提供了要相加的數值,而輸出將含有總和的結果。ALU內含電路系統,易於輸出端完成簡單的普通運算和邏輯運算(比如加法和位元運算)。如果加法運算產生一個對該CPU處理而言過大的結果,在標志暫存器里可能會設置運算溢出(ArithmeTIc Overflow)標志。 - 寫回
最終階段,寫回,以一定格式將執行階段的結果簡單的寫回。運算結果經常被寫進CPU內部的暫存器,以供隨后指令快速存取。在其它案例中,運算結果可能寫進速度較慢,但容量較大且較便宜的主記憶體中。某些類型的指令會操作程序計數器,而不直接產生結果。這些一般稱作“跳轉”(Jumps),並在程式中帶來循環行為、條件性執行(透過條件跳轉)和函式。許多指令會改變標志暫存器的狀態位元。這些標志可用來影響程式行為,緣由於它們時常顯出各種運算結果。例如,以一個“比較”指令判斷兩個值大小,根據比較結果在標志暫存器上設置一個數值。這個標志可藉由隨后跳轉指令來決定程式動向。在執行指令並寫回結果之后,程序計數器值會遞增,反覆整個過程,下一個指令周期正常的提取下一個順序指令。 - 更新PC
根據指令代碼和分支標志,從前面步驟得出的結果,生成下一條指令的地址放到PC里
流程如下圖