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
    • 即第一個到分析階段、第二個就開始進行取指令


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM