計算機基本工作原理

北洛發表於2022-05-15

計算機基本工作原理

馮諾依曼結構基本思想

馮諾依曼結構基本思想主要包括以下幾個方面:

  1. 採用“儲存程式”工作方式:將事先編寫好的程式和原始資料送入主存後才能執行程式,一旦程式被啟動執行,計算機能在不需要操作人員干預下自動完成逐條指令取出和執行的任務。
  2. 計算機由運算器、控制器、儲存器、輸入裝置和輸出裝置5個基本部件組成。
  3. 儲存器不僅能存放資料,也能存放指令。形式上資料和指令沒有區別,但計算機能區分它們;控制器應能自動執行指令;運算器能進行算術運算,也能進行邏輯運算;操作人通過輸入/輸出裝置使用計算機。
  4. 計算機內部以二進位制形式表示指令和資料;每條指令由操作碼和地址碼兩部分組成,操作碼指出操作型別,地址碼指出運算元的地址;由一串指令組成程式。

馮諾依曼機基本結構

根據馮諾依曼結構基本思想,可以給出一個模型計算機的基本硬體結構。如圖1.1所示。

 

圖1.1 模型機的硬體基本結構

模型機主要包括:

  1. 用來存放指令和資料的主儲存器,簡稱主存記憶體
  2. 用來進行邏輯運算的部件,即算術邏輯部件(Arithmetic Logic Unit,簡稱ALU),在ALU操作控制訊號ALUop的控制下,ALU可以對輸入端A和B進行不同的運算,得到結果F。
  3. 用於自動逐條取出指令並進行譯碼的部件,即控制部件(Control Unit,簡稱CU),也稱控制器
  4. 用來和使用者互動的輸入裝置和輸出裝置。

在圖1.1中,為了臨時存放從主存取來的資料或運算的結果,還需要若干通用暫存器(General Purpose Register),組成通用暫存器組(GPRs),ALU兩個輸入端A和B的資料來自通用暫存器;ALU運算的結果會產生標誌資訊,例如:結果是否為0(零標誌ZF)、是否為負數(符號標誌SF)等,這些標誌資訊需要記錄在專門的標誌暫存器中;從主存取來的指令需要臨時儲存在指令暫存器(Instruction Register,簡稱IR)中;CPU為了自動按序讀取主存中的指令,還需要有一個程式計數器(Program Counter,簡稱PC),在執行當前指令過程中,自動計算出下一條指令的地址並送到PC中儲存。通常把控制部件、運算部件和各類暫存器互連組成的電路稱為中央處理器(Central Procesing Unit,簡稱CPU),簡稱處理器。

CPU需要從通用暫存器中取資料到ALU運算,或把ALU運算的結果儲存到通用暫存器中,因此,需要給每個通用暫存器進行編號;同樣,主存中每個單元也需要編號,稱為主存單元地址,簡稱主存地址。 通用急促器和主存都屬於儲存部件,通常,計算機中的儲存部件從0開始編號,例如,圖1.1中4個通用暫存器編號分別為0~3;16個主存單元編號分別為0~15。

CPU為了從主存取指令和存取資料,需要通用傳輸介質與主存相連,通常把連線不同部件進行資訊傳輸的介質稱為匯流排,其中,包含了用於傳輸地址資訊、資料資訊和控制資訊的地址線、資料線和控制線。CPU訪問主存時,需先將主存地址、讀寫命令分別送到匯流排的地址線、控制線,然後通過資料線傳送或接收資料。CPU送到地址線的主存地址應先存放在主存地址暫存器(Memary Adies Regster,簡稱MAR)中,傳送到或從資料線取來的資訊存放在主存資料暫存器(Memory Data Register,簡稱MDR)中。

程式和指令的執行過程

馮諾依曼結構計算機的功能通過執行程式實現,程式的執行過程就是所包含的指令執行過程。

指令(instruction)是用0和1表示的一串0/1序列,用來指示CPU完成一個特定的原子操作。例如,取數指令(load)從主存單元中取出資料存放到通用暫存器中;存數指令(store)將通用暫存器的內容寫入主存單元;加法指令(add)將兩個通用暫存器內容相加後送入結果暫存器;傳送指令(mov)將一個通用暫存器的內容傳送到另一個通用暫存器;如此等等。

指令通常被劃分為若干個欄位,有操作碼、地址碼等欄位。操作碼欄位指出指令的操作型別,如取數、存數、加、減、傳送、跳轉等;地址碼欄位指出指令所處理的運算元的地址,如暫存器編號、主存單元編號等。

下面用一個簡單的例子說明在圖1.1所示的計算機上程式和指令的執行過程。假定圖1.1所示的模型機字長為8位;有4個通用暫存器r0~r3,編號分別為0~3;有16個主存單元,編號為0~15。每個主存單元和CPU的ALU、通用暫存器、IR、MDR的寬度都是8位,PC和MAR的寬度都是4位;連線CPU和主存的匯流排中有4位地址線、8位資料線和若干控制線(包括讀寫命令線)。該模型機採用8位定長指令字,即每條指令有8位,指令格式有R型和M型兩種,如圖1.2所示。

 

 圖1.2 定長指令字格式

圖1.2中,op為操作碼欄位,R型指令的op為0000、0001時,分別定義為暫存器間傳送(mov)和加(add)操作,M型指令的op為1110和1111時,分別定義為取數(load)和存數(store)操作;rs和rt為通用暫存器編號;addr為主存單元地址。

圖1.2中,R[r]表示編號為r的通用暫存器中的內容,M[addr]表示地址為addr的主存單元的內容,“←”表示從右向左傳送資料。指令1110  0110的功能為R[0]←M[0110]表示將6號主存單元(地址為0110)中的內容取到0號暫存器;指令0001 0001的功能為R[0]←R[0]+R[1],表示將0號和1號暫存器內容相加的結果送到0號暫存器。

若在該模型機上實現z=x+y,x和y分別存放在主存5號和6號單元中,結果z存放在7號單元中,則相應程式在主存單元中的初始內容如圖1.3所示。

 

圖1.3 實現z=x+y的程式在主存單元中的初始內容

“儲存程式”工作方式規定,程式執行前,需將程式包含的指令和資料先送入主存,一旦啟動程式執行,則計算機必須能夠在不需要操作人員干預下自動完成逐條指令取出和執行的任務。如1.4所示,一個程式的執行就是周而復始地執行一條條指令的過程。每條指令的執行過程包括:從主存取指令、對指令進行譯碼、PC增量(途中的PC+“1”表示PC的內容加上當前這一條指令的長度 )、取運算元並執行、將結果送主存或暫存器儲存。

 

圖1.4 程式執行過程

程式執行前。首先將程式的起始地址存放在PC中,取指令時,將PC的內容作為地址訪問主存。每條指令執行過程中,都需要計算下條將執行指令的主存地址,並送到PC中。若當前指令為順序型指令,則下條指令為PC的內容加上當前指令的長度;若當前指令為跳轉型指令,則下條指令地址為指令中指定的目標地址。當前指令執行完後,根據PC的值到主存中取到的是下條將要執行的指令,因而計算機能夠周而復始地自動取出並執行一條條指令。

對於圖1.3中的程式,程式首地址(即指令I1所在地址)為0,因此,程式開始執行時,PC的內容為0000。根據程式執行流程,該程式執行過程中,所執行的指令順序為I1→I2→I3→I4→I5。每條指令在圖1.1所示模型機中的執行過程及結果如圖1.5所示。

 

圖1.5 實現z=x+y功能的每條指令執行過程

如圖1.5所示,在圖1.1的模型機中執行指令I1的過程如下:指令I1存放在第0單元,故取指令操作為IR←M[0000],表示將主存0單元中的內容取到指令暫存器IR中,故取指令階段結束時,IR中內容為1110 0110;然後,將高4位1110(op欄位)送到控制部件進行指令譯碼;同時控制PC進行“+1”操作,PC內容變為0001;因為是取數指令,所以控制器產生“主存讀”控制訊號Read,同時控制在取數並執行階段將Read訊號送控制線、指令後4位的0110(addr欄位)作為主存地址送MAR並自動送地址線,經過一段時間以後,主存將0110(6#)單元中的33(變數y)送到資料線並自動儲存在MDR中;最後由控制器控制將MDR內容送0號通用暫存器,因為,指令I1的執行結果為R[0]=33。其他指令的執行過程類似。程式最後執行的結果為主存0111(7#)單元內容(變數z)變為49,即M[7]=49。

指令執行各階段都包含若干個微操作,微操作需要相應的控制訊號進行控制。

取指令階段IR←M[PC]微操作有:MAR←PC;控制線←Read;IR←MDR。

取數階段R[0]←M[addr]微操作有:MAR←addr;控制線←Read;R[0]←MDR。

存數階段M[addr]←R[0]微操作有:MAR←addr;MRD←R[0];控制線←Write。

ALU運算R[0]←R[0]+R[1]微操作有:A←R[0];B←R[1];ALUop←add;R[0]←F。

ALU操作有加(add)、減(sub)、與(and)、或(or)、傳送(mov)等型別,如圖1.1所示,ALU操作控制訊號ALUop可以控制ALU進行不同的運算。例如,ALUop←mov時,ALU的輸出F=A;ALUop←add時,ALU的輸出F=A+B。

這裡的Read、Write、mov、add等微操作控制訊號都是控制部件對op欄位進行譯碼後送出的,如圖1.1中的虛線所示就是控制訊號線。每條指令執行過程中,所包含的微操作具有先後順序關係,需要定時訊號進行定時。通常,CPU中所有微操作都由時鐘訊號進行定時,時鐘訊號的寬度為一個時鐘週期。一條指令的執行時間包含一個或多個時鐘週期。

相關文章