一台计算机的指令系统可能包含上百条指令,按其不同特征,存在着不同的分类方法。不同类型的计算机,其指令系统也差别很大。由于采用的分类特征不同,各机器的指令系统也有不同的分类方法。
多数指令系统支持的指令操作类型
| 操作系统 | 举例 |
|---|---|
| 算数和逻辑运算 | 定点算数和逻辑操作:加、减、与、或、乘、除等 |
| 数据传送 | 数据传送类指令;RISC中的Load与store指令等 |
| 程序控制 | 条件转移、无条件转移、子程序调用和返回、自中断等 |
| 系统 | 操作系统调用、虚拟存储器管理指令等 |
| 浮点 | 浮点操作:加、减、乘、除、比较等 |
| 十进制 | 十进制加、十进制乘、十进制到字符的转换等 |
| 字符串 | 字符串传送、字符串比较、字符串匹配等 |
| 图像 | 像素、顶点操作、压缩/解压缩操作等 |
一、算数和逻辑运算类指令
几乎所有的计算机都设置加、减、比较、位移等最基本的定点运算指令。性能稍强一点的机器,还设置定点乘、除运算指令。
一般计算机中设置的逻辑运算指令有:逻辑与、逻辑或、逻辑非(求反)和异或4种。有些计算机设置有专门位操作指令,如位测试、位清除、位设置等;而有些计算器则通过逻辑运算指令实现位操作。
移位操作指令通常也归入运算类指令,具体分为算术移位、逻辑移位和循环移位,可以实现对操作数左移、右移一位或若干位。
算数逻辑运算指令除了给出运算结果外,往往还要产生一些状态信息,如运算结果为正、负、全零或是否溢出等,由CPU的状态寄存器记录下来,可作为条件转移指令的判断条件。对于未设置某种运算指令的机器,如果要实现这种运算,则可以通过程序方式来实现。
二、数据传送类指令
这类指令将数据从一个地方传送到另一个地方,可用来实现寄存器与寄存器、寄存器与主存单元,以及主存单元与主存单元之间的数据传送,而且纯数据传送具有“复制”性质,即数据从源地址传送到目的地址时,源地址中的数据保持不变。
数据传送指令在特殊情况下可以按位传送,一般则按字节、字、数据块传送。有的计算机中还设置有数据交换指令,完成源操作数与目的操作数的互换,这可以看成双向数据传送。
输入/输出(I/O)类指令完成主机与外围设备之间的信息传送,包括输入/输出数据、主机向外设发控制命令或了解外设的工作状态等。因此,I/O指令可以归入数据传送类。在实际机器中,有的机器的I/O操作就是由传送类指令实现的,但有的机器将I/O操作单独列为一类。通常输入/输出指令有三种设置方式:
①设置专用的I/O指令
②用通用的数据传送指令实现I/O操作
③通过I/O处理机执行I/O操作
三、程序控制类指令
这类指令可以控制程序执行的顺序和顺序程序的执行方向,并使程序具有测试、分析与判断的能力。因此,它们是指令系统中一组非常重要的指令,主要包括转移指令、循环控制指令、子程序调用和返回指令、程序自中断指令。
1. 转移指令
在多数情况下,程序中的指令是按顺序一条接一条执行的。但在某些情况下,计算机需要对某些条件或状态进行判断,根据判断结果来决定程序如何执行。转移指令就是来实现程序的分支的。
按转移的性质,转移指令分为无条件转移指令与条件转移指令两种。
无条件转移指令:将改变指令的常规顺序,不受任何条件约束,直接把程序转移到该指令指向的任何地址(指令地址)开始执行。
条件转移指令:需先测试某些条件,仅当条件满足时,才执行转移,否则只相当于一条空操作指令,不改变程序执行顺序。
2. 循环控制指令
有了条件转移指令可以实现循环程序设计。但有的机器为了提高指令系统的有效性,还专门设置了循环控制指令,它包括对循环控制变量的操作和脱离循环条件的控制,是一种具有符合功能的指令。
3. 子程序调用和返回指令
对于一些需要重复使用并能独立完成某种特定功能的程序段,通常将其单独编程成子程序,在需要时由主程序调用它们,而不必多次重复编写,这样即简化了程序设计过程又节省了存储空间。
执行子程序调用指令时,首先将下一条指令地址(即断点)压入堆栈保存,然后转入所调用的子程序执行。子程序执行完毕,由返回指令把调用子程序时压入的返回地址从堆栈中弹出,以返回调用程序。
堆栈的“后进先出”顺序正好支持实现多重转子和递归调用。
4. 程序自中断指令
通常,中断是因计算机内部突发事件或外围设备请求而随机产生的,但在有的机器中,为了在程序调试中设置断点或实现系统调用功能,设置了自中断指令。执行该类程序时,按中断方式将处理机断点与现场保存在堆栈中(这点与一般的转子程序不同),然后转向对应的中断处理子程序入口开始执行,执行完毕后,通过中断返回指令返回到原程序断点继续执行。由于自中断指令是由软件驱动的,所以又称为软中断。
四、系统类指令(特权指令)
特权指令是指具有特殊权限的指令,它们只能用于操作或其他软件系统,一般不直接提供给用户使用。
通常在单用户、单任务的计算机系统中不需要设置特权指令,而在多用户、多任务计算机系统中,则必须设置特权指令,它主要用于系统资源的分配和管理。如检测用户的访问权限、修改虚拟存储器管理的段表、页表等。
在有些多用户计算机系统中,为了统一管理各种外设,输入/输出指令也作为特权指令使用,故用户不能直接访问它们。需输入/输出时,可通过系统调用来实现。