指令系统

一台计算机所能识别并执行的全部指令的集合。指令是一组代码,规定由计算机执行的程序的一步操作。程序由指令组成,是为解决某一问题而设计的一系列指令。指令一般包括两个部分:操作码域和地址域。操作码域存放指令的操作码。地址域确定操作数的值或地址、操作结果的地址和下一条指令的地址等。指令系统表征计算机的基本功能,是计算机系统结构的重要组成部分。

指令的格式

指令包括操作码域和地址域两部分。根据地址域所涉及的地址数量,常见的指令格式有以下几种(图1)。

(1)三地址指令:一般地址域中A1A2分别确定第一、第二操作数地址,A3确定结果地址。下一条指令的地址通常由程序计数器按顺序给出。

(2)二地址指令:地址域中A1确定第一操作数地址,A2同时确定第二操作数地址和结果地址。

(3)单地址指令:地址域中A 确定第一操作数地址。固定使用某个寄存器存放第二操作数和操作结果。因而在指令中隐含了它们的地址。

(4)零地址指令:在堆栈型计算机中,操作数一般存放在下推堆栈顶的两个单元中,结果又放入栈顶,地址均被隐含,因而大多数指令只有操作码而没有地址域。

(5)可变地址数指令:地址域所涉及的地址的数量随操作定义而改变。如有的计算机的指令中的地址数可少至 0个,多至6个。

图

指令的寻址方式

根据指令内容确定操作数地址的过程称为寻址。完善的寻址方式可为用户组织和使用数据提供方便。

(1)直接寻址:指令地址域中表示的是操作数地址。

(2)间接寻址:指令地址域中表示的是操作数地址的地址即指令地址码对应的存储单元所给出的是地址A,操作数据存放在地址A指示的主存单元内。有的计算机的指令可以多次间接寻址,如A指示的主存单元内存放的是另一地址B,而操作数据存放在B指示的主存单元内,称为多重间接寻址(图2a)。

(3)立即寻址:指令地址域中表示的是操作数本身。

(4)变址寻址:指令地址域中表示的是变址寄存器号i和位移值D。将指定的变址寄存器内容E与位移值D相加,其和E+D为操作数地址(图2b)。许多计算机具有双变址功能,即将两个变址寄存器内容与位移值相加,得操作数地址。变址寻址有利于数组操作和程序共用。同时,位移值长度可短于地址长度,因而指令长度可以缩短。

(5)相对寻址:指令地址域中表示的是位移值D。程序计数器内容(即本条指令的地址)K与位移值D相加,得操作数地址K+D(图2c)。当程序在主存储器浮动时,相对寻址能保持原有程序功能。

图

此外,还有自增寻址、自减寻址、组合寻址等寻址方式。寻址方式可由操作码确定,也可在地址域中设标志,指明寻址方式。

指令的种类

常见指令按功能可划分为以下几类。

(1)数据处理指令:包括算术运算指令、逻辑运算指令、移位指令、比较指令等。

(2)数据传送指令:包括寄存器之间、寄存器与主存储器之间的传送指令等。

(3)程序控制指令:包括条件转移指令、无条件转移指令、转子程序指令等。

(4)输入-输出指令:包括各种外围设备的读、写指令等。有的计算机将输入-输出指令包含在数据传送指令类中。

(5)状态管理指令:包括诸如实现置存储保护、中断处理等功能的管理指令。

随着计算机系统结构的发展,有些计算机还不断引入新指令。如“测并置”指令是为在多机系统和多道程序中防止重入公用子程序而设置的。指令先测试标志位以判断该子程序是否正在使用。如未被使用,则转入子程序并置该标志位,以防其他进程重入。后来又出现功能更强的信号(PV操作)指令。有的计算机还设置“执行”指令。“执行“指令执行由地址域所确定的存储单元中的指令。其目的是避免用程序直接修改程序中的指令。这对程序的检查和流水线等技术的应用均有好处。有的计算机采用堆栈实现程序的调用指令和返回指令。调用时将返回地址和各种状态、参数压入堆栈顶部,这样就能较好地实现子程序的嵌套和递归调用,并可使子程序具有可重入性。另外,一些计算机使不少复杂的操作固定化,形成诸如多项式求值、队列插项、队列撤项和各种翻译、编辑等指令。

向量指令和标量指令

有些大型机和巨型机设置功能齐全的向量运算指令系统。向量指令的基本操作对象是向量,即有序排列的一组数。若指令为向量操作,则由指令确定向量操作数的地址(主存储器起始地址或向量寄存器号),并直接或隐含地指定如增量、向量长度等其他向量参数。向量指令规定处理机按同一操作处理向量中的所有分量,可有效地提高计算机的运算速度。不具备向量处理功能,只对单个量即标量进行操作的指令称为标量指令。

特权指令和用户指令

在多用户环境中,某些指令的不恰当使用会引起机器的系统性混乱。如置存储保护、中断处理、输入输出等这类指令,均称为特权指令,不允许用户直接使用。为此,处理机一般设置特权和用户两种状态,或称管(理)态和目(的)态。在特权状态下,程序可使用包括特权指令在内的全部指令。在用户状态下,只允许使用非特权指令,或称用户指令。用户如使用特权指令则会发生违章中断。如用户需要申请操作系统进行某些服务,如输入-输出等,可使用“广义指令”,或称为“进监督”、“访管”等的指令。