學習目標

  • 理解 RISC (Reduced Instruction Set Computer) 架構
  • 理解 CISC (Complex Instruction Set Computer) 架構
  • 掌握兩者的差異和優缺點
  • 了解現代處理器的發展趨勢

1. 指令集架構 (ISA) 的基本概念

1.1 什麼是指令集?

指令集 (Instruction Set) 是 CPU 能夠理解和執行的所有指令的集合。它定義了: - CPU 可以執行哪些操作 - 指令的格式和編碼方式 - 如何存取記憶體和暫存器

1.2 指令集架構的兩種哲學

在電腦發展歷史上,出現了兩種不同的設計哲學:

  1. CISC (Complex Instruction Set Computer): 複雜指令集電腦
  2. RISC (Reduced Instruction Set Computer): 精簡指令集電腦

2. CISC 架構

2.1 設計理念

CISC 的設計理念是: - 複雜的指令: 提供功能強大、複雜的指令 - 一條指令做多件事: 一條指令可以完成多個操作 - 減少程式碼大小: 用更少的指令完成任務 - 接近高階語言: 指令設計接近高階語言的語法

2.2 特點

  1. 指令數量多: 通常有數百甚至上千條指令
  2. 指令長度可變: 不同指令的長度不同
  3. 指令格式複雜: 指令可以有多種定址模式
  4. 指令執行時間差異大: 簡單指令和複雜指令執行時間差異很大
  5. 微程式碼 (Microcode): 複雜指令由微程式碼實作

2.3 範例指令

CISC 風格的指令:

MOV AX, [BX+SI+100]    // 複雜的記憶體定址
ADD AX, [BX+SI+100]    // 可以直接從記憶體運算
LOOP label             // 一條指令完成迴圈

2.4 優點

  1. 程式碼密度高: 用較少的指令完成任務,程式碼較小
  2. 編譯器簡單: 編譯器不需要做太多優化
  3. 記憶體效率: 在記憶體昂貴的時代,這很重要
  4. 向後相容: 可以保持與舊指令集的相容性

2.5 缺點

  1. 硬體複雜: 需要複雜的解碼器和執行單元
  2. 時脈頻率受限: 複雜的硬體設計限制了時脈頻率的提升
  3. 管線化困難: 指令長度和執行時間差異大,難以實作有效的管線化
  4. 指令使用不均: 許多複雜指令很少被使用

2.6 典型代表

  • x86 架構: Intel 和 AMD 的處理器(雖然現代 x86 內部使用 RISC 核心)
  • Motorola 68000: 早期的 CISC 處理器

3. RISC 架構

3.1 設計理念

RISC 的設計理念是: - 簡單的指令: 每條指令只做一件事 - 固定長度: 所有指令長度相同 - 載入/儲存架構: 只有載入 (LOAD) 和儲存 (STORE) 指令可以存取記憶體 - 暫存器多: 提供大量暫存器 - 硬體實作: 指令由硬體直接實作,不使用微程式碼

3.2 特點

  1. 指令數量少: 通常只有幾十到一百多條指令
  2. 指令長度固定: 所有指令長度相同(如 32 位元)
  3. 指令格式簡單: 指令格式統一,易於解碼
  4. 執行時間一致: 大部分指令在一個時脈週期內完成
  5. 載入/儲存架構: 運算只能在暫存器之間進行

3.3 範例指令

RISC 風格的指令:

LOAD  R1, [R2+100]     // 載入:從記憶體讀取到暫存器
ADD   R3, R1, R4       // 運算:只能在暫存器之間
STORE [R2+100], R3     // 儲存:從暫存器寫回記憶體

注意: 在 CISC 中,ADD AX, [BX+SI+100] 一條指令完成;在 RISC 中需要三條指令。

3.4 優點

  1. 硬體簡單: 指令解碼和執行單元較簡單
  2. 時脈頻率高: 簡單的硬體設計允許更高的時脈頻率
  3. 管線化容易: 指令長度和執行時間一致,容易實作管線化
  4. 效能好: 透過管線化和高時脈頻率,整體效能更好
  5. 功耗低: 簡單的硬體設計通常功耗較低

3.5 缺點

  1. 程式碼較大: 需要更多指令完成相同任務
  2. 編譯器複雜: 編譯器需要做更多優化(如指令排程、暫存器分配)
  3. 記憶體頻寬需求高: 需要頻繁載入和儲存

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,現代處理器都使用:

  1. 管線化 (Pipelining): 同時處理多條指令的不同階段
  2. 超純量 (Superscalar): 每個時脈週期執行多條指令
  3. 亂序執行 (Out-of-order Execution): 不按順序執行指令以提高效率
  4. 分支預測 (Branch Prediction): 預測程式執行路徑
  5. 快取記憶體 (Cache): 減少記憶體存取延遲

6. 選擇考量

6.1 適合 CISC 的應用

  1. 向後相容: 需要與舊系統相容
  2. 程式碼大小: 記憶體受限的環境
  3. 簡單編譯器: 編譯器開發資源有限

6.2 適合 RISC 的應用

  1. 高效能: 需要高運算效能
  2. 低功耗: 行動裝置、嵌入式系統
  3. 成本敏感: 需要簡單、便宜的硬體設計
  4. 新設計: 不需要考慮向後相容

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. 考試重點提醒

  1. 設計理念: RISC 強調簡單,CISC 強調功能強大
  2. 指令特點: RISC 指令少且固定長度,CISC 指令多且可變長度
  3. 記憶體存取: RISC 只有 LOAD/STORE 可存取記憶體,CISC 指令可直接存取
  4. 優缺點: 要能清楚比較兩者的優缺點
  5. 現代發展: 了解現代處理器如何融合兩種架構的優點