指令集架構
指令集架構(英語:Instruction Set Architecture,縮寫為ISA),又稱指令集或指令集体系,是计算机体系结构中與程序設計有關的部分,包含了基本数据类型,指令集,寄存器,寻址模式,存储体系,中斷,異常處理以及外部I/O。指令集架構包含一系列的opcode即操作码(機器語言),以及由特定處理器执行的基本命令。
不同的处理器“家族”——例如Intel IA-32和x86-64、IBM/Freescale Power和ARM处理器家族——有不同的指令集架构。[1]
指令集体系与微架构(一套用于执行指令集的微处理器设计方法)不同。使用不同微架構的電腦可以共享一种指令集。例如,Intel的Pentium和AMD的AMD Athlon,兩者几乎採用相同版本的x86指令集体系,但是兩者在内部设计上有本质的区别。
一些虛擬機器支持基于Smalltalk,Java虛擬機,微軟的公共語言运行时虛擬機所生成的字节码,他們的指令集体系將bytecode(字节码)从作为一般手段的代码路径翻譯成本地的機器語言,并通过解译执行并不常用的代码路径,全美達以相同的方式开发了基于x86指令体系的VLIW處理器。
指令集的分类
复杂指令集计算机包含许多应用程序中很少使用的特定指令,由此产生的缺陷是指令长度不固定。精简指令集计算机通过只执行在程序中经常使用的指令来简化处理器的结构,而特殊操作则以子程序的方式实现,它们的特殊使用通过处理器额外的执行时间来弥补。理论上的重要类型还包括最小指令集计算机与单指令集计算机,但都未用作商业处理器。另外一种衍生类型是超长指令字,处理器接受许多经过编码的指令并通过检索提取出一个指令字并执行。
機器語言
機器語言是由声明和指令所組成的。在处理结构上,一個特定指令指明了以下几个部分:
複雜的操作可以藉由將簡單的指令合併而達成,可以(在冯·诺依曼体系中)連續的執行,也可以藉控制流來執行指令。
指令类型
有效的指令操作須包含:
- 数据處理與存储操作
- 將暫存器的值(在中央處理器作为高速缓存的存储空间)設為固定值;
- 將数据从存储空间中传送至寄存器,反之亦然。用于将数据取出并执行计算,或者将计算结果予以保存;
- 從硬體设备读取或寫入数据。
- 算术逻辑单元
- 控制流
複雜指令
一些電腦在他們的指令集架構內包含複雜指令。複雜指令包含:
- 將許多暫存器存成堆疊的形式。
- 移動記憶體內大筆的資料。
- 複雜或是浮點數運算(正弦,餘弦,平方根等等)
- 執行test-and-set指令。
- 執行數字存在記憶體而非暫存器的運算
有一種複雜指令單指令流多資料流(SIMD),或向量指令,這是一種可以在同一時間對多筆資料進行相同運算的操作。SIMD有能力在短時間內將大筆的向量和矩陣計算完成。SIMD指令使平行計算變得簡單,各種SIMD指令集被開發出來,例如MMX,3DNow!以及AltiVec。
指令的組成
在傳統的架構上,一條指令包含op code,表示運算的方式,以及零個或是更多的運算元,有些像是運算元的數字可能指的是暫存器的編號,還有記憶體位置,或是文字資料。
在超長指令字(VLIW)的結構中,包含了許多微指令,藉此將複雜的指令分解為簡單的指令。
指令的長度
指令長度的範圍可以說是相當廣泛,從微控制器的4 bit,到VLIW系統的數百bit。在個人電腦,大型電腦,超級電腦內的處理器,其內部的指令長度介於8到64 bits(在x86處理器結構內,最長的指令長達15 bytes,等於120 bits)。在一個指令集架構內,不同的指令可能會有不同長度。在一些結構,特別是大部分的精簡指令集(RISC),指令是固定的長度,長度對應到結構內一個字的大小。在其他結構,長度則是byte的整數倍或是一個halfword。
設計
對微處理器而言有兩種指令集。第一種是複雜指令集(Complex Instruction Set Computer),擁有許多不同的指令。在1970年代,許多機構,像是IBM,發現有許多指令是不需要的。結果就產生了精簡指令集(Reduced Instruction Set Computer),它所包含的指令就比較少。精簡的指令集可以提供比較高的速度,使處理器的尺寸縮小,以及較少的電力損耗。然而,比較複雜的指令集較容易使工作更完善,記憶體及缓存的效率較高,以及較為簡單的程式碼。
一些指令集保留了一個或多個的opcode,以執行系統調用或軟體中斷。
指令集的實作
在設計處理器內的微架構時,工程師使用藉電路連接的區塊來架構,區塊用來表示加法器,乘法器,計數器,暫存器,算術邏輯單元等等,暫存器傳遞語言通常被用來描述被解碼的指令,指令是藉由微架構來執行指令。 有兩種基本的方法來建構控制單元,藉控制單元,以微架構作為通路來執行指令:
- 早期的電腦和採用精簡指令集的電腦藉將電路接線(像是微架構剩下的部分)。
- 其他的裝置使用微程序來達成—像是電晶體ROM或PLA(即使RAM已使用很久)。
電腦微处理器的指令集架構(Instruction Set Architecture)常见的有三种:
- 复杂指令集运算(Complex Instruction Set Computing,CISC)
- 目前x86架构微处理器如Intel的Pentium/Celeron/Xeon与AMD的Athlon/Duron/Sempron;以及其64位扩展系统的x86-64架构的Intel 64的Intel Core/Core 2/Celeron/Pentium/Xeon与AMD64的Phenom II/Phenom/Athlon 64/Athlon II/Opteron/AMD APU/Ryzen/EPYC都属于复杂指令集。主要针对的操作系统是微软的Windows和苹果公司的macOS。另外Linux,一些UNIX等,都可以运行在x86(复杂指令集)架构的微处理器。
- 精简指令集运算(Reduced Instruction Set Computing,RISC)
- 这种指令集运算包括惠普的PA-RISC,国际商业机器的PowerPC,康柏(後被惠普收购)的Alpha,美普思科技公司的MIPS,SUN公司的SPARC,ARM公司的ARM架構等。目前有UNIX、Linux以及包括iOS、Android、Windows Phone等在内的大多数移动操作系统运行在精简指令集的处理器上。
- 顯式並行指令運算(Explicitly Parallel Instruction Computing,EPIC)
- 顯式並行指令運算乃先进的全新指令集运算,只有Intel的IA-64架构的纯64位微处理器的Itanium/Itanium 2。EPIC指令集运算的IA-64架构主要针对的操作系统是微软64位安腾版的Windows XP以及64位安腾版的Windows Server 2003。另外一些64位的Linux,一些64位的UNIX也可以运行IA-64(顯式並行指令運算)架构。
- 超長指令字指令集运算(VLIW)
- 通過將多條指令放入一個指令字,有效的提高了CPU各個計算功能部件的利用效率,提高了程序的性能
參考文獻
- ^ Randal E. Bryant; David R. O'Hallaron. Computer Systems A Programmer's Perspective Third. Pearson Education. 2016: 352.
延伸閱讀
- Bowen, Jonathan P. Standard Microprocessor Programming Cards 9 (6): 274–290. July–August 1985. doi:10.1016/0141-9331(85)90116-4.
外部連結
- Programming Textfiles: Bowen's Instruction Summary Cards
- Mark Smotherman's Historical Computer Designs Page (页面存档备份,存于互联网档案馆)
參見