3.2 指令的執行過程
阿新 • • 發佈:2021-12-14
指令的執行過程
- 指令週期:一條指令的執行分為不同的階段
- 資料流:不同階段要求依次訪問的資料序列
- 指令執行方案:如何安排多條指令的執行?
指令週期
-
指令週期:CPU從主存中每取出並執行一條指令所需的全部時間。
-
一個指令週期包含若干機器週期,一個機器週期就是用來完成某個子工作,機器週期又叫CPU週期。
- 一個機器週期又包含若干時鐘週期(CPU操作的最基本單位:也稱為節拍、T週期或CPU時鐘週期)
- 例如某CPU主頻:3.0GHz —— 每秒鐘傳送3G的節拍
-
每個指令週期內機器週期數可以不等,
-
每個機器週期內的節拍數也可以不等。
指令週期流程
如何確定當前是在哪個階段?——設定觸發器
- 設定四個觸發器:哪個地方置為1,就代表在哪個階段了
- 四個工作週期都有CPU訪存操作,只是訪存的目的不同。
- 取指週期是為了取指令
- 間址週期是為了取有效地址
- 執行週期是為了取運算元
- 中斷週期是為了儲存程式斷點。
舉例各種指令 說明指令週期的區別
- 空指令NOP:什麼都不做、發呆,所以取出來,分析成功,就發呆。
- 加法指令ADD:比空指令多出一段執行週期
- 乘法指令MUL:就是多次加法和移位,所以比加法耗時更久
- 具有間接定址的指令:多出一個間接定址的週期
- 帶有中斷週期的指令:最後留一段進行中斷檢查
資料流
1、取指週期
- 1、當前指令地址送至儲存器地址暫存器。
- 記:(PC)→ MAR
- 2、CU 發出控制訊號,經控制匯流排傳到主存,這裡是讀訊號。
- 記:1→R
- 對R給高電平1,表示進行讀
- 對W給高電平1,表示進行寫
- 記:1→R
- 3、把主存中MAR所指向的資料,放到MDR中。
- 記:M(MAR) → MDR
- 4、將MDR中的內容(此時是指令)送入IR。
- 記:(MDR) → IR
- 5、CU發出控制訊號,形成下一條指令地址
- 記:(PC) + "1" → PC
2、間址週期(有的指令有)
-
Ad是address,表示取IR的地址碼
-
將指令的地址碼送入MAR
- 記: Ad(IR) → MAR【指令現存於IR】
- 或記:Ad(MDR) → MAR 【此時MDR中也儲存了當前的指令資訊,因為是從MDR複製給IR】
-
CU發出控制訊號,啟動主存做讀操作,記做:1 → R
-
將MAR所指主存中的內容經資料匯流排送入MDR
- 記:M(MAR) → MDR
-
有的可能:將有效地址送至指令的地址碼欄位
- 記:(MDR) → Ad(IR)【因為有的地方把EA拼接到IR中了】
3、執行週期
- 執行週期的任務是根據IR中的指令字的操作碼和運算元通過ALU操作產生執行結果。
- 不同指令的執行週期操作不同,因此沒有統一的資料流向。
4、中斷週期
-
中斷:暫停當前在務去完成其他任務。
- 為了完成其他任務後能夠恢復當前任務,需要儲存斷點,一般使用堆疊來儲存斷點。
-
堆疊儲存斷點
- 每個程序在主存中都有一個堆疊
- 這裡用SP指向棧頂元素,進棧操作是先修改指標,後存入資料。
- 在實際使用中,棧頂是低地址位,棧底是高地址位。
-
1、把PC的值壓入棧。進棧:CU控制,SP往頂端挪,將SP減1,修改後的地址送入MAR,指明要存入的地址放在SP-1的位置
- 記做:(SP)-1 → SP,(SP) → MAR
- 本質上是將斷點存入某個儲存單元,這裡就是把SP指向SP-1(高一位)並且把最後的(SP)-1存入了MAR
-
2、CU發出控制訊號,啟動主存做寫操作
-
記做:1 → w
-
已經儲存斷點了,這裡要讓PC指向另一個程式的存放地址。
-
-
3、將斷點(PC內容)送入MDR
- 記做(PC) → MDR
-
4、CU控制將中斷服務程式的入口地址(由向量地址形成部件產生)送入PC,
- 記:向量地址 → PC
指令執行方案
一個指令週期:通常要包括幾個時間段(執行步驟),每個步驟完成指令的一部分功能,幾個依次執行的步驟完成這條指令的全部功能。
方案1. 單指令週期
對所有指令都選用相同的執行時間來完成。
- 指令之間序列執行
- 控制電路的執行設計方便
- 必然長短不一,指令週期取決於執行時間最長的指令的執行時間,只要設計一樣的節拍數量就可以了,但必然有浪費
- 對於那些本來可以在更短時間內完成的指令,要使用這個較長的週期來完成,會降低整個系統的執行速度。
方案2.多指令週期
對不同型別的指令選用不同的執行步驟來完成。
- 指令之間序列執行
- 可選用不同個數的時鐘週期來完成不同指令的執行過程。
- 一條條執行
- 需要更復雜的硬體設計。
方案3.流水線方案
在每一個時鐘週期啟動一條指令,儘量讓多條指令同時執行,但各自處在不同的執行步驟中。
- 指令之間並行執行。
- 利用效率高
- 原因在於:每個階段用的硬體不同、資源不同,最終就可以相互協調,讓利用效率達到最高。
- 比如取指令階段用PC、IR、MAR,分析階段用UC
- 即第一個到分析階段、第二個就開始進行取指令