學習目標
- 理解 RISC (Reduced Instruction Set Computer) 架構
- 理解 CISC (Complex Instruction Set Computer) 架構
- 掌握兩者的差異和優缺點
- 了解現代處理器的發展趨勢
1. 指令集架構 (ISA) 的基本概念
1.1 什麼是指令集?
指令集 (Instruction Set) 是 CPU 能夠理解和執行的所有指令的集合。它定義了: - CPU 可以執行哪些操作 - 指令的格式和編碼方式 - 如何存取記憶體和暫存器
1.2 指令集架構的兩種哲學
在電腦發展歷史上,出現了兩種不同的設計哲學:
- CISC (Complex Instruction Set Computer): 複雜指令集電腦
- RISC (Reduced Instruction Set Computer): 精簡指令集電腦
2. CISC 架構
2.1 設計理念
CISC 的設計理念是: - 複雜的指令: 提供功能強大、複雜的指令 - 一條指令做多件事: 一條指令可以完成多個操作 - 減少程式碼大小: 用更少的指令完成任務 - 接近高階語言: 指令設計接近高階語言的語法
2.2 特點
- 指令數量多: 通常有數百甚至上千條指令
- 指令長度可變: 不同指令的長度不同
- 指令格式複雜: 指令可以有多種定址模式
- 指令執行時間差異大: 簡單指令和複雜指令執行時間差異很大
- 微程式碼 (Microcode): 複雜指令由微程式碼實作
2.3 範例指令
CISC 風格的指令:
MOV AX, [BX+SI+100] // 複雜的記憶體定址
ADD AX, [BX+SI+100] // 可以直接從記憶體運算
LOOP label // 一條指令完成迴圈
2.4 優點
- 程式碼密度高: 用較少的指令完成任務,程式碼較小
- 編譯器簡單: 編譯器不需要做太多優化
- 記憶體效率: 在記憶體昂貴的時代,這很重要
- 向後相容: 可以保持與舊指令集的相容性
2.5 缺點
- 硬體複雜: 需要複雜的解碼器和執行單元
- 時脈頻率受限: 複雜的硬體設計限制了時脈頻率的提升
- 管線化困難: 指令長度和執行時間差異大,難以實作有效的管線化
- 指令使用不均: 許多複雜指令很少被使用
2.6 典型代表
- x86 架構: Intel 和 AMD 的處理器(雖然現代 x86 內部使用 RISC 核心)
- Motorola 68000: 早期的 CISC 處理器
3. RISC 架構
3.1 設計理念
RISC 的設計理念是: - 簡單的指令: 每條指令只做一件事 - 固定長度: 所有指令長度相同 - 載入/儲存架構: 只有載入 (LOAD) 和儲存 (STORE) 指令可以存取記憶體 - 暫存器多: 提供大量暫存器 - 硬體實作: 指令由硬體直接實作,不使用微程式碼
3.2 特點
- 指令數量少: 通常只有幾十到一百多條指令
- 指令長度固定: 所有指令長度相同(如 32 位元)
- 指令格式簡單: 指令格式統一,易於解碼
- 執行時間一致: 大部分指令在一個時脈週期內完成
- 載入/儲存架構: 運算只能在暫存器之間進行
3.3 範例指令
RISC 風格的指令:
LOAD R1, [R2+100] // 載入:從記憶體讀取到暫存器
ADD R3, R1, R4 // 運算:只能在暫存器之間
STORE [R2+100], R3 // 儲存:從暫存器寫回記憶體
注意: 在 CISC 中,ADD AX, [BX+SI+100] 一條指令完成;在 RISC 中需要三條指令。
3.4 優點
- 硬體簡單: 指令解碼和執行單元較簡單
- 時脈頻率高: 簡單的硬體設計允許更高的時脈頻率
- 管線化容易: 指令長度和執行時間一致,容易實作管線化
- 效能好: 透過管線化和高時脈頻率,整體效能更好
- 功耗低: 簡單的硬體設計通常功耗較低
3.5 缺點
- 程式碼較大: 需要更多指令完成相同任務
- 編譯器複雜: 編譯器需要做更多優化(如指令排程、暫存器分配)
- 記憶體頻寬需求高: 需要頻繁載入和儲存
3.6 典型代表
- ARM 架構: 廣泛用於手機、平板、嵌入式系統
- MIPS 架構: 用於嵌入式系統和教學
- PowerPC 架構: 曾用於 Mac(現已改用 ARM)
- RISC-V: 開源的 RISC 架構
4. RISC vs. CISC 詳細比較
| 特性 | CISC | RISC |
|---|---|---|
| 指令數量 | 多(數百到上千) | 少(幾十到一百多) |
| 指令長度 | 可變 | 固定 |
| 指令格式 | 複雜 | 簡單統一 |
| 定址模式 | 多種 | 較少 |
| 暫存器數量 | 較少 | 較多 |
| 記憶體存取 | 指令可直接存取記憶體 | 只有 LOAD/STORE 可存取記憶體 |
| 執行時間 | 差異大 | 大部分一致(1 週期) |
| 實作方式 | 微程式碼 | 硬體直接實作 |
| 硬體複雜度 | 高 | 低 |
| 時脈頻率 | 較低 | 較高 |
| 管線化 | 困難 | 容易 |
| 程式碼大小 | 小 | 大 |
| 編譯器 | 簡單 | 複雜(需要優化) |
| 記憶體頻寬 | 需求較低 | 需求較高 |
5. 現代處理器的發展
5.1 融合趨勢
現代處理器往往結合兩種架構的優點:
x86 架構的演進
- 外部: 保持 CISC 的指令集(向後相容)
- 內部: 將 CISC 指令轉換為 RISC 風格的微操作 (Micro-ops)
- 執行: 使用 RISC 風格的執行單元
這樣既保持了相容性,又獲得了 RISC 的效能優勢。
ARM 架構的演進
- 保持 RISC 核心: 簡單、高效
- 增加複雜指令: 提供一些複雜指令以提高效率
- Thumb 模式: 提供 16 位元指令以減少程式碼大小
5.2 現代優化技術
無論是 RISC 還是 CISC,現代處理器都使用:
- 管線化 (Pipelining): 同時處理多條指令的不同階段
- 超純量 (Superscalar): 每個時脈週期執行多條指令
- 亂序執行 (Out-of-order Execution): 不按順序執行指令以提高效率
- 分支預測 (Branch Prediction): 預測程式執行路徑
- 快取記憶體 (Cache): 減少記憶體存取延遲
6. 選擇考量
6.1 適合 CISC 的應用
- 向後相容: 需要與舊系統相容
- 程式碼大小: 記憶體受限的環境
- 簡單編譯器: 編譯器開發資源有限
6.2 適合 RISC 的應用
- 高效能: 需要高運算效能
- 低功耗: 行動裝置、嵌入式系統
- 成本敏感: 需要簡單、便宜的硬體設計
- 新設計: 不需要考慮向後相容
7. 實際例子
7.1 x86 (CISC) 指令
; 一條指令完成多個操作
ADD EAX, [EBX+ECX*4+100] ; 從記憶體讀取、計算、相加、寫回
7.2 ARM (RISC) 指令
; 需要多條指令
LDR R1, [R2, R3, LSL #2] ; 載入:R1 = [R2 + R3*4]
ADD R1, R1, #100 ; 運算:R1 = R1 + 100
ADD R0, R0, R1 ; 運算:R0 = R0 + R1
STR R0, [R2, R3, LSL #2] ; 儲存:[R2 + R3*4] = R0
8. 練習題
練習題 1
請說明 RISC 和 CISC 的主要差異。
參考答案: - RISC: 指令少、長度固定、格式簡單、載入/儲存架構、硬體簡單、時脈頻率高 - CISC: 指令多、長度可變、格式複雜、可直接存取記憶體、硬體複雜、時脈頻率較低
練習題 2
為什麼 RISC 架構更容易實作管線化?
參考答案: 因為 RISC 指令長度固定、執行時間一致、格式簡單統一,這些特性使得指令的解碼和執行階段可以標準化,容易設計有效的管線化架構。
練習題 3
現代 x86 處理器如何結合 RISC 和 CISC 的優點?
參考答案: 現代 x86 處理器在外部保持 CISC 指令集以維持向後相容,但在內部將 CISC 指令轉換為 RISC 風格的微操作,然後使用 RISC 風格的執行單元來執行,這樣既保持了相容性,又獲得了 RISC 的效能優勢。
9. 考試重點提醒
- 設計理念: RISC 強調簡單,CISC 強調功能強大
- 指令特點: RISC 指令少且固定長度,CISC 指令多且可變長度
- 記憶體存取: RISC 只有 LOAD/STORE 可存取記憶體,CISC 指令可直接存取
- 優缺點: 要能清楚比較兩者的優缺點
- 現代發展: 了解現代處理器如何融合兩種架構的優點