歡迎來到電腦的心臟!
在本章中,我們將探索中央處理器(Central Processing Unit,簡稱 CPU)。你可以把 CPU 想像成電腦的「大腦」。就像你的大腦接收感官資訊並指揮身體作出反應一樣,CPU 會接收數據、進行處理,並告訴其他硬體該做什麼。
如果一開始覺得某些組件名稱聽起來像外語,不必擔心。當你讀完這些筆記後,你會發現 CPU 其實只是一個運作極快、非常有條理,且不斷重複執行簡單步驟的機器。
1. 處理器的內部組件
處理器並非單一的區塊,它是由幾個相互協作的專門組件所組成。以下是你需要認識的幾位主角:
算術邏輯單元 (ALU)
ALU 是 CPU 中的「數學家」。它主要執行兩類任務:
1. 算術運算: 加、減、乘、除等數學運算。
2. 邏輯運算: 進行比較,例如檢查一個數字是否「大於」另一個數字,或是使用 AND、OR 和 NOT 邏輯閘。
控制單元 (CU)
如果把 CPU 比作廚房,控制單元就是主廚。它不負責「烹飪」(那是 ALU 的工作),但它負責協調一切。它會向處理器的其他部分發送控制訊號,指揮它們何時讀取數據、何時寫入數據,以及下一步該執行什麼指令。
系統時鐘 (System Clock)
時鐘就像一個節拍器。它會持續發出電訊脈衝。時鐘每「滴答」一聲,CPU 就能完成任務的一個步驟。時鐘頻率越快,CPU 每秒能處理的指令就越多。
暫存器 (Registers):CPU 的「便利貼」
暫存器是 CPU 內部極小且速度極快的儲存位置。由於它們位於處理器內部,訪問速度遠比主記憶體(RAM)快得多。你可以把 RAM 想像成放在另一個房間的巨大書架,而暫存器則是拿在你手上的便利貼。
通用暫存器與專用暫存器
通用暫存器 (General-Purpose Registers): CPU 在進行計算時,用來暫存數據(例如儲存加法運算的結果)。
專用暫存器 (Dedicated Registers): 這些暫存器有特定的職責。你必須學會以下這五個:
1. 程式計數器 (Program Counter, PC): 儲存下一個要獲取的指令的位址**。
2. 現行指令暫存器 (Current Instruction Register, CIR): 儲存當前**正在解碼和執行的指令。
3. 記憶體位址暫存器 (Memory Address Register, MAR): 儲存 CPU 需要讀取或寫入的記憶體位置的位址**。
4. 記憶體緩衝暫存器 (Memory Buffer Register, MBR): 也稱為記憶體數據暫存器。它存放剛從記憶體獲取,或即將發送到記憶體的數據**或指令。
5. 狀態暫存器 (Status Register, SR): 儲存一些「旗標」(flags),用來向 CPU 反映運算結果(例如結果是否為負數,或是否發生了錯誤)。
重點總結: ALU 負責運算,CU 負責指揮交通,而暫存器則為特定任務提供閃電般的存儲空間。
2. 提取-執行週期 (Fetch-Execute Cycle)
CPU 在一個稱為提取-執行週期 (Fetch-Execute Cycle) 的連續循環中運作。它每秒會進行數十億次這樣的過程。
步驟拆解:
1. 提取 (Fetch):
- PC 中的位址被複製到 MAR。
- CPU 向 RAM 發送訊號以尋找該位址。
- 該位址中的指令被傳送到 MBR。
- PC 會遞增(加 1),以便為下一個指令做好準備。
- 指令從 MBR 移動到 CIR。
2. 解碼 (Decode):
- 控制單元查看 CIR 中的指令,並判斷其含義(例如:「這是 ADD 還是 STORE 指令?」)。
3. 執行 (Execute):
- 執行該指令。這可能涉及 ALU 進行計算,或是數據在暫存器之間的移動。
快速複習:
PC -> MAR -> MBR -> CIR。這就是指令進入「大腦」並被理解的路徑!
3. 處理器指令集
指令集 (Instruction Set) 是特定處理器能夠理解的所有指令的完整集合。每個 CPU 都有其獨特的「詞彙」。
指令的結構
機器碼指令通常由兩個部分組成:
1. 操作碼 (Opcode): 「做什麼」。這是要執行的操作(如 ADD、LOAD 或 STOP)。它還包含了定址模式 (Addressing Mode)。
2. 運算數 (Operand): 「在哪裡/對誰」。這是被使用的數據,或是數據所在的記憶體位址。
定址模式
CPU 如何知道運算數中的數字是一個實際值還是一個位址呢?它會查看定址模式**:
- 立即定址 (Immediate Addressing): 運算數本身就是要使用的實際數值。(例如:ADD 5 意味著將數字 5 加進去)。
- 直接定址 (Direct Addressing): 運算數是儲存該數值的記憶體位址。(例如:ADD 5 意味著前往記憶體位置 5,查看該處的數字,然後將其加進去)。
你知道嗎? 電腦只懂 1 和 0。當我們寫下 ADD 時,電腦實際看到的是像 0110 這樣的二進制模式。這被稱為機器碼 (Machine Code)。
重點總結: 操作碼 = 動詞(要做什麼);運算數 = 名詞(對什麼做)。
4. 常見機器碼操作
你應該熟悉組合語言中常用的這些基本操作:
- LOAD: 從記憶體中取出數值並放入暫存器。
- STORE: 從暫存器中取出數值並儲存到記憶體中。
- ADD/SUBTRACT: 使用 ALU 進行數學運算。
- BRANCH (條件式/非條件式): 跳轉到程式的不同部分。
- COMPARE: 檢查兩個值是否相等。
- HALT: 停止程式。
5. 影響處理器效能的因素
為什麼高階遊戲 PC 比舊款筆電快?這受到幾個因素影響:
時鐘速度 (Clock Speed)
單位為 赫茲 (Hz)。3GHz 的處理器每秒有 30 億次時鐘滴答。時鐘速度越快,每秒處理的指令就越多。
核心數量 (Number of Cores)
「核心」基本上就是一個完整的 CPU。雙核心 (Dual-core) 處理器擁有兩個「大腦」,可以同時處理兩個不同的任務(平行運算)。
快取記憶體 (Cache Memory)
快取 (Cache) 是 CPU 內部少量速度極快的記憶體。它儲存你經常使用的數據,這樣 CPU 就不必等待速度較慢的 RAM。
字組長度 (Word Length)
CPU 作為一個單位可以處理的位元數量。64 位元 CPU 一次能處理比 32 位元 CPU 更大的數字和更多的記憶體位址。
匯流排寬度 (Bus Width)
匯流排是組件之間傳輸數據的「高速公路」。
- 位址匯流排 (Address Bus): 若越寬,CPU 就能訪問更多的記憶體位置。
- 數據匯流排 (Data Bus): 若越寬,CPU 一次能移動的數據就越多(就像為高速公路增加更多車道一樣)。
常見誤區: 增加核心數量並不總是讓速度倍增。有些軟體並未設計為能同時使用多個核心!
重點總結: 要讓 CPU 更快,你可以讓它的「心跳」更快(時鐘速度)、給它更多「大腦」(核心)、給它更好的「短期記憶」(快取),或是提供更寬的「路」來傳輸數據(匯流排寬度)。