一文理解CPU進行簡單加法(計算機組成原理5.1CPU的功能和基本結構)


這篇文章真的是千呼萬喚始出來!總結這部分知識點花了不少時間。
對不起好兄弟萌,我寫得這么垃圾還拖更。

5.1.1CPU的功能

5.1.1.1 CPU的基本功能

指令控制:完成取指令,分析指令和執行指令的操作,即程序的順序控制。
操作控制:一條指令由若干操作信號組成。CPU管理並產生由內存取出的每條指令的操作信號,把各種操作信號送往相應部件,從而控制這些部件按指令的要求進行動作。
時間控制:對各種操作加以時間上的控制。時間控制要為每條指令按時間順序提供相應的控制信號。
數據加工:對數據進行算術和邏輯運算。
中斷處理:對計算機運行過程中出現的異常情況和特殊請求進行處理。

5.1.1.2 運算器的功能

對數據進行加工。

5.1.1.3 控制器的功能

控制器協調並控制計算機個部件執行程序的指令序列,基本功能有取指令、分析指令、執行指令。
取指令:取指令時CPU自動形成下一條指令的存放地址,即PC + 1;每一條指令執行完畢CPU自動發出取指令的命令。
分析指令:對取得指令進行操作碼譯碼,分析指令的要進行什么操作,以及對分析地址碼,根據不同的數據尋址方式取得操作數有效地址。
PC指向加法程序的某一條指令
執行指令:根據分析指令得到的操作命令和操作數地址,形成操作信號控制序列。每條指令由多個不同的微操作執行,每個微操作對應一個控制信號,因此執行指令即為形成操作信號控制序列,控制設備完成相應操作的過程。每執行完畢一條指令,CPU會檢查是否有中斷信號需要處理,此時控制器對總線進行處和IO設備進行處理,如處理異常情況和特殊請求。
中斷處理:管理總線和IO,處理異常情況和特殊請求。

5.1.2 CPU的基本結構

在這里插入圖片描述

5.1.3 運算器的基本結構

在這里插入圖片描述
算術邏輯單元:ALU,主要進行算術/邏輯運算。
暫存寄存器:暫存從主存讀取來的數據,暫存寄存器對程序員是透明的。
累加寄存器:ACC,是一個通用寄存器,暫存ALU的運算結果,可以作為加法運算的一個輸入端。
通用寄存器:上圖中R0,R1,R2,R3即為通用寄存器,X86計算機中,名為AX、BX、CX、DX、SP。上圖中的AH和AL,BH和BL等,意為AX,BX的高位和低位。通用寄存器保存操作數和各種地址信息。SP是堆棧指針,操作系統會給每個正在運行的程序分配一個堆棧來存放該程序產生的數據,SP作為該堆棧的棧頂指針。SP也被單獨划分為特殊的專用寄存器
關於堆棧指針,可以與數據尋址中堆棧尋址聯系起來:如下圖,假設堆棧寄存器里存放的是某進程產生的返回值和參數等數據。尋址得到的操作數被輸送到ALU參與加法運算,再返回到堆棧寄存器中。
在這里插入圖片描述

程序狀態字寄存器:PSW,也稱為狀態寄存器或者有的題目叫做標志寄存器,保留由算術邏輯運算或者測試指令產生的結果而建立的狀態信息,如溢出標志OF,符號標志SF等。
移位器:對操作數或者運算結果進行移位。
計數器:控制乘除運算的操作步數。

運算器內部傳送流動的兩種方式
專用數據通路方式

根據指令執行過程中的數據和地址的流動方向安排連接線路。
在這里插入圖片描述
假設R0,R1,R2,R3為一組通用寄存器,每個通用寄存器都有若干條專用數據通路與ALU連接,如假設R0可以存放16bit數據,則R0有16條數據通路與ALU連接。R0兩側都有數據通路與ALU連接,意為可以從A或B端輸入數據。后續R1,R2,R3同理。
上圖可以看出四個寄存器是同時向ALU輸入數據的,因此在運算時會有數據沖突,為了解決這個問題。
解決專用數據通路方式中多個寄存器同時向ALU輸送數據的問題:
方法一:使用多路選擇器
在這里插入圖片描述
假設C1的控制信號是00,C2的控制信號是01,則意為R0從左側輸入數據,R1從右側輸入數據,其余兩個不輸入數據。在ALU與一組通用寄存器之間使用多路選擇器以達到控制寄存器內數據是輸入的效果。

方法二:使用三態門
在這里插入圖片描述
使用三態門以及不同的電信號以控制和選擇寄存器內數據的輸入。每一個數據通路使用一個三態門,三態門一側輸入端連接通用寄存器,另一側輸出端連接ALU的,還有一側端口連接釋放電信號的控制器,如寄存器R0out的三態門的電信號為高電平1時,三態門就可以通電,意味着R0的數據可以傳送到ALU內參與運算,若三態門電信號為低電平0時,意味着寄存器R0的數據無法輸入到ALU。

采用專用數據通路的方式傳輸數據,性能較高,不存在數據沖突的現象,但是實現需要付出代價較大。

CPU內部單總線方式:

將所有寄存器的輸入端和輸出端都連接到一條公共的通路上。
在這里插入圖片描述
這種通過CPU內部總線的方式,由於參與計算的通用寄存器同時向ALU傳輸數據會產生數據沖突,因此在ALU其中一端設置暫存寄存器,暫存從寄存器讀取來的數據。
假設需要寄存器R0和R1的數據參與運算,且運算結果放回R0,則
(1)先把R0out的三態門打開使它的數據傳輸到ALU輸入端暫存寄存器,然后關閉R0的輸出有效信號,打開R1的三態門使它的數據傳輸到ALU。
(2)接下來,ALU內部進行加法運算,在這個過程中,ALU持續計算且需要等待R0與R1輸入的電信號穩定后才可輸出計算結果返回到R0,因此,為了防止ALU在電信號穩定前輸出錯誤的運算結果,還要在ALU輸出端設置一個暫存寄存器以一個及三態門。
(3)電信號穩定后導通ALU輸出端三態門,運算結果輸出到內部總線,此時接通R0輸入端三態門,運算結果返回R0。至此,一次運算完畢。
上述運算的過程,可以通過增加一個累加寄存器(ACC)和標志寄存器(PSW)來實現優化。ACC用來暫存ALU每次運算的結果,PSW用來保存每次運算結果的狀態,如是否產生了進位,或者預算暖是否溢出等。

5.1.4 控制器的基本結構(與運算器一起理解)

在這里插入圖片描述
圖中控制單元CU包括:指令譯碼器,時許系統,微操作信號發生器。其余PC和IR,MAR,MDR都如上圖所示構成。灰色為用戶不可見的寄存器(不可編成),棕色為用戶可見寄存器(可編程,如匯編語言)。
運行一次加法過程,假設操作數b在寄存器,操作數a在主存
(1)PC從內部總線中取得由MDR傳輸的指令A,PC取出的指令放到IR中,由IR解析獲得操作碼和地址碼,地址碼輸出到內部總線,操作碼傳輸到指令譯碼器,PC + 1。
(2)譯碼器解析的結果指揮微操作信號發生器,判斷對應的微操作信號序列,同時由時序系統判斷執行順序,執行同時由PSW判斷執行狀態。
(3)假設操作碼解析后意為從主存中取出操作數進行加法操作,則地址碼是下一條指令的存放地址B。該地址碼傳輸到MAR里,PSW判斷操作無誤,MAR的數據傳輸到地址總線,從主存單元中取出下一條指令B,並經過數據總線放入MDR。
(4)PSW判斷操作無誤,MDR中存放的指令傳輸到內部總線,經過內部總線,由PC取得指令B。
(5)PC取得指令B,PC + 1,並將指令B放入IR進行解析,IR解析完畢把操作碼放入譯碼器,譯碼器解析意為從主存取得操作數a,地址碼放入內部總線,等待MAR獲取。
(6)MAR獲取操作數a的存放地址並將該地址傳輸到地址總線,從主存單元取得操作數a,經過數據總線把a放入MDR,等待PSW判斷。
(7)PSW判斷無誤,MDR中的操作數a放入內部總線,PSW判斷無誤,把a放入暫存寄存器,等待執行加法運算。
(8)三態門連通,把操作數b放入ALU,a和b進行運算,運算結果暫存到ACC。
(9)至此,一次加法運算完畢。
CPU執行指令的過程,均可通過這張圖來幫助理解。
一次加法的基本運算
上述過程可以舉個例子類比理解:
比如,工人甲在流水線上加工貨物,甲收到通知信息A,A指示貨物在某個倉庫,需要甲去倉庫取得貨物B並進行加工,甲會去倉庫取得貨物B,然后帶回流水線進行加工。
甲收到A消息的過程就是取得PC取得指令A以及IR進行譯碼操作的過程。
甲去倉庫取貨物B就是PC去主存尋得指令B的過程。
甲將B帶回流水線加工,則是操作數a被放到MDR,以及進行加法運算的過程。

本想畫漫畫解釋例子幫助理解,但是手殘黨表示心累....


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM