标题：指令系统
简介
指令系统是指计算机所能执行的全部指令的集  指令系统合，它描述了计算机内全部的控制信息和“逻辑判断”能力。不同计算机的指令系统包含的指令种类和数目也不同。一般均包含算术运算型、逻辑运算型、数据传送型、判定和控制型、移位操作型、位（位串）操作型、输入和输出型等指令。指令系统是表征一台计算机性能的重要因素，它的格式与功能不仅直接影响到机器的硬件结构，而且也直接影响到系统软件，影响到机器的适用范围。
一条指令就是机器语言的一个语句，它是一组有意义的二进制代码，指令的基本格式如：操作码字段+地址码字段，其中操作码指明了指令的操作性质及功能，地址码则给出了操作数或操作数的地址。[1-2]
发展历程
指令系统的发展经历了从简单到复杂的演变过程。早在20世纪50-60年代，计算机大多数采用分立元件的晶体管或电子管组成，其体积庞大，价格也很昂贵，因此计算机的硬件结构比较简单，所支持的指令系统也只有十几至几十条最基本的指令，而且寻址方式简单。
到60年代中期，随着集成电路的出现，计算机的功耗、体积、价格等不断下降，硬件功能不断增强，指  指令系统令系统也越来越丰富。
在70年代，高级语言己成为大、中、小型机的主要程序设计语言，计算机应用日益普及。由于软件的发展超过了软件设计理论的发展，复杂的软件系统设计一直没有很好的理论指导，导致软件质量无法保证，从而出现了所谓的“软件危机”。人们认为，缩小机器指令系统与高级语言语义差距，为高级语言提供很多的支持，是缓解软件危机有效和可行的办法。计算机设计者们利用当时已经成熟的微程序技术和飞速发展的VLSI技术，增设各种各样的复杂的、面向高级语言的指令，使指令系统越来越庞大。这是几十年来人们在设计计算机时，保证和提高指令系统有效性方面传统的想法和作法。[3]
指令格式
计算机的指令格式与机器的字长、存储器的容量及指令的功能都有很大的关系。从便于程序设计、增加基本操作并行性、提高指令功能的角度来看，指令中应包含多种信息。但在有些指令中，由于部分信息可能无用，这将浪费指令所占的存储空间，并增加了访存次数，也许反而会影响速度。因此，如何合理、科学地设计指令格式，使指令既能给出足够的信息，又使其长度尽可能地与机器的字长相匹配，以节省存储空间，缩短取指时间，提高机器的性能，这是指令格式设计中的一个重要问题。  精简指令系统计算结构(RISC)来设计芯片
计算机是通过执行指令来处理各种数据的。为了指出数据的来源、操作结果的去向及所执行的操作，一条指令必须包含下列信息：
（1）操作码。它具体说明了操作的性质及功能。一台计算机可能有几十条至几百条指令，每一条指令都有一个相应的操作码，计算机通过识别该操作码来完成不同的操作。（2）操作数的地址。CPU 通过该地址就可以取得所需的操作数。（3）操作结果的存储地址。把对操作数的处理所产生的结果保存在该地址中，以便再次使用。（4）下条指令的地址。执行程序时，大多数指令按顺序依次从主存中取出执行，只有在遇到转移指令时，程序的执行顺序才会改变。为了压缩指令的长度，可以用一个程序计数器（Program Counter，PC）存放指令地址。每执行一条指令，PC 的指令地址就自动 +1（设该指令只占一个主存单元），指出将要执行的下一条指令的地址。当遇到执行转移指令时，则用转移地址修改 PC 的内容。由于使用了 PC，指令中就不必明显地给出下一条将要执行指令的地址。
一条指令实际上包括两种信息即操作码和地址码。操作码（OperationCode，OP）用来表示该指令所要完成的操作（如加、减、乘、除、数据传送等），其长度取决于指令系统中的指令条数。地址码用来描述该指令的操作对象，它或者直接给出操作数，或者指出操作数的存储器地址或寄存器地址（即寄存器名）。  指令系统
一条指令就是机器语言的一个语句，它是一组有意义的二进制代码，指令的基本格式如：操作码字段地址码字段其中操作码指明了指令的操作性质及功能，地址码则给出了操作数或操作数的地址。
各计算机公司设计生产的计算机，其指令的数量与功能、指令格式、寻址方式、数据格式都有差别，即使是一些常用的基本指令，如算术逻辑运算指令、转移指令等也是各不相同的。因此，尽管各种型号计算机的高级语言基本相同，但将高级语言程序（例如 Fortran 语言程序）编译成机器语言后，其差别  指令系统也是很大的。因此将用机器语言表示的程序移植到其他机器上去几乎是不可能的。从计算机的发展过程已经看到，由于构成计算机的基本硬件发展迅速，计算机的更新换代是很快的，这就存在软件如何跟上的问题。大家知道，一台新机器推出交付使用时，仅有少量系统软件（如操作系统等）可提交用户，大量软件是不断充实的，尤其是应用程序，有相当一部分是用户在使用机器时不断产生的，这就是所谓第三方提供的软件。为了缓解新机器的推出与原有应用程序的继续使用之间的矛盾，1964 年在设计 IBM360 计算机时所采用的系列机思想较好地解决了这一问题。从此以后，各个计算机公司生产的同一系列的计算机尽管其硬件实现方法可以不同，但指令系统、数据格式、I/O 系统等保持相同，因而软件完全兼容（在此基础上，产生了兼容机）。当研制该系列计算机的新型号或高档产品时，尽管指令系统可以有较大的扩充，但仍保留了原来的全部指令，保持软件向上兼容的特点，即低档机或旧机型上的软件不加修改即可在比它高档的新机器上运行，以保护用户在软件上的投资。[4]
指令包括操作码域和地址域两部分。根据地址域所涉及的地址数量，常见的指令格式有以下几种。
①三地址指令：一般地址域中A1、A2分别确定第一、第二操作数地址,A3确定结果地址。下一条指令的地址通常由程序计数器按顺序给出。②二地址指令：地址域中A1确定第一操作数地址，A2同时确定第二操作数地址和结果地址。
③单地址指令：地址域中A 确定第一操作数地址。固定使用某个寄存器存放第二操作数和操作结果。因而在指令中隐含了它们的地址。
④零地址指令：在堆栈型计算机中，操作数一般存放在下推堆栈顶的两个单元中,结果又放入栈顶,地址均被隐含，因而大多数指令只有操作码而没有地址域。
⑤可变地址数指令：地址域所涉及的地址的数量随操作定义而改变。如有的计算机的指令中的地址数可少至 0个，多至6个。 [5]
性能要求
指令系统的性能决定了计算机的基本功能，它的设计直接关系到计算机的硬件结构和用户的需要。一个完善的指令系统应满足如下四方面的要求：　
完备性
指用汇编语言编写各种程序时，指令系统直接提供的指令足够使用，而不必用软件来实现。完备性要求指令系统丰富、功能齐全、使用方便。  指令系统
有效性
是指利用该指令系统所编写的程序能够高效率地运行。高效率主要表现在程序占据存储空间小、执行速度快。　
规整性
包括指令系统的对称性、匀齐性、指令格式和数据格式的一致性。对称性是指：在指令系统中所有的寄存器和存储器单元都可同等对待，所有的指令都可使用各种寻址方式；匀齐性是指：一种操作性质的指令可以支持各种数据类型；指令格式和数据格式的一致性是指：指令长度和数据长度有一定的关系，以方便处理和存取。　
兼容性
至少要能做到“向上兼容”，即低档机上运行的软件可以在高档机上运行。
寻址方式
根据指令内容确定操作数地址的过程称为寻址。完善的寻址方式可为用户组织和使用数据提供方便。
①直接寻址：指令地址域中表示的是操作数地址。
②间接寻址：指令地址域中表示的是操作数地址的地址即指令地址码对应的存储单元所给出的是地址A，操作数据存放在地址A指示的主存单元内。有的计算机的指令可以多次间接寻址,如A指示的主存单元内存放的是另一地址B，而操作数据存放在B指示的主存单元内，称为多重间接寻址。
③立即寻址：指令地址域中表示的是操作数本身。  指令系统④变址寻址：指令地址域中表示的是变址寄存器号i和位移值D。将指定的变址寄存器内容E与位移值D相加,其和E+D为操作数地址。许多计算机具有双变址功能，即将两个变址寄存器内容与位移值相加，得操作数地址。变址寻址有利于数组操作和程序共用。同时，位移值长度可短于地址长度，因而指令长度可以缩短。
⑤相对寻址：指令地址域中表示的是位移值D。程序计数器内容（即本条指令的地址）K与位移值D相加，得操作数地址K+D。当程序在主存储器浮动时，相对寻址能保持原有程序功能。 此外，还有自增寻址、自减寻址、组合寻址等寻址方式。寻址方式可由操作码确定，也可在地址域中设标志，指明寻址方式。[5]
种类
总况　
随着计算机系统结构的发展，有些计算机还不断引入新指令。如“测并置”指令是为在多机系统和多道程序中防止重入公用子程序而设置的。指令先测试标志位以判断该子程序是否正在使用。如未被使用，则转入子程序并置该标志位，以防其他进程重入。后来又出现功能更强的信号（PV操作）指令。有的计算机还设置“执行”指令。“执行“指令执行由地址域所确定的存储单元中的指令。其目的是避免用程序直接修改程序中的指令。这对程序的检查和流水线等技术的应用均有好处。有的计算机采用堆栈实现程序的调用指令和返回指令。调用时将返回地址和各种状态、参数压入堆栈顶部，这样就能较好地实现子程序的嵌套和递归调用，并可使子程序具有可重入性。另外，一些计算机使不少复杂的操作固定化，形成诸如多项式求值、队列插项、队列撤项和各种翻译、编辑等指令。 　
按功能划分
①数据处理指令：包括算术运算指令、逻辑运算指令、移位指令、比较指令等。
②数据传送指令：包括寄存器之间、寄存器与主存储器之间的传送指令等。
③程序控制指令：包括条件转移指令、无条件转移指令、转子程序指令等。
④输  指令系统入－输出指令：包括各种外围设备的读、写指令等。有的计算机将输入－输出指令包含在数据传送指令类中。
⑤状态管理指令：包括诸如实现置存储保护、中断处理等功能的管理指令。[5]
其他划分　
向量指令和标量指令：有些大型机和巨型机设置功能齐全的向量运算指令系统。向量指令的基本操作对象是向量,即有序排列的一组数。若指令为向量操作,则由指令确定向量操作  指令系统数的地址（主存储器起始地址或向量寄存器号），并直接或隐含地指定如增量、向量长度等其他向量参数。向量指令规定处理机按同一操作处理向量中的所有分量，可有效地提高计算机的运算速度。不具备向量处理功能，只对单个量即标量进行操作的指令称为标量指令。 
特权指令和用户指令：在多用户环境中，某些指令的不恰当使用会引起机器的系统性混乱。如置存储保护、中断处理、输入输出等这类指令，均称为特权指令，不允许用户直接使用。为此，处理机一般设置特权和用户两种状态，或称管（理）态和目（的）态。在特权状态下，程序可使用包括特权指令在内的全部指令。在用户状态下，只允许使用非特权指令，或称用户指令。用户如使用特权指令则会发生违章中断。如用户需要申请操作系统进行某些服务，如输入－输出等，可使用“广义指令”，或称为“进监督”、“访管”等的指令。[5]​
执行步骤
一条指令的执行过程按时间顺序可分为以下几个步骤。
① CPU发出指令地址。将指令指针寄存器（IP）的内容——指令地址，经地址总线送入存储器的地址寄存器中。
② 从地址寄存器中读取指令。将读出的指令暂存于存储器的数据寄存器中。
③ 将指令送往指令寄存器。将指令从数据寄存器中取出，经数据总线送入控制器的指令寄存器中。
④ 指令译码。指令寄存器中的操作码部分送指令译码器，经译码器分析产生相应的操作控制信号，送往各个执行部件。
⑤ 按指令操作码执行。
⑥ 修改程序计数器的值，形成下一条要取指令的地址。若执行的是非转移指令，即顺序执行，则指令指针寄存器的内容加1，形成下一条要取指令的地址。指令指针寄存器也称为程序计数器。[6]