---
# System prepended metadata

title: mpch3
tags: [mp]

---

*   **3-1 指令與程式**
    *   **指令集**是指微處理機能執行的所有指令的集合。
    *   **程式**是根據功能需求安排的一系列指令順序。
    *   **執行程式**是微處理機依序執行程式中的指令以達成特定功能。
    *   CPU 執行指令的過程可概分為 **「提取週期」與「執行週期」** 兩個步驟。
    *   執行指令時會使用到下列 CPU 內部的暫存器:
        *   **MAR (記憶體位址暫存器)**：存放 CPU 要讀取或寫入記憶體資料的操作位址。
        *   **MDR (記憶體資料暫存器)**：讀取或寫入記憶體資料時，資料的暫存位置，也稱為 MBR (記憶體緩衝暫存器)。
        *   **ACC (累積暫存器)**：算術邏輯運算時，運算資料與運算結果的暫存位置。
        *   **PC (程式計數器)**：暫存下一個 CPU 要執行指令的記憶體位址，執行完一個指令後，PC 值通常會自動增加。
        *   **IR (指令暫存器)**：暫時儲存將要解碼、執行的指令。
    *   **ID (指令解碼器)** 負責對 IR 內的指令進行解碼，產生一系列的微運算來完成指令功能。
    *   **指令提取週期**的工作是由控制單元負責，將 PC 指向的指令從記憶體提取到 IR 中進行解碼。
        *   步驟包括：將 PC 內容送到 MAR，發出讀取信號 RD 從記憶體讀取指令到 MDR，再傳送到 IR，ID 進行指令解碼，指定執行過程應進行的工作，PC 值加 1 指向下一個指令的位址。
    *   **指令執行週期**依據解碼後的控制信號指示，完成指令功能。
        *   若指令需要從記憶體提取運算元，則先計算有效位址並放置於 MAR，發出 RD 信號讀取運算元至 MDR，再送至 ALU 進行運算。若運算結果需寫回記憶體，則將結果送至 MDR，目的位址送至 MAR，並發出 WR 寫入信號。
    *   一個簡單的微處理機系統除了硬體結構外，還需要定義可以執行的指令群，即指令集。
    *   此範例微處理機提供通用暫存器 R1～R3，可存取 8 個記憶體位置，支援暫存器運算指令和記憶體存取指令兩種。
    *   暫存器運算指令包含 ADD、SUB、NOT、AND、OR、END 等。
    *   記憶體存取指令包含 LOAD (從記憶體讀取至暫存器) 和 STORE (由暫存器寫入到記憶體)。

*   **3-2 定址模式**
    *   **定址模式**是指表達運算元所在位置或位址的方法，即由「運算元」取得「運算資料」的過程。
    *   不同的定址模式因運算資料所在位置不同而有不同的換算方式。
    *   使用不同的定址模式可以減少指令中的位址欄位元數，提供程式設計彈性，並提高指令執行效率。
    *   常見的資料定址模式包括:
        *   **立即定址 (Immediate addressing)**：運算元直接包含在指令中。速度快，不需記憶體存取，但運算元長度受限。
        *   **直接定址 (Direct addressing)**：指令中的位址欄位直接指向運算元所在的記憶體位址。只需一個記憶體週期，但位址空間受限。
        *   **間接定址 (Indirect addressing)**：指令中的位址欄位指向的記憶體位址中存放的是運算元的有效位址。可使用較大的位址空間，但需要多次記憶體存取，速度較慢。
        *   **暫存器定址 (Register addressing)**：指令中的位址欄位是暫存器名稱，運算元存放在該暫存器中。速度快，不需記憶體週期，且位址欄寬度較短。
        *   **暫存器間接定址 (Register indirect addressing)**：指令中的位址欄位指向的暫存器中存放的是運算元的有效記憶體位址。位址空間大，但需要額外記憶體存取，速度較慢。
        *   **位移定址 (Displacement addressing)**：指令中包含一個位址和一個暫存器名稱，有效位址是兩者之和 (EA = A + [R])。存取位址有彈性，但較複雜。可分為相對定址、基底暫存器定址、索引定址。
        *   **堆疊定址 (Stack addressing)**：使用堆疊結構存取運算元，堆疊指標 SP 指向堆疊頂端。是一種隱含定址的操作方式，指令中不需包含記憶體位址。

*   **3-3 指令集**
    *   **指令集**是微處理機支援的指令集合。
    *   根據指令數量與複雜度，CPU 可分為 **複雜指令集電腦 (CISC)** 和 **精簡指令集電腦 (RISC)**。
    *   **CISC** 的主要特徵包括：指令數量眾多 (通常 100～250 個)，指令格式長度可變，提供可直接存取記憶體的指令，定址模式多樣性 (通常 5～20 種)。複雜指令集可以降低編譯器的複雜程度。
    *   **RISC** 的主要特徵包括：指令較少 (通常少於 100 個)，指令長度固定，解碼容易，常使用固線式控制電路，執行每一個指令通常只耗費一個時脈週期，定址模式較少 (一般不超過 5 個)，記憶體的存取只提供儲存與載入指令，所有微運算只在暫存器之間進行。RISC 有利於管線化。
    *   Intel CPU 指令概分為九大類，包括資料搬移、算術運算、邏輯運算、移位旋轉、流程控制、重複指令、字串處理、輸出入、CPU 控制等指令。

*   **3-4 高階語言與低階語言之轉換**
    *   微處理機只能執行 **機械碼 (machine code)**，即二進制碼。
    *   程式語言依據接近人類語言的程度可分為 **高階語言** 和 **低階語言**。
    *   **組合語言** 是一種低階語言，使用助憶符號來表示機械指令。
    *   **組譯器 (assembler)** 的功能是將組合語言程式翻譯成機械語言 (機械碼)。組合語言與機械語言通常是 **一對一** 的關係 (除了虛擬指令)。
    *   **虛擬指令 (或虛擬碼)** 是用來通知組譯器動作的資訊，與要執行的程式功能無關，例如 ORG、HLT、END、DEC 等。
    *   組合語言的格式通常由 **標記 (label)**、**指令 (instruction)** 和 **註解 (comment)** 三個欄位組成。
    *   組譯器的工作流程通常包含兩個回合 (雙回合組譯器):
        *   **第一回合**：指定程式中每一行指令的位址，並建立符號表 (記錄標記符號的位址)。
        *   **第二回合**：將指令轉譯為機械碼，處理虛擬指令，並產生目的程式和報表檔。
    *   組譯器產生的 **目的程式 (object code)** 通常需要透過 **連結程式 (linker)** 包裹成 **可執行檔案** 才能執行。
    *   **編譯器 (compiler)** 將高階語言程式碼一次翻譯成機械語言。
    *   **直譯器 (interpreter)** 則是一次翻譯一行高階語言程式碼，然後立即執行。

*   **3-5 微處理機軟體處理程序**
    *   微處理機系統的軟體部分可分為 **作業系統**、**系統軟體** 和 **應用軟體** 三類。
    *   **系統軟體** 提供開發、執行應用軟體所需的工具，包括編輯程式、組譯程式、編譯程式、連結程式、載入程式等。
    *   程式開發過程包括使用編輯程式撰寫原始程式，再透過編譯器 (高階語言) 或組譯器 (組合語言) 翻譯成目的程式，最後使用連結程式產生可執行檔。
    *   程式執行過程是當使用者執行可執行檔時，由作業系統的 **載入程式 (loader)** 將程式載入主記憶體，CPU 依序執行指令直到程式結束。
    *   **組譯器** 用於翻譯組合語言。
    *   **編譯器** 用於翻譯高階語言，產生目的檔，執行速度較快。
    *   **直譯器** 用於翻譯高階語言，逐行翻譯執行，易於偵錯但執行速度較慢，不產生目的檔。
