指令集
Last updated
Last updated
计算机指令就是指挥机器工作的指示和命令,程序就是一系列按一定顺序排列的指令,执行程序的过程就是计算机的工作过程。指令集,就是CPU中用来计算和控制计算机系统的一套指令的集合,而每一种新型的CPU在设计时就规定了一系列与其他硬件电路相配合的指令系统。而指令集的先进与否,也关系到CPU的性能发挥,它也是CPU性能体现的一个重要标志。每款CPU在设计时就规定了一系列与其硬件电路相配合的指令系统。指令的强弱也是CPU的重要指标,指令集是提高微处理器效率的最有效的工具之一。从现阶段的主流体系结构讲,指令集可分为和两部分。
类 型:x86、MIPS、Sparc、Alpha、ARM
在计算机中,指示计算机硬件执行某种运算、处理功能的命令称为指令。指令是计算机运行的最小的功能单位,而硬件的作用是完成每条指令规定的功能。一台计算机上全部指令的集合,就是这台计算机的指令系统。指令系统也称指令集,是这台计算机全部功能的体现。而人们设计计算机首要考虑的是它拥有的功能,也就是首先要按功能档次设计指令集,然后按指令集的要求在硬件上实现。指令系统不仅仅是指令的集合,还包括全部指令的指令格式、寻址方式和数据形式。所以,各计算机执行的指令系统不仅决定了机器所要求的能力,而且也决定了指令的格式和机器的结构。反过来说,不同结构的机器和不同的指令格式应该具有与之相匹配的指令系统。为此,设计指令系统时,要对指令格式、类型及操作功能给予应有的重视。软件是为了使用计算机而编写的各种系统和用户的程序,程序由一个序列的计算机指令组成。从这个角度上说,指令是用于设计程序的一种计算机语言单位 。
计算机的指令系统是指一台计算机上全部指令的集合,也称计算机的指令集。指令系统包括指令格式、寻址方式和数据形式。一台计算机的指令系统反映了该计算机的全部功能,机器类型不同,其指令系统也不同,因而功能也不同。指令系统的设置和机器的硬件结构密切相关,一台计算机要有较好的性能,必须设计功能齐全、通用性强、内含丰富的指令系统,这就需要复杂的硬件结构来支持 。
常见的指令集有:Intel的x86,EM64T,MMX,SSE,SSE2,SSE3,SSSE3 (Super SSE3),SSE4A,SSE4.1,SSE4.2,AVX,AVX2,AVX-512,VMX等指令集;和AMD的x86,x86-64,3D-Now!指令集。
由于并没有带来3D游戏性能的显著提升,1999年Intel公司在CPU产品中推出了数据流单指令序列扩展指令(SSE)。SSE兼容MMX指令,它可以通过SIMD(单指令多数据技术)和单时钟周期并行处理多个浮点来有效地提高浮点运算速度。在MMX指令集中,借用了浮点处理器的8个寄存器,这样导致了浮点运算速度降低。而在SSE指令集推出时,Intel公司在Pentium III CPU中增加了8个128位的SSE指令专用寄存器。而且SSE指令寄存器可以全速运行,保证了与浮点运算的并行性。
在Pentium 4 CPU中,Intel公司开发了新指令集SSE2。这一次新开发的SSE2指令一共144条,包括浮点SIMD指令、整形SIMD指令、SIMD浮点和整形数据之间转换、数据在MMX寄存器中转换等几大部分。其中重要的改进包括引入新的数据格式,如:128位SIMD整数运算和64位双精度浮点运算等。为了更好地利用高速缓存。另外,在Pentium 4中还新增加了几条缓存指令,允许程序员控制已经缓存过的数据。
相对于SSE2,SSE3又新增加了13条新指令,此前它们被统称为pni(prescott new instructions)。13条指令中,一条用于视频解码,两条用于线程同步,其余用于复杂的数学运算、浮点到整数转换和SIMD浮点运算。
Intel公司的EM64T(Extended Memory 64 Technology)即64位内存扩展技术。该技术为服务器和工作站平台应用提供扩充的内存寻址能力,拥有更多的内存地址空间,可带来更大的应用灵活性,特别有利于提升音频视频编辑、CAD设计等复杂工程软件及游戏软件的应用。常说的64位指的是AMD公司出的64位CPU,而EM64T则是Intel公司按照自己的意思理解出来的64位,也就是和AMD公司的64位对应的另一种叫法。
Intel AVX指令集在SIMD计算性能增强的同时也沿用了的MMX/SSE指令集。不过MMX/SSE的不同点在于增强的AVX指令,从指令的格式上就发生了很大的变化。x86 (IA-32/Intel 64)架构的基础上增加了prefix (Prefix),所以实现了新的命令,也使更加复杂的指令得以实现,从而提升了x86 CPU的性能。AVX并不是x86 CPU的扩展指令集,可以实现更高的效率,同时和CPU硬件兼容性也好,并且也有着足够的扩展空间,这都和其全新的命令格式系统有关。更加流畅的架构就是AVX发展的方向,换言之,就是摆脱传统x86的不足,在SSE指令的基础上AVX也使SSE指令接口更加易用。针对AVX的最新的命令编码系统,Intel也给出了更加详细的介绍,其中包括了大幅度扩充指令集的可能性。比如Sandy Bridge所带来的融合了乘法的双指令支持。从而可以更加容易地实现512bits和1024bits的扩展。而在2008年末到2009年推出的meniikoa CPU“Larrabee (LARAB)”处理器,就会采用AVX指令集。从地位上来看AVX也开始了Intel处理器指令集的新篇章。
机器语言是由声明和指令所组成的。在处理结构上,一个特定指令指明了以下几个部分:
特定存储空间的地址或偏移量;
有效的指令操作须包含:
数据处理与存储操作
将数据从存储空间中传送至寄存器,反之亦然。用于将数据取出并执行计算,或者将计算结果予以保存;
从硬件设备读取或写入数据。
比较两个寄存器中的数据(例如是大于或者相等);
一些电脑在他们的指令集架构内包含复杂指令。复杂指令包含:
将许多寄存器存成堆栈的形式。
移动存储器内大笔的资料。
运行数字存在存储器而非寄存器的运算
早期的电脑和采用精简指令集的电脑藉将电路接线(像是微架构剩下的部分)。
通过将多条指令放入一个指令字,有效的提高了CPU各个计算功能部件的利用效率,提高了程序的性能
SSE4又增加了50条新的增加性能的指令,这些指令有助于编译、媒体、字符/文本处理和程序指向加速。将作为Intel公司未来“显著视频增强”平台的一部分。该平台的其他视频增强功能还有Clear Video技术(CVT)和统一显示接口(UDI)支持等,其中前者是对ATi AVIVO技术的回应,支持高级解码、后处理和增强型3D功能。
3D Now!指令集是AMD公司1998年开发的多媒体扩展指令集,共有21条指令。针对MMX指令集没有加强浮点处理能力的弱点,重点提高了AMD公司K6系列CPU对3D图形的处理能力。由于指令有限,3D Now!指令集主要用于3D游戏,而对其他商业图形应用处理支持不足。3DNow!+指令集:在原有的指令集基础上,增加到52条指令,其中包含了部分,该指令集主要用于新型的CPU上。
要知道什么是指令集,要从的CPU说起。X86指令集是Intel为其第一块16位CPU(i8086)专门开发的,IBM1981年推出的世界第一台PC机中的CPU—i8088(i8086简化版)使用的也是X86指令,同时电脑中为提高浮点数据处理能力而增加的X87芯片系列则另外使用X87指令,以后就将X86指令集和X87指令集统称为X86指令集。虽然随着CPU技术的不断发展,Intel陆续研制出更新型的i80386、i80486,但为了保证电脑能继续运行以往开发的各类应用程序以保护和继承丰富的软件资源,所以Intel公司所生产的所有CPU仍然继续使用X86指令集,所以它的CPU仍属于X86系列。由于Intel X86系列及其兼容CPU都使用X86指令集,所以就形成了庞大的X86系列及兼容CPU阵容。
是以后高性能的发展方向。它与传统的CISC()相对。相比而言,RISC的指令格式统一,种类比较少,寻址方式也比复杂指令集少。使用的体系结构主要有ARM、。MIPS 指令集是最早实现商用的(RISC)之一,上个世纪80年代初由斯坦福大学的研究小组研发,并在1984年成立MIPS计算机公司 [3] 。随后MIPS 成为上世纪90年代最流行的指令集,一度与 x86 和ARM 指令集齐名。RISC具有设计更简单、设计周期更短等优点,并可以应用更多先进的技术,开发更快的下一代处理器。MIPS是出现最早的商业RISC架构芯片之一,新的架构集成了所有原来MIPS指令集,并增加了许多更强大的功能。随着移动互联网的兴起,MIPS 指令集逐渐衰落,公司也多次辗转被收购。
指令集架构(英语:Instruction Set Architecture,缩写为ISA),又称指令集或指令集体系,是中与有关的部分,包含了,指令集,,,,,以及外部。指令集架构包含一系列的即操作码(),以及由特定处理器执行的基本命令。
不同的处理器“家族”——例如 和、/Freescale Power和处理器家族——有不同的指令集架构。
指令集体系与(一套用于执行指令集的微处理器设计方法)不同。使用不同微架构的电脑可以共享一种指令集。例如,的和的,两者几乎采用相同版本的指令集体系,但是两者在内部设计上有本质的区别。
一些虚拟机支持基于,,微软的虚拟机所生成的,他们的指令集体系将bytecode(字节码)从作为一般手段的代码路径翻译成本地的机器语言,并通过解译执行并不常用的代码路径,以相同的方式开发了基于x86指令体系的处理器。
包含许多应用程序中很少使用的特定指令,由此产生的缺陷是指令长度不固定。通过只执行在程序中经常使用的指令来简化处理器的结构,而特殊操作则以子程序的方式实现,它们的特殊使用通过处理器额外的执行时间来弥补。理论上的重要类型还包括与,但都未用作商业处理器。另外一种派生类型是,处理器接受许多经过编码的指令并通过检索提取出一个指令字并执行。
用于算术运算,寻址或者控制功能的特定;
用于解译操作数的特定;
复杂的操作可以借由将简单的指令合并而达成,可以(在中)连续的运行,也可以藉来运行指令。
将的值(在中央处理器作为高速缓存的存储空间)设为固定值;
对两个存储于寄存器的数字进行add,subtract,multiply,divide,将结果放到一个寄存器内,一个或是更多的可能被设置在中;
执行,藉对两组数字(为两串的数字,都由零与一构成,分别存储于两个寄存器内)运行和,或者对寄存器的每一位运行操作;
,跳跃至程序某地址并执行相应指令;
,假设某一条件成立,就跳到程序的另一个位置;
,在跳到另一个位置之前,将现在所运行的指令的下一个指令的位置存储起来,作为运行完返回的地址;
复杂或是浮点数运算(,,等等)
运行指令。
有一种复杂指令,英文全名是Single-Instruction Stream Multiple-Data Stream。或是,这是一种可以在同一时间对多笔资料进行相同运算的操作。SIMD有能力在短时间内将大笔的向量和矩阵计算完成。SIMD指令使变得简单,各种SIMD指令集被开发出来,例如,以及。
一条指令往往有好几个区块,这些区块包含要做的运算(加或减),可能还包含资料的原始或是目的地位置,以及常量。图中的MIPS“Add Immediate”指令允许用户选择哪个寄存器是数据源以及哪一个寄存器是要存运算后的结果,还有一个常量
在传统的架构上,一条指令包含,表示运算的方式,以及零个或是更多的,有些像是操作数的数字可能指的是的编号,还有存储器位置,或是文字资料。
在(VLIW)的结构中,包含了许多,借此将复杂的指令分解为简单的指令。
指令长度的范围可以说是相当广泛,从的4 bit,到系统的数百bit。在,,内的处理器,其内部的指令长度介于8到64 bits(在x86处理器结构内,最长的指令长达15 bytes,等于120 bits)。在一个指令集架构内,不同的指令可能会有不同长度。在一些结构,特别是大部分的(RISC),指令是固定的长度,长度对应到结构内一个的大小。在其他结构,长度则是的整数倍或是一个。
对微处理器而言有两种指令集。第一种是(Complex Instruction Set Computer),拥有许多不同的指令。在1970年代,许多机构,像是IBM,发现有许多指令是不需要的。结果就产生了(Reduced Instruction Set Computer),它所包含的指令就比较少。精简的指令集可以提供比较高的速度,使处理器的尺寸缩小,以及较少的电力损耗。然而,比较复杂的指令集较容易使工作更完善,存储器及的效率较高,以及较为简单的代码。
一些指令集保留了一个或多个的opcode,以运行或。
在设计处理器内的时,工程师使用藉电路连接的区块来架构,区块用来表示加法器,乘法器,计数器,寄存器,算术逻辑单元等等,通常被用来描述被解码的指令,指令是借由微架构来运行指令。 有两种基本的方法来建构,藉控制单元,以微架构作为通路来运行指令:
其他的设备使用来达成—像是晶体管ROM或PLA(即使RAM已使用很久)。
电脑的指令集架构(Instruction Set Architecture)常见的有三种:
(Complex Instruction Set Computing,CISC)
目前架构微处理器如的//与的//;以及其64位扩展系统的架构的Intel 64的////与AMD64的///////都属于复杂指令集。主要针对的操作系统是的和的。另外,一些UNIX等,都可以运行在x86(复杂指令集)架构的微处理器。
(Reduced Instruction Set Computing,RISC)
这种指令集运算包括惠普的PA-RISC,的,(后被收购)的Alpha,公司的MIPS,SUN公司的SPARC,ARM公司的等。目前有UNIX、Linux以及包括iOS、Android、Windows Phone等在内的大多数移动操作系统运行在精简指令集的处理器上。
(Explicitly Parallel Instruction Computing,EPIC)
显式并发指令运算乃先进的全新指令集运算,只有Intel的架构的纯64位微处理器的/。EPIC指令集运算的IA-64架构主要针对的操作系统是微软64位安腾版的以及64位安腾版的。另外一些64位的Linux,一些64位的UNIX也可以运行IA-64(显式并发指令运算)架构。
(VLIW)