指令集架构
指令集架构
微处理器的指令集架构(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,以执行系统调用或软件中断。
参考资料
目录
概述
指令集的实作
指令集的分类
机器语言
指令类型
复杂指令
指令的组成
指令的长度
设计
参考资料