1. 程式人生 > >一條指令在cpu中的執行流程

一條指令在cpu中的執行流程

幾乎所有的馮·諾伊曼型計算機的CPU,其工作都可以分為5個階段:取指令、指令譯碼、執行指令、訪存取數、結果寫回。

1.取指令階段

取指令(Instruction Fetch,IF)階段是將一條指令從主存中取到指令暫存器的過程。

程式計數器PC中的數值,用來指示當前指令在主存中的位置。當一條指令被取出後,PC中的數值將根據指令字長度而自動遞增:若為單字長指令,則(PC)+1àPC;若為雙字長指令,則(PC)+2àPC,依此類推。

2.指令譯碼階段

取出指令後,計算機立即進入指令譯碼(Instruction Decode,ID)階段。

在指令譯碼階段,指令譯碼器按照預定的指令格式,對取回的指令進行拆分和解釋,識別區分出不同的指令類別以及各種獲取運算元的方法。

在組合邏輯控制的計算機中,指令譯碼器對不同的指令操作碼產生不同的控制電位,以形成不同的微操作序列;在微程式控制的計算機中,指令譯碼器用指令操作碼來找到執行該指令的微程式的入口,並從此入口開始執行。

在傳統的設計裡,CPU中負責指令譯碼的部分是無法改變的。不過,在眾多運用微程式控制技術的新型CPU中,微程式有時是可重寫的,可以通過修改成品CPU來改變CPU的譯碼方式。

3.執行指令階段

在取指令和指令譯碼階段之後,接著進入執行指令(Execute,EX)階段。

此階段的任務是完成指令所規定的各種操作,具體實現指令的功能。為此,CPU的不同部分被連線起來,以執行所需的操作。

例如,如果要求完成一個加法運算,算術邏輯單元ALU將被連線到一組輸入和一組輸出,輸入端提供需要相加的數值,輸出端將含有最後的運算結果。

4.訪存取數階段

根據指令需要,有可能要訪問主存,讀取運算元,這樣就進入了訪存取數(Memory,MEM)階段。

此階段的任務是:根據指令地址碼,得到運算元在主存中的地址,並從主存中讀取該運算元用於運算。

5.結果寫回階段

作為最後一個階段,結果寫回(Writeback,WB)階段把執行指令階段的執行結果資料“寫回”到某種儲存形式:結果資料經常被寫到CPU的內部暫存器中,以便被後續的指令快速地存取;在有些情況下,結果資料也可被寫入相對較慢、但較廉價且容量較大的主存。許多指令還會改變程式狀態字暫存器中標誌位的狀態,這些標誌位標識著不同的操作結果,可被用來影響程式的動作。

在指令執行完畢、結果資料寫回之後,若無意外事件(如結果溢位等)發生,計算機就接著從程式計數器PC中取得下一條指令地址,開始新一輪的迴圈,下一個指令週期將順序取出下一條指令。

許多新型CPU可以同時取出、譯碼和執行多條指令,體現並行處理的特性。