2011考研计算机组成原理
指令是指示计算机执行某项运算或处理功能的命令,是用户使用计算机与计算机本身运行的最小功能单位。早期的计算机,从简化计算机硬件结构、降低成本考虑,指令系统都比较简单,条数少、运算功能弱,能处理的数据只是定点小数,使用相当困难。到了20世纪六、七十年代,随着集成电路和超大规模集成电路的出现与发展,计算机硬件成本直线下降,相应的软件成本所占比例迅速增加,计算机的指令系统日渐变得复杂和完备,指令条数多达三、五百条,寻址方式也多达十几种,能直接处理的数据类型更多,构成了复杂指令系统的计算机(CISC)。在1975年前后,人们又发现,一味追求指令系统的复杂和完备程度,也不是提高计算机性能的唯一途径,在CISC计算机中,有80%的功能更强、实现起来更为复杂的指令却较少被使用,在程序运行的过程中只占到20%的时间,有80%的程序运行时间使用的是另外20%的功能简单、实现容易的指令。据此提出了简化指令系统的计算机(RISC)的概念并予以实现,只选用几种简单的寻址方式和最常用的几十条指令,充分考虑了超大规模集成电路设计、制造中的有关问题,吸收当前软件研究的各项成果,从硬、软件结合的角度解决了许多矛盾,设计制造出运行性能更高的计算机系统。
要确定一台计算机的指令系统并评价其优劣,通常应从如下4个方面考虑: (1)指令系统的完备性,常用指令齐全,编程方便;
(2)指令系统的高效性,程序占内存空间少,运行速度快;
(3)指令系统的规整性,指令和数据使用规则统一简单,易学易记;
(4)指令系统的兼容性,同一系列的低档计算机的程序能在新的高档机上直接运行。 要完全同时满足上述标准是困难的,但它可以指导我们设计出更加合理的指令系统。设计指令系统的核心问题是选定指令的功能和格式。指令的格式与计算机的字长、期望的存储器容量和读写方式、支持的数据类型、计算机硬件结构的复杂程度和追求的运算性能等有关。
本章内容相对简单,也没有太多答题技巧。 ★ 重点知识和概念精讲 4.1 指令的格式、功能和分类
指令是指示计算机执行某项运算或处理功能的命令,是计算机运行的最小功能单位,一台计算机使用的全部指令组成该计算机的指令系统,作为设计计算机程序的一种语言。计算机硬件的核心作用是实现每一条指令的功能并执行用机器指令组成的程序。在计算机内部,每一条指令使用一定位数(通常等于计算机的字长)的二进制代码来表示。
1. 指令两个字段
一条指令通常要包括指令操作码字段和操作数地址字段两部分,如图4.1所示。
操作码 操作数地址
图4.1变址寻址
第一部分是指令的操作码。操作码用于指明本条指令的操作功能,例如,是算术加运算、减运算还是逻辑与运算、或运算功能,是否是读、写内存或读、写外设操作功能,是否是程序转移和子程序调用或返回操作功能等,计算机需要为每条指令分配一个确定的操作码。操作码是识别指令、了解指令功能、区分操作数地址内容的组成和使用方法等的关键信息。
第二部分,是指令的操作数地址,用于给出被操作的信息(指令或数据)的地址,包括参加运算的一个或多个操作数所在的地址,运算结果的保存地址,程序的转移地址、被调用的子程序的入口地址等。
第36页 共65页
2011考研计算机组成原理
在一条指令中,如何安排指令字的长度,如何分配这两部分所占的位数(长度),如何安排操作数的个数,如何表示和使用一个操作数的地址(寻址方式),是要认真对待、精心设计的重要问题。
4.2 操作码字段的组织与编码
指令字的长度,多数情况下就确定为计算机的字长,即由几个字节组成,例如2、4、6、8个字节,但并不一定要求所有的指令的字长都相同,例如,一个机器字中,可以存放几条很短的指令,长的指令也可能占用多个机器字,目的在于提高资源利用率。
从对指令操作码的组织与编码方案来看,可以区分出如下2种处理情况。 2. 定长的操作码的组织方案
在当前多数的计算机中,一般都在指令字的最高位部分分配固定的若干位(定长)用于表示操作码,例如8位,它有256个编码状态,故最多可以表示256条指令。这对于简化计算机硬件设计,提高指令译码和识别速度很有利,当计算机字长为32位或更长时,这是常规正统用法。
3. 变长的操作码的组织方案
当计算机的字长与指令长度为16位或8位时,单独为操作码划分出固定的多位后,留给表示操作数地址的位数就会严重不足。为此不得不对一个指令字的每一个二进制位的使用精打细算,使一些位(bit)在不同的指令中有不同的作用,例如,在一些指令中,这些位用作操作码,而在另外一些指令中,这些位用作操作数的地址,则不同指令的操作码长度就会不同,应尽量为那些最常用(程序中使用频率高)、用于表示操作数地址的位数要求又较多的指令,适当少分配几位操作码(当然能表示的指令条数也就少);而对那些表示操作数地址的位数要求较少的指令多分配几位操作码;对那些无操作数的指令,整个指令字的全部位都用作操作码,力争在比较短的一个指令字中,既能表示出比较多的指令条数,又能尽量满足给出相应的操作数地址的要求。变长的操作码方案是应用在字长较短的计算机系统中的一种变通措施。例如,字长16位的PDP-11计算机就选用变长的指令操作码方案。 4.3 操作数地址字段的表示与编码
不同的指令使用不同数目、不同来源去向、不同用法的操作数,必须有办法尽量把它们统一起来,并安排在指令字的操作数地址字段。
1. 操作数个数
从用到的操作数个数区分,可能有如下4种情况
无操作数指令,单操作数指令,双操作数指令,多操作数指令。
上述4种情况中的前3种,由于其指令字长可以相对较短,执行速度较高,计算机硬件结构可以相对简单等优点,在各种不同类型的计算机中被广泛应用;相对而言,最后一种更多地用在字长较长的大中型计算机中。
2. 操作数的源与目的
操作数的来源、去向及其在指令字中的地址安排有多种情况。
这里说的操作数的来源、去向,是指表示在指令中操作数要从哪里读来、写向哪里去。不同的指令使用不同数目、不同来源、不同用法的操作数,必须有办法尽量把它们统一起来,并安排在指令字的操作数的地址字段。
操作数的第一个来源、去向,可以是CPU 内部的通用寄存器(累加器),在指令字中须为其分配2、3、4、5位来表示一个寄存器;该寄存器中的内容,可以是指令运算用到的数据,也可能是一个操作数的地址,或指令地址,或计算主存储器地址的相关信息。
第37页 共65页
2011考研计算机组成原理
操作数第二的来源、去向,可以是外围设备(接口)中的一个寄存器,通常用设备编号、或设备入出端口地址、或设备映像地址(与内存储器地址统一编址的一个设备地址编号)来表示。
操作数的第三个来源、去向可以是内存储器的一个存储单元,此时应在指令字中给出该存储单元的地址。此时在指令的操作数地址字段给出的地址信息称为形式地址,用形式地址并配合一定的规则计算出来的主存储器的单元地址被称为有效(实际)地址。
4.4 寻址方式
寻址方式解决的是如何在指令中表示一个操作数的地址,如何用这种表示得到操作数、或怎样计算出操作数的地址。表示在指令中的操作数地址,通常被称为形式地址;用这种形式地址并结合某些规则,可以计算出操作数在存储器中的存储单元地址,这一地址被称为数据的物理(有效)地址。计算机中常用的基本寻址方式有如下多种。 (1) 立即数寻址
操作数直接给出在指令字中,即指令字中直接给出不再是操作数地址,而是操作数本身。 (2) 直接寻址
直接寻址是指在指令的操作数地址字段直接给出操作数在存储器中的地址,这也是计算机中常用的寻址方式之一。 (3) 寄存器寻址、寄存器间接寻址
寄存器寻址,是指在指令字中的操作数地址字段直接给出操作数所在的通用寄存器的编号(名字、地址),由于通用寄存器数目较少,表示一个通用寄存器编号占用的位数就少,有利于缩短指令字的长度;再考虑到从通用寄存器取数参加运算、用通用寄存器临时保存运算结果都更迅速方便,故这是最基本最常用的寻址方式。
寄存器间接寻址,在寄存器中给出的不是一个操作数,而是操作数地址时,就可以用这一地址去读写存储器的相关单元,这种用法被称为寄存器间接寻址,这也是最基本最常用的寻址方式之一,如图4.4所示。
存储器 操作码 Ri
操作数
操作数的地址
图4.4寄存器间接寻址 通用寄存器 (4) 变址寻址
变址寻址,是指把在指令字中给出的一个数值(称为变址偏移量)与指定的一个寄存器
(称为变址寄存器)的内容相加之和作为操作数的地址,用于读写存储器,如图4.5所示。
第38页 共65页
2011考研计算机组成原理
操作码 Ri R X 变址偏移量
相加 变址寄存器 通用寄存器 (5) 相对寻址
存储器 操作数 图4.5变址寻址 相对寻址,是指把在指令字中给出的一个数值(称为相对寻址偏移量)与程序计数器PC的内容相加之和作为操作数的地址或转移指令的地址转移,如图4.6所示。
存储器 操作码 变址偏移量
操作数或指令 相加 程序计数器PC
图4.6相对寻址 (6) 基地址寻址 基地址寻址,是指把在程序中所用的地址与一个特定的寄存器(称为基地址寄存器)的内容相加之和作为操作数的地址或指令的地址,主要用于为多道程序或浮动地址程序定位存储器空间。基地址寄存器中的值是由系统程序用特权指令设定的,通常不允许用户在自己的程序中对其进行修改。 (7) 间接寻址
间接寻址,是指在指令字的地址字段给出的既不是一个操作数的地址,也不是下一条指令的地址,而是一个操作数地址的地址,或一条指令地址的地址。此时读写数据需两次访问存储器,速度较慢。若要执行多次间接寻址才能得到一条指令或一个数据,系统的运行效率会更低,如图4.7所示。
存储器 操作码 地址字段
操作数的地址 操作数 图4.7间接寻址
第39页 共65页 2011考研计算机组成原理
间接寻址的形式地址可以有多种方案给出,不一定就是图4.7中简单表示的方式。 (8) 堆栈寻址
堆栈是存储器中(或专用寄存器组)一块特定的按“后进先出”原则管理的存储区,该存储区中被读写单元的地址是用一个特定的寄存器给出的,该寄存器被称为堆栈指针(STACK POINTER,缩写为SP)。如果有些指令,其操作码部分已经指明一个操作数为堆栈中的一个单元(通常为栈顶)的内容,则它已经约定将使用SP访问该单元,故不必在指令的操作数地址字段中另加指定。
上述8种寻址方式,是计算机中常用的基本寻址方式,可以单独使用,给出一个地址,也可以把它们中的某几种组合在一起,如变址后再间接寻址,变址与基地址寻址的组合,间接寻址还可以连续多次执行等。请注意,不是每一台计算机都使用所有的寻址方式,也不一定要把寻址方式设计得很复杂,简单的寻址方式可以使计算机系统有更高的运行效率。
4.5 CISC和RISC的基本概念
在计算机系统不断发展完善的过程中,指令系统也在发生某些变化。早期的计算机,从简化计算机硬件结构、降低成本考虑,指令系统都比较简单,条数少、运算功能弱,能处理的数据只是定点小数,使用相当困难。到了20世纪六、七十年代,随着集成电路和超大规模集成电路的出现与发展,计算机硬件成本直线下降,相应的软件成本所占比例迅速增加,计算机的指令系统日渐变得更加复杂和完备,指令条数多达三、五百条,寻址方式也多达十几种,能直接处理的数据类型更多,构成了复杂指令系统的计算机系统,英文缩写为CISC (Complex Instruction Set Computer)。在1975年前后,人们又发现,一味追求指令系统的复杂和完备程度,也不是提高计算机性能的唯一途径,对高级语言程序被编译后产生的机器指令的结果进行分析,发现在CISC计算机中,有80%的功能更强、实现起来更为复杂的指令却较少被使用,在程序运行的过程中只占到20%的时间,有80%的程序运行时间使用的是另外20%的功能简单、实现容易的指令。据此提出了简化指令系统的计算机(RISC: Reduced Instruction Set Computer)的概念并予以实现,只选用几种简单的寻址方式和最常用的几十条指令,充分考虑了超大规模集成电路设计、制造中的有关问题,吸收当前软件研究的各项成果,从硬、软件结合的角度解决了许多矛盾,设计制造出运行性能更高的计算机系统。 指令 类型 COBOL PASCAL 数据 存取 40.2 54.0 转移 24.6 18.0 18.4 存-存 传送 12.4 2.1 4.8 逻辑 运算 14.6 8.1 9.9 整数 运算 6.4 11.0 7.0 浮点数 运算 0.0 11.9 6.8 十进制 运算 1.6 0.0 0.0 其他 0.6 0.2 0.1 FORTRAN 48.7 4.6 RISC/CISC的性能比较
表4.2 RISC/CISC的性能比较
RISC CISC I 1.2~1.4 1 C 1,3~1.7 4~10 T <1 1 一个程序的运行时间P = I × C × T,其中:
第40页 共65页