組合語言與 CPU

取指—解碼—執行週期

把 CPU 剝到只剩它唯一不斷重複的心跳,你會發現它永遠在跑的一個小迴圈。無論機器在算遊戲畫面還是閒置在登入提示符前,跑的都是同一個迴圈。這個迴圈就是取指—解碼—執行週期,是儲存程式電腦取得進展的基本節奏。

週期的一輪有三步。取指:讀取程式計數器所存位址上的指令,並把程式計數器推進到越過它。解碼:控制單元搞清楚那條指令是什麼、運算元是什麼。執行:把它做出來——讓運算元穿過 ALU、讀或寫某個暫存器或記憶體,或者若是分支,就把新位址寫進程式計數器。然後週期從取指重新開始,這時已指向下一條指令。因為程式計數器通常只是往前一步,指令便依序執行;因為分支能在執行期重寫它,程式便能迴圈與做決策。

這個迴圈就是「執行一支程式」的字面意義:沒有更高階的魔法,只有每秒數十億輪的取指—解碼—執行。這是運轉中的范紐曼機器,也是這裡其他一切的根基——暫存器是執行步驟讀寫的對象,旗標是比較設定、分支查詢的東西,堆疊在 push 或 call 的執行期間移動。真實的 CPU 為了速度會把這些步驟在許多指令間同時重疊(管線化),但可見的結果就如同每條指令都在下一條開始前一輪內完成。

對 add rax, rbx,CPU 取出指令(推進 rip),解碼為「暫存器加暫存器」,再執行——把 rax 與 rbx 送過 ALU 並把總和存回 rax。

取指、解碼、執行、重複——這個迴圈就是「執行一支程式」的字面意義。

工整的三步模型是教學上的抽象:現代 CPU 會管線化、亂序並平行地執行指令,所以任一瞬間都有許多指令在途中。它們保證的是「逐一、依序完成」的表象——而非內部真的就那樣發生。

又稱
instruction cyclefetch-execute cyclemachine cycle指令週期取指—執行週期