本條目存在以下問題 ,請協助
改善本條目 或在
討論頁 針對議題發表看法。
此條目
內容自相矛盾 。 (2024年2月19日 ) 請在讨论页 討論問題所在及加以改善。
指令集架構 (英語: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 處理器。
指令集的分类
复杂指令集计算机 包含许多应用程序中很少使用的特定指令,由此产生的缺陷是指令长度不固定。精简指令集计算机 通过只执行在程序中经常使用的指令来简化处理器的结构,而特殊操作则以子程序的方式实现,它们的特殊使用通过处理器额外的执行时间来弥补。理论上的重要类型还包括最小指令集计算机 与单指令集计算机 ,但都未用作商业处理器。另外一种衍生类型是超长指令字 ,处理器接受许多经过编码的指令并通过检索提取出一个指令字并执行。
機器語言
機器語言是由声明 和指令 所組成的。在处理结构上,一個特定指令指明了以下几个部分:
用于算术运算,寻址或者控制功能的特定寄存器 ;
特定存储空间的地址或偏移量;
用于解译操作数的特定寻址模式 ;
複雜的操作可以藉由將簡單的指令合併而達成,可以(在冯·诺依曼体系 中)連續的執行,也可以藉控制流 來執行指令。
指令类型
有效的指令操作須包含:
数据處理與存储操作
將暫存器 的值(在中央處理器作为高速缓存的存储空间)設為固定值;
將数据从存储空间中传送至寄存器,反之亦然。用于将数据取出并执行计算,或者将计算结果予以保存;
從硬體设备读取或寫入数据。
算术逻辑单元
對兩個儲存於暫存器的數字進行add ,subtract ,multiply ,divide ,將結果放到一個暫存器內,一個或是更多的状态码 可能被設置在狀態暫存器 中;
执行位操作 ,藉對兩組數字(為兩串的數字,都由零與一構成,分別儲存於兩個暫存器內)執行邏輯與 和邏輯或 ,或者对寄存器的每一位執行邏輯非 操作;
比較 兩个寄存器中的数据(例如是大于或者相等);
控制流
分支 ,跳跃至程序某地址并执行相应指令;
条件分支 ,假設某一條件成立,就跳到程序的另一個位置;
間接分支 ,在跳到另一個位置之前,將現在所執行的指令的下一個指令的位置儲存起來,作為子程式 執行完返回的地址;
複雜指令
一些電腦在他們的指令集架構內包含複雜指令。複雜指令包含:
有一種複雜指令單指令流多資料流 (SIMD ),或向量指令 ,這是一種可以在同一時間對多筆資料進行相同運算的操作。SIMD 有能力在短時間內將大筆的向量和矩陣計算完成。SIMD 指令使平行計算 變得簡單,各種SIMD 指令集被開發出來,例如MMX ,3DNow! 以及AltiVec 。
指令的組成
一條指令往往有好幾個區塊,這些區塊包含要做的運算(加或減),可能還包含資料的原始或是目的地位置,以及常數。圖中的MIPS「Add Immediate」指令允許使用者選擇哪個暫存器是資料來源以及哪一個暫存器是要存運算後的結果,還有一個常數
在傳統的架構上,一條指令包含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(顯式並行指令運算)架构。
通過將多條指令放入一個指令字,有效的提高了CPU各個計算功能部件的利用效率,提高了程序的性能
參考文獻
延伸閱讀
外部連結
參見
x86 汇编器与汇编语言
相关话题 汇编器 使用汇编语言编程