基礎:機器模型

取指─執行週期(概覽)

一塊矽晶片是怎麼「執行」程式的?不是靠理解它,而是靠每秒重複一個微小的儀式數十億次。這個儀式就是取指─執行週期:從記憶體取出下一條指令、弄清楚它說什麼、照做、然後繼續。一台現代電腦,本質上就是這個迴圈以驚人速度旋轉著。

走一遍迴圈的一圈。一個叫做程式計數器的特殊暫存器,存著下一條指令的記憶體位址。CPU 從那個位址取出位元組。它解碼這些位元組——算出它們編碼的是哪個操作、牽涉哪些資料。它執行——把兩個數相加、複製一個值、做比較,或跳到別處。然後把程式計數器推進到下一條指令(除非指令本身改變了要去哪裡,迴圈與判斷正是這樣運作的),再重新開始。沒有任何魔法:每一步都只是搬移與轉換數字。

概覽層面為何重要:這個迴圈是你寫的抽象程式與實體機器之間的橋樑。理解到 CPU 永遠只做「取指─解碼─執行」,能把整個堆疊去神秘化——它說明了為何程式不過是記憶體裡的指令、為何無窮迴圈會卡住(週期永遠到不了新東西),以及為何 if 與 while 這類流程控制,最終都化為調整程式計數器的指令。真實的 CPU 為了速度會把這些步驟管線化並重疊執行,但這個簡單迴圈仍是最該先建立的第一張圖。

粗略地說,要執行 x = a + b,CPU 取出一條「載入 a」指令並執行、取出「載入 b」並執行、取出「相加」並執行、取出「存入 x」並執行——繞迴圈四趟,每趟都把程式計數器往前推。

一行原始碼,化成好幾圈的取指─執行。

這是用來定位方向的圖像,不是完整的機制。真實處理器會預先取出許多指令、亂序執行、並在管線中讓各階段重疊——但邏輯上每條指令看起來仍是先取指、再解碼、再執行。

又稱
instruction cyclefetch-decode-execute cycle指令週期取指─解碼─執行週期