微處理器的指令集架構(Instruction Set 建筑,ISA)是計算機體系結構中與程序設計有關的部分,包含了基本數據類型,指令集,寄存器,尋址模式,存儲體系,中斷,異常處理以及外部I/O。指令集架構包含一系列的操作碼(opcode),以及由特定處理器執行的基本命令。
不同的處理器“家族”如英特爾 IA-32和x86-64、IBM/飛思卡爾 Power和ARM處理器家族擁有不同的指令集架構。指令集體系與微架構(一套用于執行指令集的微處理器設計方法)不同,使用不同微架構的電腦可以共享一種指令集。例如,Intel的Pentium和AMD的AMD Athlon,兩者幾乎采用相同版本的x86指令集體系,但是兩者在內部設計上有本質的區別。
指令集的實作
在設計處理器內的微架構時,工程師使用藉電路連接的區塊來架構,區塊用來表示加法器,乘法器,計數器,暫存器,算術邏輯單元等等。暫存器傳遞語言通常被用來描述被解碼的指令,指令是借由微架構來執行指令。有兩種基本的方法來建構控制單元,藉控制單元,以微架構作為通路來執行指令:早期的電腦和采用精簡指令集的電腦藉將電路接線(像是微架構剩下的部分)。其他的裝置使用微程序來達成—像是晶體管ROM或PLA(即使RAM已使用很久)。
指令集的分類
復雜指令集計算機(CISC)包含許多應用程序中很少使用的特定指令,由此產生的缺陷是指令長度不固定。精簡指令集計算機(RISC)通過只執行在程序中經常使用的指令來簡化處理器的結構,而特殊操作則以子程序的方式實現,它們的特殊使用通過處理器額外的執行時間來彌補。理論上的重要類型還包括最小指令集計算機與單指令集計算機,但都未用作商業處理器。另外一種衍生類型是超長指令字(VLIW),處理器接受許多經過編碼的指令并通過檢索提取出一個指令字并執行。
機器語言
機器語言是由聲明和指令所組成的。在處理結構上,一個特定指令指明了以下幾個部分:用于算術運算,尋址或者控制功能的特定寄存器;特定存儲空間的地址或偏移量;用于解譯操作數的特定尋址模式;復雜的操作可以借由將簡單的指令合并而達成,可以(在約翰·馮·諾依曼體系中)連續的執行,也可以藉控制流來執行指令。
指令類型
有效的指令操作須包含數據處理與存儲操作,算術邏輯單元的運算,以及控制流的指令。這些操作包括將寄存器的值設為固定值,數據的傳送,從硬件設備讀取或寫入數據,執行算術運算和位操作,以及程序的分支和條件分支等。
復雜指令
一些電腦在他們的指令集架構內包含復雜指令,如將許多寄存器存成堆疊的形式,移動內存內大筆的資料,復雜或是浮點數運算(正弦曲線,余弦,平方根等等),執行test-and-set指令,以及執行數字存在內存而非寄存器的運算。有一種復雜指令單指令流多資料流(SIMD),或向量指令,這是一種可以在同一時間對多筆資料進行相同運算的操作。SIMD有能力在短時間內將大筆的向量和矩陣計算完成。SIMD指令使平行計算變得簡單,各種SIMD指令集被開發出來,例如mmx,3DNow!以及AltiVec。
指令的組成
在傳統的架構上,一條指令包含操作碼(op code),表示運算的方式,以及零個或是更多的操作數,有些像是操作數的數字可能指的是寄存器的編號,還有內存位置,或是文字資料。
指令的長度
指令長度的范圍可以說是相當廣泛,從微控制器的4 刨刀,到VLIW系統的數百bit。在個人電腦,大型電腦,超級電腦內的處理器,其內部的指令長度介于8到64 bits(在x86處理器結構內,最長的指令長達15 bytes,等于120 bits)。在一個指令集架構內,不同的指令可能會有不同長度。在一些結構,特別是大部分的精簡指令集(RISC),指令是固定的長度,長度對應到結構內一個字的大小。在其他結構,長度則是字節的整數倍或是一個halfword。
設計
對微處理器而言有兩種指令集。第一種是復雜指令集(CISC),擁有許多不同的指令。在1970年代,許多機構,像是IBM,發現有許多指令是不需要的。結果就產生了精簡指令集(RISC),它所包含的指令就比較少。精簡的指令集可以提供比較高的速度,使處理器的尺寸縮小,以及較少的電力損耗。然而,比較復雜的指令集較容易使工作更完善,內存及CPU緩存的效率較高,以及較為簡單的程式碼。一些指令集保留了一個或多個的opcode,以執行系統調用或軟件中斷。
參考資料 >