理論上說,應用程式裡的指令可以分成用於向作業系統請求特定的服務和中央處理器(CPU)的指令集。 CPU操作指令的處理流程大概分為:取指、譯碼、執行、訪問、寫回等幾步;每條指令需要1~6個位元組不等,取決於需要哪些欄位。
本文操作環境:windows10系統、thinkpad t480電腦。
理論上說,應用程式裡的指令可以分成中央處理器(CPU)的指令集以及用於向作業系統請求特定的服務這兩類。
中央處理器(CPU,Central Processing Unit)是一塊超大規模的積體電路,是電腦的運算核心(Core)和控制核心( Control Unit)。它的功能主要是解釋電腦指令以及處理電腦軟體中的資料。
中央處理器主要包括運算元(算術邏輯運算單元,ALU,Arithmetic Logic Unit)和高速緩衝記憶體(Cache)及實現它們之間聯繫的資料(Data)、控制及狀態的匯流排( Bus)。它與內部記憶體(Memory)和輸入/輸出(I/O)設備合稱為電子電腦三大核心元件。
CPU操作指令的處理流程大概分為:取指、譯碼、執行、訪存、寫回等幾步。每條指令需要1~6個位元組不等,這取決於需要哪些欄位。每條指令的第一個位元組表示指令的類型:高4位是代碼部分(例:6為整數類操作指令),低4位是功能部分(例:1為整數類中的減法指令) 61合起來即為sub指令。
處理指令流程
指令集的一個重要性質就是位元組編碼必須有唯一的解釋。任意一個位元組序列要麼是一個唯一的指令序列的編碼,要麼就不是一個合法的位元組序列。因為每條指令的第一個位元組有唯一的程式碼和功能組合,給定這個位元組,我們就可以決定所有其他附加位元組的長度和意義。
每條指令需要1~6個位元組不等,取決於需要哪些欄位。每條指令的第一個位元組表示指令的類型:高4位是代碼部分(例:6為整數類操作指令),低4位是功能部分(例:1為整數類中的減法指令) 61合起來即為sub指令。
下面是處理每個指令的流程圖:
#取指(fetch)
取值階段從記憶體讀取指令位元組,放到指令記憶體(CPU中)中,位址為程式計數器(PC)的值。它按順序的方式計算當前指令的下一指令的位址(即PC的值加上已取出指令的長度)。
譯碼(decode)
ALU從暫存器檔案(通用暫存器的集合)讀入最多兩個運算元。 (即一次最多讀取兩個暫存器中的內容)
執行(execute)
在執行階段會根據指令的類型,將算數/邏輯單元( ALU)用於不同的目的。對其他指令,它會作為一個加法器來計算增加或減少棧指針,或者計算有效地址,或者只是簡單地加0,將一個輸入傳遞到輸出。
條件碼暫存器(CC)有三個條件位元。 ALU負責計算條件碼新值。當執行一條跳轉指令時,會根據條件碼和跳躍型別來計算分支訊號cnd。
存取(memory)
訪存階段,資料記憶體(CPU中)讀出或寫入一個記憶體字。指令和資料記憶體存取的是相同的記憶體位置,但是用於不同的目的。
寫回(write back)
寫回階段最多可以寫兩個結果到暫存器檔案。暫存器檔案有兩個寫入埠。埠E用來寫ALU計算出來的值,而連接埠M用來寫從資料記憶體讀取的值。
更新PC(PC update)
根據指令碼和分支標誌,從前幾步得出的訊號值中,選出下一個PC的值。
以上是應用程式裡的指令可以分成向作業系統請求特定的服務和什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!