计算机底层逻辑学习笔记10-指令信息表示——指令类型

208 阅读6分钟

一台计算机的指令系统可能包含上百条指令,按其不同特征,存在着不同的分类方法。不同类型的计算机,其指令系统也差别很大。由于采用的分类特征不同,各机器的指令系统也有不同的分类方法。

多数指令系统支持的指令操作类型

操作系统举例
算数和逻辑运算定点算数和逻辑操作:加、减、与、或、乘、除等
数据传送数据传送类指令;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. 程序自中断指令

通常,中断是因计算机内部突发事件或外围设备请求而随机产生的,但在有的机器中,为了在程序调试中设置断点或实现系统调用功能,设置了自中断指令。执行该类程序时,按中断方式将处理机断点与现场保存在堆栈中(这点与一般的转子程序不同),然后转向对应的中断处理子程序入口开始执行,执行完毕后,通过中断返回指令返回到原程序断点继续执行。由于自中断指令是由软件驱动的,所以又称为软中断。

四、系统类指令(特权指令)

特权指令是指具有特殊权限的指令,它们只能用于操作或其他软件系统,一般不直接提供给用户使用。

通常在单用户、单任务的计算机系统中不需要设置特权指令,而在多用户、多任务计算机系统中,则必须设置特权指令,它主要用于系统资源的分配和管理。如检测用户的访问权限、修改虚拟存储器管理的段表、页表等。

在有些多用户计算机系统中,为了统一管理各种外设,输入/输出指令也作为特权指令使用,故用户不能直接访问它们。需输入/输出时,可通过系统调用来实现。