1.2 · Fetch–Decode–Execute 迴圈
目標: 描述機器迴圈每一步以及每個寄存器與總線的角色。
三句話講迴圈
- 從記憶體**取出(Fetch)**下一條指令。
- **解碼(Decode)**它的含義。
- **執行(Execute)**它。
…迴圈數十億次每秒,直到關機。
詳盡步驟
下面是經典逐步。背順序、涉及的寄存器、用的總線。
| # | 步驟 | 涉及寄存器 / 單元 | 總線 |
|---|---|---|---|
| 1 | PC 的值複製到 MAR。 | PC → MAR | — |
| 2 | MAR 中的地址送到記憶體。 | MAR | 地址總線 |
| 3 | 記憶體回送該地址的指令;進入 MDR。 | Memory → MDR | 資料總線 |
| 4 | MDR 的內容複製到 IR。 | MDR → IR | — |
| 5 | PC 遞增,指向下一條指令。 | PC = PC + 1 | — |
| 6 | 控制單元解碼 IR 中的指令。 | CU | — |
| 7 | 如需操作數,對每個操作數重複 1–4。 | — | 地址 / 資料 |
| 8 | ALU 執行操作;結果放到 ACC 或其他寄存器。 | ALU → ACC | — |
| 9 | 狀態寄存器(零、進位、溢出)被更新。 | 狀態寄存器 | — |
| 10 | 若指令要寫記憶體,載入 MAR & MDR 併發寫訊號。 | MAR/MDR | 地址 / 資料 / 控制 |
| 11 | 從第 1 步迴圈。 | — | — |
三條總線
| 總線 | 攜帶 | 方向 |
|---|---|---|
| 地址總線 | 被訪問的地址 | CPU → 記憶體(單向) |
| 資料總線 | 實際資料 | 雙向 |
| 控制總線 | 讀、寫、中斷等訊號 | 雙向 |
實例 · 兩數相加
設記憶體內容:
地址 內容
0 LOAD 5 ; 把地址 5 的值載入到 ACC
1 ADD 6 ; 把地址 6 的值加到 ACC
2 STORE 7 ; 把 ACC 存到地址 7
5 10
6 20
7 ?1
2
3
4
5
6
7
2
3
4
5
6
7
逐迴圈(壓縮版):
| 迴圈 | 動作 |
|---|---|
| 1 | 取 LOAD 5。從地址 5 讀 10 到 ACC。ACC = 10 |
| 2 | 取 ADD 6。從地址 6 讀 20,加到 ACC。ACC = 30 |
| 3 | 取 STORE 7。把 ACC(30)寫到地址 7。地址 7 現為 30 |
三個迴圈後,地址 7 持有結果之和。
迴圈為何在現實中重要
- 時鐘更快 → 每秒更多迴圈 → 更多工作。
- 總線更寬 → 每次傳輸更多資料 → 大資料少用迴圈。
- 寄存器更多 → 少讀記憶體 → 不浪費時間等慢 RAM。
常見誤解
- 「每條指令耗一個迴圈。」現代 CPU 流水線一次執行多條指令,但概念迴圈仍是 HKEAA 用的模型。
- 「資料總線只搬一位元組。」總線寬度多變:8、16、32、64 位。
- 「記憶體和 CPU 是同一顆芯片。」現代芯片上 L1/L2 cache 在 CPU die 上,但主 RAM 獨立。
考試式題目
題(5 分): 概述 fetch–decode–execute 迴圈各步,識別 PC、IR、MAR、MDR 和系統總線的角色。
參考答案:
- 程序計數器 (PC) 保存下一條指令的地址。
- PC 的值複製到 MAR,放到地址總線上以指明要讀的記憶體位置。
- 記憶體透過資料總線回送指令到 MDR。
- MDR 的內容複製到 IR 以備解碼。
- PC 遞增指向下一條指令。
- 控制單元解碼 IR 中的指令。
- ALU 執行操作;結果可放 ACC 或經 MAR / MDR 寫回記憶體。
控制總線承載協調每步的讀 / 寫訊號。
關鍵要點
- Fetch → Decode → Execute,重複。
- 五個寄存器:PC、IR、MAR、MDR、ACC。
- 三條總線:地址、資料、控制。
- 速度 = 時鐘 × 每週期指令數,由總線寬度與記憶體時延調節。
➡️ 下一節:1.3 記憶體類型