理論上說,應(yīng)用程序里的指令可以分成用于向操作系統(tǒng)請求特定的服務(wù)和中央處理器(CPU)的指令集。CPU操作指令的處理流程大概分為:取指、譯碼、執(zhí)行、訪存、寫回等幾步;每條指令需要1~6個字節(jié)不等,這取決于需要哪些字段。
理論上說,應(yīng)用程序里的指令可以分成中央處理器(CPU)的指令集以及用于向操作系統(tǒng)請求特定的服務(wù)這兩類。
中央處理器(CPU,Central Processing Unit)是一塊超大規(guī)模的集成電路,是一臺計算機的運算核心(Core)和控制核心( Control Unit)。它的功能主要是解釋計算機指令以及處理計算機軟件中的數(shù)據(jù)。
中央處理器主要包括運算器(算術(shù)邏輯運算單元,ALU,Arithmetic Logic Unit)和高速緩沖存儲器(Cache)及實現(xiàn)它們之間聯(lián)系的數(shù)據(jù)(Data)、控制及狀態(tài)的總線(Bus)。它與內(nèi)部存儲器(Memory)和輸入/輸出(I/O)設(shè)備合稱為電子計算機三大核心部件。
CPU操作指令的處理流程大概分為:取指、譯碼、執(zhí)行、訪存、寫回等幾步。每條指令需要1~6個字節(jié)不等,這取決于需要哪些字段。每條指令的第一個字節(jié)表明指令的類型:高4位是代碼部分(例:6為整數(shù)類操作指令),低4位是功能部分(例:1為整數(shù)類中的減法指令) 61合起來即為sub指令。
處理指令流程
指令集的一個重要性質(zhì)就是字節(jié)編碼必須有唯一的解釋。任意一個字節(jié)序列要么是一個唯一的指令序列的編碼,要么就不是一個合法的字節(jié)序列。因為每條指令的第一個字節(jié)有唯一的代碼和功能組合,給定這個字節(jié),我們就可以決定所有其他附加字節(jié)的長度和含義。
每條指令需要1~6個字節(jié)不等,這取決于需要哪些字段。每條指令的第一個字節(jié)表明指令的類型:高4位是代碼部分(例:6為整數(shù)類操作指令),低4位是功能部分(例:1為整數(shù)類中的減法指令) 61合起來即為sub指令。
下面是處理每條指令的流程圖:
取指(fetch)
取值階段從存儲器讀取指令字節(jié),放到指令存儲器(CPU中)中,地址為程序計數(shù)器(PC)的值。它按順序的方式計算當(dāng)前指令的下一條指令的地址(即PC的值加上已取出指令的長度)。
譯碼(decode)
ALU從寄存器文件(通用寄存器的集合)讀入最多兩個操作數(shù)。(即一次最多讀取兩個寄存器中的內(nèi)容)
執(zhí)行(execute)
在執(zhí)行階段會根據(jù)指令的類型,將算數(shù)/邏輯單元(ALU)用于不同的目的。對其他指令,它會作為一個加法器來計算增加或減少棧指針,或者計算有效地址,或者只是簡單地加0,將一個輸入傳遞到輸出。
條件碼寄存器(CC)有三個條件位。ALU負(fù)責(zé)計算條件碼新值。當(dāng)執(zhí)行一條跳轉(zhuǎn)指令時,會根據(jù)條件碼和跳轉(zhuǎn)類型來計算分支信號cnd。
訪存(memory)
訪存階段,數(shù)據(jù)存儲器(CPU中)讀出或?qū)懭胍粋€存儲器字。指令和數(shù)據(jù)存儲器訪問的是相同的存儲器位置,但是用于不同的目的。
寫回(write back)
寫回階段最多可以寫兩個結(jié)果到寄存器文件。寄存器文件有兩個寫端口。端口E用來寫ALU計算出來的值,而端口M用來寫從數(shù)據(jù)存儲器中讀出的值。
更新PC(PC update)
根據(jù)指令代碼和分支標(biāo)志,從前幾步得出的信號值中,選出下一個PC的值。