计算机组成原理 (5)
5.1 指令系统的发展
计算机系统主要由硬件(hardware)和软件 (software)两部分组成。所谓硬件就是由中央 处理机(CPU)、存储器以及外部设备等组成的 实际装置。软件则是为便于用户使用计算机而 编写的各种程序,最终转换成一系列机器指令 后在计算机上执行。 计算机的性能与它所设置的指令系统有很大的 关系,而指令系统的设置又与机器的硬件结构 密切相关。通常性能较好的计算机都设置有功 能齐全、通用性强、指令丰富的指令系统,但 这需要复杂的硬件结构来支持。
由此可见,操作码扩展技术是一种重要的指令 优化技术,它可以缩短指令的平均长度,减少 程序的总位数以及增加指令字所能表示的操作 信息。当然,扩展操作码比固定操作码译码复 杂,使控制器的设计难度增大,需更多的硬件 来支持。
5.2.3 指令长度与字长的关系 字长是指计算机能直接处理的二进制数据的位 数,它与计算机的功能和用途有很大的关系, 是计算机的一个重要技术指标。首先,字长决 定了计算机的运算精度,字长越长,计算机的 运算精度越高,因此,高性能的计算机字长较 长,而性能较差的计算机字长相对要短一些。 其次,地址码长度决定了指令直接寻址能力, 若为n位,则给出的n位直接地址寻址2n字节。 扩大寻址能力的方法,一是通过增加机器字长 来增加地址码的长度;二是采用地址扩展技术, 把存储空间分成若干个段,用基地址加位移量
图5.1 指令格式
一种可供扩展的方法和步骤如下: (1) 15条三地址指令的操作码由4位基本操作 码从0000~1110给出,剩下一个码点1111用 于把操作码扩展到A1,即4位扩展到8位; (2) 15条二地址指令的操作码由8位操作码从 11110000~11111110给出,剩下一个码点 11111111用于把操作码扩展到A2,即从8位扩 展到12位; (3) 15条一地址指令的操作码由12位操作码从 111111110000~111111111110给出,剩下一 个码点111111111111用于把操作码扩展到A3, 即从12位扩展到16位;
然而,指令结构太复杂也会带来一些不利的因 素,如设计周期长,正确性难以保证且不易维 护等;此外,实验证明,在如此庞大的指令系 统中,只有诸如算术、逻辑运算、数据传送、 转移和子程序调用等几十条最基本的指令才是 经常使用的,而需要大量硬件支持的大多数较 复杂的指令却利用率很低,造成硬件资源的极 大浪费。为了解决这个问题,在70年代末人们 提出了便于VLSI实现的精简指令系统计算机, 简称RISC(见5.7节)。
显然,操作码长度不固定将增加指令译码和分 析的难度,使控制器的设计复杂化,因此对操 作码的编码至关重要。通常是在指令字中用一 个固定长度的字段来表示基本操作码,而对于 一部分不需要某个地址码的指令,把它们的操 作码扩充到该地址字段,这样既能充分地利用 指令字的各个字段,又能在不增加指令长度的 情况下扩展操作码的长度,使它能表示更多的 指令。例如,设某机器的指令长度为16位,包 括4位基本操作码字段和三个4位地址字段,其 格式如图5.1所示。
EA-操作数地址,A-指令中的地址码 Data-操 作数 R-寄存器 (R)-寄存器的内容 1. 直接寻址 EA=A 指令的地址码部分给出操作数在存储器中的地 址,图5.4(a)仅给出一个操作数地址;该指令 的寻址方式由操作码表示。图5.4(b)增加了一 个寻址方式字段M。 2. 寄存器寻址 Data=(R) 计算机的中央处理器一般设置有一定数量的通 用寄存器,用以存放操作数、操作数的地址或
随着集成电路的发展和计算机应用领域的不断 扩大,计算机的软件价格相对不断提高。为了 继承已有的软件,减少软件的开发费用,人们 迫切希望各机器上的软件能够兼容,以便在旧 机器上编制的各种软件也能在新的、性能更好 的机器上正确运行,因此,在60年代出现了系 列(series)计算机。
所谓系列计算机是指基本指令系统相同,基本 体系结构相同的一系列计算机,如IBM 370系 列,IBMPC (XT/AT/286/386/486/Pentium)微 机系列等。一个系列往往有多种型号,各型号 的基本结构相同,但由于推出的时间不同,所 采用的器件也不同,因此性能上可以有很大差 异。通常是新推出的机种在性能和价格方面要 比早推出的机种优越。系列机能解决软件兼容 问题的必要条件是该系列的各机种有共同的指 令集,而且新推出的机种的指令系统一定包含 旧机种的所有指令,因此在旧机种上运行的各 种软件可以不加任何修改地在新机种上运行。
1. 零地址指令 格式: OPCODE OPCODE——操作码 指令中只有操作码,而没有操作数或没有操作 数地址。这种指令有两种可能: (1) 无需任何操作数。如空操作指令,停机指 令等。 (2) 所需的操作数是默认的。
2. 一地址指令 格式: OPCODE A OPCODE——操作码 A——操作数的存储器地址或寄存器名 指令中只给出一个地址,该地址既是操作数的 地址,又是操作结果的存储地址。 在某些字长较短的微型机中,大多数算术逻辑 运算指令也采用这种格式,第一个源操作数由 地址码A给出,第二个源操作数在一个默认的 寄存器中,运算结果仍送回到这个寄存器中, 替换了原寄存器内容,通常把这个寄存器称为
5.2 指令格式
5.2.1 指令格式 计算机是通过执行指令来处理各种数据的。为 了指出数据的来源、操作结果的去向及所执行 的操作,一条指令必须包含下列信息: (1) 操作码,具体说明了操作的性质及功能。 一台计算机可能有几十条至几百条指令,每一 条指令都有一个相应的操作码,计算机通过识 别该操作码来完成不同操作。 (2) 操作数的地址。CPU通过该地址就可以取 得所需的操作数。 (3) 操作结果的存储地址。把对操作数的处理 所产生的结果保存在该地址中,以便再次使用。
第5章 指令系统
5.1 指令系统的发展 5.2 指令格式 5.3 数据表示(略) 5.4 寻址方式(编址方式) 5.5 指令类型
5.6 指令系统的兼容性 5.7 精简指令系统计算机(RISC)和复杂 指令系统计算机(CISC) 5.8 指令系统举例(略) 5.9 机器语言、汇编语言和高级语言(略) 习题
指令的长度与机器的字长没有固定的关系,它 既可以小于或等于机器的字长,也可以大于机 器的字长。前者称为短格式指令,后者称为长 格式指令,一条指令存放在地址连续的存储单 元中。在同一台计算机中可能既有短格式指令 又有长格式指令,但通常是把最常用的指令 (如算术逻辑运算指令、数据传送指令)设计成 短格式指令,以便节省存储空间和提高指令的 执行速度。
(4) 下一条指令的地址。一般来说,当程序顺 序执行时,下条指令的地址由程序计数器(PC) 指出,仅当改变程序的运行顺序(如转移、调 用子程序)时,下条指令的地址才由指令给出。 从上述分析可知,一条指令实际上包括两种信 息即操作码和地址码。操作码(operation code) 用来表示该指令所要完成的操作(如加、减、 乘、除、数据传送等),其长度取决于指令系 统中的指令条数;地址码用来描述该指令的操 作对象,或者直接给出操作数或者指出操作数 的存储器地址或寄存器地址(即寄存器名)。根 据地址码部分所给出地址的个数,指令格式可
(4) 16条零地址指令的操作码由16位操作码从 1111111111110000~1111111111111111给 出。 除了这种方法以外,还有其他多种扩展方法。 在可变长度的指令系统的设计中,到底使用何 种扩展方法有一个重要的原则,就是使用频度 (即指令在程序中的出现概率)高的指令应分配 短的操作码;使用频度低的指令相应地分配较 长的操作码。这样不仅可以有效地缩短操作码 在程序中的平均长度,节省存储器空间,而且 缩短了经常使用的指令的译码时间,因而可以 提高程序的运行速度。
计算机发展至今,其硬件结构随着超大规模集 成电路(VLSI)技术的飞速发展而越来越复杂化, 所支持的指令系统也趋于多用途、强功能化。 指令系统的改进是围绕着缩小指令与高级语言 的语义差异以及有利于操作系统的优化而进行 的。为了便于操作系统的实现和优化,还设置 有控制系统状态的特权指令、管理多道程序和 多处理机系统的专用指令等。
5.2.2 指令操作码的扩展技术 指令操作码的长度决定了指令系统中完成不同 操作的指令条数。若某机器的操作码长度为K 位,则它最多只能有2k条不同指令。指令操作 码通常有两种编码格式,一种是固定格式,即 操作码的长度固定,且集中放在指令字的一个 字段中。这种格式对于简化硬件设计,减少指 令译码时间非常有利,在字长较长的大、中型 机和超级小型机以及RISC上广泛采用。另一种 是可变格式,即操作码的长度可变,且分散地 放在指令字的不同字段中。这种格式能够有效 地压缩程序中操作码的平均长度,在字长较短
5. 多地址指令 在某些性能较好的大、中型机甚至高档小型机 中,往往设置一些功能很强的,用于处理成批 数据的指令,如字符串处理指令,向量、矩阵 运算指令等。为了描述一批数据,指令中需要 多个地址来指出数据存放的首地址、长度和下 标等信息。 以上所述的几种指令格式只是一般情况,并非 所有的计算机都具有。
在20世纪50年代和60年代早期,由于计算机 采用电子管或晶体管,其体积庞大,价格昂贵, 因此,大多数计算机的硬件结构比较简单。所 支持的指令系统一般只有定点加减、逻辑运算、 数据传送和转移等十几至几十条最基本的指令, 而且寻址方式简单。到60年代中、后期,随着 集成电路的出现,计算机的价格不断下降,硬 件功能不断增强,指令系统也越来越丰富。除 了具有以上最基本的指令以外,还设置了乘除 法运算指令、浮点运算指令、十进制运算指令 以及字符串处理指令等,指令数多达一、二百 条,寻址方式也趋于多样化。
图5.4 直接寻址方式
3. 基址寻址 EA=B+A B为基址寄存器 内容 A为地址码存放的位移量 在计算机中设置一个专用的基址寄存器,或由 指令指定一个通用寄存器为基址寄存器。操作 数的地址由基址寄存器的内容和指令的地址码 A相加得到,如图5.5所示。
图5.5 基址寻址过程
当存储器的容量较大,由指令的地址码部分直 接给出的地址不能直接访问到存储器的所有单 元时,通常把整个存储空间分成若干个段,段 的首地址存放于基址寄存器或段寄存器中,段 内位移量由指令给出。存储器的实际地址就等 于基址寄存器的内容(即段首地址)与段内位移 量之和,这样通过修改基址寄存器的内容就可 以访问存储器的任一单元。 综上所述,基址寻址主要用以解决程序在存储 器中的定位和扩大寻址空间等问题。通常基址 寄存器中的值只能由系统程序设定,由特权指 令执行,而不能被一般用户指令所修改,因此