歡迎來到「電腦如何思考:儲存與執行指令」!
你有沒有想過,當你點擊滑鼠、輸入訊息或開啟最喜愛的遊戲時,電腦內部究竟發生了甚麼事?這看起來可能像變魔術一樣神奇,但在螢幕背後,電腦其實只是在依序執行數以百萬計名為指令(Instructions)的微小步驟。
在這份溫習筆記中,我們將會「揭開電腦的外殼」,探索指令如何儲存於記憶體內、電腦的處理器如何讀取它們,以及處理器如何每秒鐘執行這些指令數十億次。如果一開始覺得有點複雜,不用擔心——我們會用簡單的生活例子,逐步拆解每個概念!
---1. 核心概念:儲存程式概念(Stored Program Concept)
很久以前,早期的電腦每次要執行不同任務時,都必須由人工手動重新接駁電線。現代電腦聰明得多,全憑一個開創性的理念——儲存程式概念(Stored Program Concept),這亦是馮·紐曼架構(Von Neumann Architecture)的重要組成部分。
甚麼是儲存程式概念?
這項原則是指:程式指令與指令所使用的數據(Data),都會以二進制數字(即由 \(0\) 和 \(1\) 組成的序列)的形式,一同儲存在同一個主記憶體(RAM)之中。
生活比喻: 想像一本烹飪食譜。在同一頁紙上,你既能看到食材清單(即數據),又能看到一步步的烹調步驟(即指令)。你不需要兩本分開的書,兩者就並排記錄在同一個地方!
你知道嗎?
對電腦來說,指令和數據看起來是完全一樣的——它們都只是一長串由 \(0\) 和 \(1\) 組成的二進制編碼!電腦是根據讀取它們的方式和時間點,來分辨兩者的差別。
第 1 部分重點摘要:
現代電腦均以馮·紐曼架構為基礎,由單一中央處理器讀取以二進制形式一同儲存在 RAM 中的指令與數據。
---2. 硬件團隊:關鍵組件
要讓程式順暢運作,不同的電腦硬件組件就像一支訓練有素的運動隊伍般緊密合作。讓我們認識當中的關鍵成員:
A. 中央處理器(CPU)
CPU 是電腦的「大腦」或運算引擎。它的主要工作是不斷提取指令、解碼其含意並執行它們。CPU 內部包含幾個至關重要的部分:
• 控制單元(Control Unit, CU): 就像管弦樂團的指揮家。CU 負責管理指令的執行、對指令進行解碼以讓電腦明白要做甚麼,並發出控制訊號來協調整個電腦系統內的數據流動。
• 算術及邏輯運算單元(Arithmetic Logic Unit, ALU): 電腦的數學大師。ALU 負責執行兩大類工作:
1. 數學運算: 加法(\(+\))、減法(\(-\))、乘法(\(\times\))及除法(\(\div\))。
2. 邏輯比較: 利用邏輯判斷作出決定,例如 AND(與)、OR(或)、NOT(非),或者測試一個數值是否大於(\(>\))或等於(\(=\))另一個數值。
• 暫存器(Registers): CPU 內部極微小、速度極快的臨時儲存位置。它們用來存放微量的數據、記憶體位址,或正在處理中的當前指令(例如:程式計數器 Program Counter 負責追蹤下一個指令的位址,而累加器 Accumulator 則臨時存放運算結果)。
• 內部時鐘(Internal Clock): CPU 的「心跳」。它以恆定的頻率發出規律的電脈衝,以同步協調所有內部運作。時鐘頻率以赫茲(Hz)或吉赫(GHz)為單位計量。一個 \(3\text{ GHz}\) 的時鐘每秒鐘會跳動 \(30\text{ 億}\) 次!
B. 主記憶體(RAM – 隨機存取記憶體)
• RAM 是電腦高速、臨時的工作記憶體。
• 它負責存放作業系統、當前開啟的應用程式,以及 CPU 正在處理中的指令與數據。
• RAM 具易失性(Volatile): 這代表一旦關閉電腦電源,儲存在 RAM 內的所有內容都會立即消失!
C. 輔助儲存裝置(Secondary Storage,例如固態硬碟 SSD、傳統硬碟 HDD)
• 輔助儲存裝置(例如固態硬碟或傳統硬碟)具有非易失性(Non-volatile),意思是即使切斷電源,它仍能永久保存你的檔案、應用程式和遊戲。
• 當你想執行某個程式時,它會從輔助儲存裝置複製到 RAM 中,以便 CPU 能夠快速存取。
書桌比喻:
• 輔助儲存裝置 就像你的書包(放學回家後,書本仍穩妥永久地儲存在裡面)。
• RAM 就像攤開的書桌面(只放置你當前正在閱讀或書寫的作業簿)。
• CPU 就像你的大腦(負責閱讀、思考和書寫)。
第 2 部分重點摘要:
CPU(包含 CU、ALU、暫存器及時鐘)負責處理指令。它從 RAM(高速、臨時、具易失性的記憶體)中提取執行中的程式,而檔案則長期儲存在輔助儲存裝置(非易失性)中。
---3. 一條指令由甚麼組成?
所有指令都必須轉換成二進制機器語言編碼(Machine Code,由 \(0\) 和 \(1\) 組成的模式),CPU 才能理解。一條機器語言指令通常分為兩個不同部分:
1. 操作碼(Opcode / Operation Code): 告訴 CPU 要執行甚麼操作(例如:`ADD` 相加、`LOAD` 載入 或 `STORE` 儲存)。
2. 操作數(Operand): 告訴 CPU 要使用甚麼數據,或者指出存放該數據的 RAM 記憶體位址。
日常語言比喻:
試想想一個簡單的英文句子:"KICK THE BALL"(踢那個球):
• "KICK"(踢) 就是操作碼(你需要執行的動作)。
• "THE BALL"(那個球) 就是操作數(動作所施加的對象或數據)。
第 3 部分重點摘要:
每條基本 CPU 指令均由操作碼(Opcode,指令/操作本身)和操作數(Operand,要進行運算的數據值或記憶體位址)組成。
---4. 提取—解碼—執行(FDE)循環
CPU 實際上是如何執行指令的?它會不斷重複一個名為「提取—解碼—執行循環」(Fetch–Decode–Execute Cycle)的三步循環。這個循環每秒鐘不間斷地運行數十億次!
第 1 步:提取(FETCH)
• CPU 檢查下一條指令的記憶體位址(由名為程式計數器的暫存器負責追蹤)。
• 指令透過內部連線,從 RAM 被提取到 CPU 內部的暫存器中。
• CPU 更新計數器以指向下一條指令的位址,為下一個循環做好準備。
第 2 步:解碼(DECODE)
• 控制單元(CU) 檢查並分析所提取的指令。
• 它將指令拆解為操作碼和操作數,以確定需要採取甚麼行動(例如:「這是一個加法運算嗎?我們需要從記憶體載入數據嗎?」)。
第 3 步:執行(EXECUTE)
• CPU 執行指令所要求的動作!
• 這可能代表 ALU 進行一次運算、從 RAM/暫存器讀取或寫回數據,或者 CPU 跳轉到另一條新指令。
接著會怎樣? 這個循環會立即針對下一條指令重複進行:提取 \(\rightarrow\) 解碼 \(\rightarrow\) 執行 \(\rightarrow\) 不斷循環!
記憶小貼士: 記住 F-D-E 的順序口訣:「Fast Dogs Explore」 或 「Fetch, Decode, Execute」(提取、解碼、執行)!
第 4 部分重點摘要:
CPU 依循永無止境的三步循環運作:提取(Fetch,從 RAM 取得指令)、解碼(Decode,由 CU 分析指令含意)及執行(Execute,落實指令操作)。
---5. 常見誤解與應避免的錯誤
千萬不要因為常見的錯誤觀念而失分!以下是學生最常犯的錯誤:
• 錯誤 1:「CPU 儲存了你所有的相片和電玩遊戲。」
更正: 除了極微小的臨時暫存器外,CPU 幾乎沒有任何儲存容量。永久檔案都儲存在輔助儲存裝置(如 SSD 或傳統硬碟)中。
• 錯誤 2:「RAM 會永遠儲存你的工作檔案。」
更正: RAM 具易失性。一旦電源切斷,RAM 裡的所有內容都會消失。這就是為甚麼你必須點擊「儲存」,將工作複製到非易失性的輔助儲存裝置中!
• 錯誤 3:「指令和數據分別儲存在不同種類的硬件中。」
更正: 根據儲存程式概念,指令和數據均以二進制數字形式,一同存放在同一個 RAM 之中。
• 錯誤 4:「控制單元(CU)負責進行運算。」
更正: ALU(算術及邏輯運算單元)負責處理所有數學及邏輯運算。CU(控制單元)只負責解碼指令及指揮數據訊號的流向。
快速溫習清單
透過以下簡短問題,測試一下你的理解程度:
1. 當程式正在運行時,指令存放在哪裡?
答案:存放在主記憶體(RAM)中。
2. 機器語言指令由哪兩個部分組成?
答案:操作碼(Opcode,動作)及操作數(Operand,數據或記憶體位址)。
3. CPU 內部的哪一個組件負責進行數學運算與邏輯比較?
答案:算術及邏輯運算單元(ALU)。
4. CPU 處理循環的三個階段是甚麼?
答案:提取(Fetch)、解碼(Decode)及執行(Execute)。
5. 為甚麼 RAM 被稱為「易失性」記憶體?
答案:因為當電源關閉時,它所儲存的所有內容都會遺失。