歡迎來到電腦的心臟!

你好!在本章中,我們要深入電腦內部,一探它的「大腦」——中央處理器 (Central Processing Unit, CPU)。如果剛開始聽起來像科幻小說,別擔心。你可以把處理器想像成廚房裡一位速度極快、非常聽話的廚師。一旦你理解了這位廚師的工作方式,整台電腦的運作邏輯就變得清晰易懂了!

1. CPU 架構:基本藍圖

大多數現代電腦都遵循馮·紐曼架構 (Von Neumann Model)。這個架構之所以聞名,是因為它採用了儲存程式概念 (Stored Program Concept)。這簡單來說,就是指令(「食譜」)和數據(「食材」)都儲存在同一個記憶體中。

核心組件(CPU 團隊)

算術邏輯單元 (Arithmetic and Logic Unit, ALU): 這是計算機。它負責處理所有數學運算(例如 \( 2 + 2 \))和邏輯比較(例如A 是否大於 B?)。
控制單元 (Control Unit, CU): 「經理」。它負責協調 CPU 的所有活動,並發送訊號指示其他部分執行動作。
系統時鐘 (System Clock): 就像心跳一樣。它會發出脈衝訊號,讓所有運作保持同步。
即時存取儲存器 (Immediate Access Store, IAS): 這是記憶體的另一個名稱,指 CPU 可直接存取、存放當前所需數據和指令的地方。

暫存器 (Registers)(CPU 的「便利貼」)

暫存器是 CPU 內部極小且速度極快的儲存區域。當 CPU 正在處理資訊時,它們會暫時存放這些資訊。

你需要知道的特殊用途暫存器:
程式計數器 (Program Counter, PC): 存放下一個要提取的指令的記憶體位址
記憶體位址暫存器 (Memory Address Register, MAR): 存放目前正在讀取或寫入的記憶體位置的位址
記憶體數據暫存器 (Memory Data Register, MDR): 存放剛從記憶體讀取,或即將寫入記憶體的實際數據
現行指令暫存器 (Current Instruction Register, CIR): 存放當前正在解碼和執行的指令。
累加器 (Accumulator, ACC): 一個通用暫存器,用於儲存 ALU 的計算結果。
索引暫存器 (Index Register, IX): 用於「索引定址」(我們之後會學到!)。
狀態暫存器 (Status Register): 包含用來標示特定條件的「旗標」(bits),例如計算結果是否為負數或發生溢位錯誤。

記憶小撇步:PC 想像成書中的「下一頁」書籤,而 ACC 則是你的「工作桌」,上面放著你當前計算出的答案。

匯流排 (Buses)(高速公路)

資訊透過「匯流排」在各組件之間傳輸。
位址匯流排 (Address Bus): 傳輸數據的目的地或來源位址。它是單向的 (unidirectional)(只能從 CPU 到記憶體)。
數據匯流排 (Data Bus): 傳輸實際的數據。它是雙向的 (bidirectional)
控制匯流排 (Control Bus): 傳輸來自控制單元的訊號(例如「讀取」或「寫入」)。它也是雙向的

快速複習: 位址匯流排是唯一一個單向的!這是非常常見的考題。

影響效能的因素

為什麼有些電腦比其他電腦快?
1. 時脈速度 (Clock Speed): 每秒的「脈衝」越多,處理的指令就越多。
2. 匯流排寬度 (Bus Width): 較寬的數據匯流排可以一次傳輸更多位元(就像在高速公路上增加車道)。
3. 核心數量 (Number of Cores): 核心越多,CPU 就能同時處理更多任務。
4. 快取記憶體 (Cache Memory): CPU 內部的超高速記憶體。它儲存頻繁使用的數據,讓 CPU 不必等待較慢的主記憶體 (RAM)。

重點總結: CPU 在馮·紐曼架構下,使用暫存器來保存數據,使用匯流排來傳輸數據,並由控制單元來進行全盤管理。

2. 提取-執行 (F-E) 週期

這是電腦的「心跳」。這個週期每秒重複數十億次。

暫存器傳輸符號表示法 (Register Transfer Notation)

我們使用特殊的簡寫來表示數據如何移動。[PC] 表示「PC 中的內容」,箭頭 表示「移動到」。

提取階段 (Fetch Stage):

1. MAR ← [PC] (將 PC 中的位址複製到 MAR)。
2. PC ← [PC] + 1 (PC 加 1,指向下一個指令)。
3. MDR ← [[MAR]] (將 MAR 指定位址內的數據載入 MDR)。
4. CIR ← [MDR] (將 MDR 中的指令複製到 CIR)。

解碼與執行階段 (Decode and Execute Stages):

控制單元查看 CIR 中的指令以了解要做什麼(解碼),然後執行動作,例如將一個數字加到 ACC 中(執行)。

中斷 (Interrupts)

中斷是發送給 CPU 的訊號,表示有事情需要立即處理(例如印表機缺紙或按下了鍵盤按鍵)。
• 在每個 F-E 週期的末尾,CPU 都會檢查是否有中斷。
• 如果有,CPU 會儲存當前工作,並執行中斷服務常式 (Interrupt Service Routine, ISR)
• 當 ISR 完成後,CPU 會回到剛才中斷的地方繼續工作。

重點總結: F-E 週期就是提取(獲取指令)、解碼(理解指令)和執行(完成任務)。中斷可以暫停此週期以處理緊急任務。

3. 組合語言 (Assembly Language)

電腦只能理解機器碼 (Machine Code)(二進位:\( 10110010 \))。因為這對人類來說太難讀了,我們使用組合語言,它使用簡短的單字,稱為助記符 (mnemonics)(如 ADD, LDM, STO)。

定址模式 (Addressing Modes)

這是我們告訴 CPU 去哪裡 尋找數據的方式。
立即定址 (Immediate): 數值本身就是指令的一部分。(例如:LDM #5 表示「將數字 5 載入到 ACC」)。
直接定址 (Direct): 指令中給出的是記憶體位址。(例如:LDD 100 表示「去記憶體位址 100,取得裡面存放的內容」)。
間接定址 (Indirect): 給出的位址裡面存放的是另一個位址。(例如:「去位址 100,找到那裡的數字 200,然後去位址 200 取得數據」)。
索引定址 (Indexed):索引暫存器 (IX) 的內容加到給定的位址,以找到目標位址。這在查找清單時非常有用!
相對定址 (Relative): 位址是距離當前指令一定數量的位移量。

二階段組譯器 (Two-Pass Assembler)

組譯器 (Assembler) 將組合語言轉換為機器碼。它通常分兩次「掃描」完成:
1. 第一階段 (Pass 1): 尋找標籤 (Labels)(位址的符號名稱)並將它們儲存在符號表 (Symbol Table)中。
2. 第二階段 (Pass 2): 將助記符轉換為二進位,並使用第一階段建立的符號表填入正確的位址。

你知道嗎? 我們需要兩個階段,因為程式可能會指示電腦「跳轉到標籤 X」,但此時還沒讀到定義「標籤 X」的那一行!

重點總結: 組合語言是人類可讀版的機器碼。定址模式決定了 CPU 如何找到它所需的數據。

4. 位元操作 (Bit Manipulation)

有時我們只想更改或檢查位元組中的某一個位元。這時我們會使用邏輯移位 (Logical Shifts)遮罩 (Masking)

二進位移位

邏輯左移 (LSL): 將位元向左移動,右側補 0。(左移 1 位等於乘以 2!)。
邏輯右移 (LSR): 將位元向右移動,左側補 0。(右移 1 位等於除以 2)。
算術移位 (Arithmetic Shift): 與邏輯移位類似,但會保留「符號位元」(最左邊的位元),確保負數保持負數。
循環移位 (Cyclic Shift): 從一端移出的位元會繞回到另一端。不會遺失數據!

位元遮罩 (Bit Masking)

我們使用 AND, OR, 和 XOR 來處理特定位元。
與 0 進行 AND: 用於清除 (clear) 位元(強迫變為 0)。
與 1 進行 OR: 用於設定 (set) 位元(強迫變為 1)。
與 1 進行 XOR: 用於反轉 (flip) 位元。

類比: 遮罩就像繪畫時使用的模板。模板(遮罩)只允許油漆(運算)到達特定的位置。

重點總結: 移位用於乘除或移動數據。遮罩使用邏輯閘來更改或檢查特定位元。

總結:別緊張!

處理器基礎知識的核心在於 CPU 如何搬運數據。記得:
1. 暫存器是內部儲存空間。
2. 匯流排是道路。
3. F-E 週期是運作流程。
4. 組合語言是程式語言。
5. 位元操作是精細調整。

持續練習暫存器傳輸符號表示法和不同的定址模式——這些就是你攻克本章節的關鍵!