
指令的執行過程
- 指令周期:一條指令的執行分為不同的階段
- 數據流:不同階段要求依次訪問的數據序列
- 指令執行方案:如何安排多條指令的執行?
指令周期
-
指令周期: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
- 即第一個到分析階段、第二個就開始進行取指令
