中央處理器操作指令

中央處理器操作指令

中央處理器(CPU,Central Processing Unit)是一塊超大規模的積體電路,是一台計算機的運算核心(Core)和控制核心( Control Unit)。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的值。

工作過程

CPU從存儲器或高速緩衝存儲器中取出指令,放入指令暫存器,並對指令解碼。它把指令分解成一系列的微操作,然後發出各種控制命令,執行微操作系列,從而完成一條指令的執行。指令是計算機規定執行操作的類型和運算元的基本命令。指令是由一個位元組或者多個位元組組成,其中包括操作碼欄位、一個或多個有關運算元地址的欄位以及一些表征機器狀態的狀態字以及特徵碼。有的指令中也直接包含運算元本身。

提取

第一階段,提取,從存儲器或高速緩衝存儲器中檢索指令(為數值或一系列數值)。由程式計數器(Program Counter)指定存儲器的位置。(程式計數器保存供識別程式位置的數值。換言之,程式計數器記錄了CPU在程式里的蹤跡。)

解碼

CPU根據存儲器提取到的指令來決定其執行行為。在解碼階段,指令被拆解為有意義的片段。根據CPU的指令集架構(ISA)定義將數值解譯為指令。一部分的指令數值為運算碼(Opcode),其指示要進行哪些運算。其它的數值通常供給指令必要的信息,諸如一個加法(Addition)運算的運算目標。

執行

在提取和解碼階段之後,緊接著進入執行階段。該階段中,連線到各種能夠進行所需運算的CPU部件。

例如,要求一個加法運算,算術邏輯單元(ALU,Arithmetic Logic Unit)將會連線到一組輸入和一組輸出。輸入提供了要相加的數值,而輸出將含有總和的結果。ALU內含電路系統,易於輸出端完成簡單的普通運算和邏輯運算(比如加法和位元運算)。如果加法運算產生一個對該CPU處理而言過大的結果,在標誌暫存器里可能會設定運算溢出(Arithmetic Overflow)標誌。

寫回

最終階段,寫回,以一定格式將執行階段的結果簡單的寫回。運算結果經常被寫進CPU內部的暫存器,以供隨後指令快速存取。在其它案例中,運算結果可能寫進速度較慢,但容量較大且較便宜的主記憶體中。某些類型的指令會操作程式計數器,而不直接產生結果。這些一般稱作“跳轉”(Jumps),並在程式中帶來循環行為、條件性執行(透過條件跳轉)和函式。許多指令會改變標誌暫存器的狀態位元。這些標誌可用來影響程式行為,緣由於它們時常顯出各種運算結果。例如,以一個“比較”指令判斷兩個值大小,根據比較結果在標誌暫存器上設定一個數值。這個標誌可藉由隨後跳轉指令來決定程式動向。在執行指令並寫回結果之後,程式計數器值會遞增,反覆整個過程,下一個指令周期正常的提取下一個順序指令。

CPU指令集

CPU指令集主要有:MMX、SSE、SSE2、SSE3、3DNow!、AMD64、EM64T等。

MMX:MMX(Multi Media eXtension 多媒體擴展指令)指令集是Intel公司在1996年為旗下的Pentium系列處理器所開發的一項多媒體指令增強技術。MMX指令集中包括了57條多媒體指令,通過這些指令可以一次性處理多個數據,在處理結果超過實際處理能力的時候仍能夠進行正常處理,如果在軟體的配合下,可以得到更強的處理性能。

使用MMX指令集的好處就是當時所使用的作業系統可以在不做任何改變的情況下執行MMX指令。但是,MMX指令集的問題也是比較明顯的,MMX指令集不能與X86的浮點運算指令同時執行,必須做密集式的交錯切換才可以正常執行,但是這樣一來,就會造成整個系統運行速度的下降。

SSE:SSE是Streaming SIMD Extension(SIMD擴展指令集)的縮寫,而其中SIMD的為含意為Single Istruction Multiple Data(單指令多數據),所以SSE指令集也叫單指令多數據流擴展。該指令集最先運用於Intel的Pentium III系列處理器,其實在Pentium III推出之前,Intel方面就已經泄漏過關於KNI(Katmai New Instruction)指令集的訊息。這個KNI指令集也就是SSE指令集的前身,當時也有不少的媒體將該指令集稱之為MMX2指令集,但是Intel方面卻從沒有發布有關MMX2指令集的訊息。

最後在Intel推出Pentium III處理器的時候,SSE指令集也終於水落石出。SSE指令集是為提高處理器浮點性能而開發的擴展指令集,它共有70條指令,其中包含提高3D圖形運算效率的50條SIMD浮點運算指令、12條MMX 整數運算增強指令、8條最佳化記憶體中的連續數據塊傳輸指令。理論上這些指令對當時流行的圖像處理、浮點運算、3D運算、多媒體處理等眾多多媒體的套用能力起到全面提升的作用。

SSE指令與AMD公司的3DNow!指令彼此互不兼容,但SSE包含了3DNow!中的絕大部分功能,只是實現的方法不同而已。SSE也向下兼容MMX指令,它可以通過SIMD和單時鐘周期並行處理多個浮點數據來有效地提高浮點運算速度。

3DNow!:3DNow!指令集最由AMD公司所推出的,該指令集應該是在SSE指令之前推出的,被廣泛運用於AMD的K6、K6-2和K7系列處理器上,擁有21條擴展指令集。在整體上3DNow!的SSE非常相相似,它們都擁有8個新的暫存器,但是3DNow!是64位的,而SSE是128位。所以3DNow!它只能存儲兩個浮點數據,而不是四個。

但是它和SSE的側重點有所不同,3DNow!指令集主要針對三維建模、坐標變換和效果渲染等3D數據的處理,在相應的軟體配合下,可以大幅度提高處理器的3D處理性能。AMD公司後來又在Athlon系列處理器上開發了新的Enhanced 3DNow!指令集,新的增強指令數達了52個,以致目前最為流行的Athlon 64系列處理器還是支持3DNow!指令的。

SSE2:在PentiumIII發布的時候,SSE指令集就已經集成在了處理器的內部,但因為各種原因一直沒有得到充分的發展。直到Pentium 4發布之後,開發人員看到使用SSE指令之後,程式執行性能將得到極大的提升,於是Intel又在SSE的基礎上推出了更先進的SSE2指令集。

SSE2包含了144條指令,由兩個部分組成:SSE部分和MMX部分。SSE部分主要負責處理浮點數,而MMX部分則專門計算整數。SSE2的暫存器容量是MMX暫存器的兩倍,暫存器存儲數據也增加了兩倍。在指令處理速度保持不變的情況下,通過SSE2最佳化後的程式和軟體運行速度也能夠提高兩倍。由於SSE2指令集與MMX指令集相兼容,因此被MMX最佳化過的程式很容易被SSE2再進行更深層次的最佳化,達到更好的運行效果。

SSE2對於處理器的性能的提升是十分明顯的,雖然在同頻率的情況下,Pentium 4和性能不如Athlon XP,但由於Athlon XP不支持SSE2,所以經過SSE2最佳化後的程式Pentium 4的運行速度要明顯高於Athlon XP。而AMD方面也注意到了這一情況,在隨後的K-8系列處理器中,都加入SSE2指令集。

SSE3:SSE3指令是目前規模最小的指令集,它只有13條指令。它共劃分為五個應運層,分別為數據傳輸命令、數據處理命令、特殊處理命令、最佳化命令、超執行緒性能增強五個部分,其中超執行緒性能增強是一種全新的指令集,它可以提升處理器的超執行緒的處理能力,大大簡化了超執行緒的數據處理過程,使處理器能夠更加快速的進行並行數據處理。 上面介紹的基本上就是Intel和AMD公司在X86架構處理器上主要的擴展指令集,雖然它們對於處理器的性能提升有著一定程度的幫助,但是由於受到IA-32體系的限制,X86架構基本上不會再有具有革命性意義的指令集出現,而雙方都已經把重心轉向了64位體系架構的處理器指令集開發上。

AMD64:AMD的athlon 64系列處理器的64位技術是在X86指令集的基礎上加入了X86-64的64位擴展X86指令集,這就使得athlon 64系列處理器可兼容原來的32位的X86軟體,並同時支持X86-64的擴展64位計算,並且具有64位的定址能力,使得它成為真正的64位X86構架處理器。在採用X86-64架構的Athlon 64處理器中,X86-64指令集中新增了幾組處理器暫存器,它能夠提供更加快速的執行效率。

暫存器是處理器用來創建和儲存CPU運算結果和其他運算結果的地方,標準的X86構架中包括8組通用暫存器,而在AMD的X86-64架構中又增加了8組,將通過暫存器的數目提高到了16組。在這基礎之上,X86-64指令集還另外增加了8組128位的XMM暫存器,也叫做SSE暫存器。

它能夠給單指令多數據流技術(SIMD)運算提供更多的存儲空間,這些128位的暫存器能夠提供在矢量和標量計算模式下進行128位雙精度處理,這也為3D數據處理、矢量分析和虛擬技術提供了良好的硬體基礎。由於提供了更多的暫存器,按照X86-64標準生產的處理器可以更有效率的處理數據,在一個時鐘周期內能夠傳輸更多的信息。

EM64T :EM64T(Extended Memory 64 Technology)也就是Intel公司開發的64位記憶體擴展技術。它實際上就是Intel IA-32構架體系的擴展,即IA-32E(Intel Architectur-32 Extension)。Intel的IA-32處理器通過加入EM64T技術便可在兼容IA-32軟體的情況下,允許軟體程式利用更多的記憶體地址空間,並且允許程式進行32 位線性地址寫入   。

相關詞條

熱門詞條

聯絡我們