计算机基本工作原理
馮諾依曼結構基本思想
馮諾依曼結構基本思想主要包括以下幾個方面:
馮諾依曼機基本結構
根據馮諾依曼結構基本思想,可以給出一個模型計算機的基本硬件結構。如圖1.1所示。
圖1.1 模型機的硬件基本結構
模型機主要包括:
在圖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中所有微操作都由時鐘信號進行定時,時鐘信號的寬度為一個時鐘周期。一條指令的執行時間包含一個或多個時鐘周期。
總結
- 上一篇: 果壳网科学人文章采集爬虫分享
- 下一篇: 软考高项信息系统项目管理师范文——论信息