1. 程式人生 > 其它 >3.2 指令的執行過程

3.2 指令的執行過程

指令的執行過程

  • 指令週期:一條指令的執行分為不同的階段
  • 資料流:不同階段要求依次訪問的資料序列
  • 指令執行方案:如何安排多條指令的執行?

指令週期

  • 指令週期: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,表示進行寫
  • 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
    • 即第一個到分析階段、第二個就開始進行取指令
“朝著一個既定的方向去努力,就算沒有天賦,在時間的積累下應該也能稍稍有點成就吧。”