[关闭]
@jtahstu 2015-06-29T11:02:58.000000Z 字数 7210 阅读 3556

指令系统

计算机组成原理


第 4 章 指令系统

本章学习内容

本章学习的主要目的
(1)加深对计算机指令系统的理解;
(2)了解计算机指令设计的相关概念以及RISC和CISC两种不同的设计风格;
(3)为模型机的指令系统设计打下基础。

4.1 指令系统的发展与性能要求

4.1.1指令系统的发展

指令系统是指机器所具有的全部指令的集合。它反映了计算机所拥有的基本功能。

加法指令、传输数据指令等等就是计算机的指令,这些指令就是告诉计算机从事某一特定运算的代码,一种计算机系统确定的这些指令的集合就是这种机器的指令系统。

在计算机系统的设计和使用过程中,硬件设计人员采用各种手段实现指令系统,而软件设计人员则使用这些指令系统编制各种各样的系统软件和应用软件,用这些软件来填补硬件的指令系统与人们习惯的使用方式之间的语义差距。

因此,可以说,指令系统是软件设计人员与硬件设计人员之间的一个主要分界面,也是他们之间互相沟通的一座桥梁。
指令系统是计算机体系结构的核心;它既是计算机硬件设计的主要依据,又是计算机软件设计的基石。一台计算机指令系统的优劣,直接影响着计算机系统的性能。

指令系统的设计要做什么?

确定系统的指令集以及确定它的指令格式(就是指令有多少位长,哪几位表示地址,哪几位表示操作等)、类型(如堆栈型、寄存器型等分类)、操作(比如运算、数据传送)以及操作数的访问方式等。

4.1.1计算机指令的发展
50年代:指令系统只有定点加减、逻辑运算、数据传送、转移等十几至几十条指令。
60年代后期:增加了乘除运算、浮点运算、十进制运算、字符串处理等指令,指令数目多达一二百条,寻址方式也趋多样化。
60年代后期开始出现系列计算机(指基本指令系统相同、基本体系结构相同的一系列计算机),一个系列往往有多种型号,它们在结构和性能上有所差异。同一系列的各机种有共同的指令集而且新推出的机种指令系统一定包含所有旧机种的全部指令,旧机种上运行的各种软件可以不加任何修改便可在新机种上运行,大大减少了软件开发费用。
70年代末期:大多数计算机的指令系统多达几百条。我们称这些计算机为复杂指令系统计算机(CISC)。但是如此庞大的指令系统难以保证正确性,不易调试维护,造成硬件资源浪费。为此人们又提出了便于VLSI技术实现的精简指令系统计算机(RISC)。

4.1.2指令系统的性能要求

指令系统的性能决定了计算机的基本功能,它的设计直接关系到计算机的硬件结构和用户的需要。

一个完善的指令系统应满足如下四方面的要求:
完备性 用汇编语言编写各种程序时,指令系统直接提供的指令足够使用,而不必用软件来实现。完备性要求指令系统丰富、功能齐全、使用方便。
有效性 利用该指令系统所编写的程序能够高效率的运行。高效率主要表现在程序占据存储空间小、执行速度快。
规整性 规整性包括指令系统的对称性、匀齐性、指令格式和数据格式的一致性。
对称性:指在指令系统中所有的寄存器和存储器单元都可同等对待,所有的指令都可使用各种寻址方式;
匀齐性:是指一种操作性质的指令可以支持各种数据类型;
指令格式和数据格式的一致性:是指指令长度和数据长度有一定的关系,以方便处理和存取。例:指令长度和数据长度通常是字节的整数倍。
兼容性 系列机各机种之间具有相同的基本结构和共同的基本指令集,因而指令系统是兼容的,即各机种基本软件可以通用。但由于不同机种推出的时间不同,在结构和性能上有差异,做到所有软件都完全兼容是不可能的,只能做到“向上兼容”,即低档机上运行的软件可以在高档机上运行。

4.2 指令格式

指令格式则是指令用二进制代码表示的结构形式,由操作码字段和地址码字段组成操作码字段表征指令的操作特性与功能;地址码字段通常指定参与操作的操作数的地址。

4.2.1 操作码

指令系统的每一条指令都有一个操作码,它表示该指令应进行什么性质的操作。 不同的指令用操作码字段的不同编码来表示,每一种编码代表一种指令。

组成操作码字段的位数一般取决于计算机指令系统的规模。例如,一个指令系统只有8条指令,则有3位操作码就够;如果有32条指令,那么就需要5位操作码。 

4.2.2 地址码

根据一条指令中有几个操作数地址,可将该指令称为几操作数指令或几地址指令。

一般的操作数有被操作数、操作数及操作结果这三种数,因而就形成了三地址指令格式。在此基础上,后来又发展成二地址格式、一地址格式和零地址格式

三地址指令格式:
A1:第一源操作数的存储器地址或寄存器地址;
A2:第二源操作数的存储器地址或寄存器地址;
A3:存放操作结果的存储器地址或寄存器地址;
三地址指令功能为: (A1)OP(A2)→A3;

三地址指令编程方便,结果不影响运算操作数,但指令长度仍比较长,所以一般在字长较长的大、中型机中使用,而微、小型机中很少使用三个地址均为存储器地址的三地址指令。
二地址指令
二地址指令的格式为:

这里A1、A2是操作数所在的存储器地址或寄存器地址。
二地址指令功能为:
(A1)OP(A2)→A1 或 (A1)OP(A2)→A2
源地址:仅提供操作数的地址
目的地址:既提供一个操作数,又存放操作结果的地址。

地址指令的几种形式
① 存储器—存储器型(S—S型)指令:A1、A2均为存储器地址的二地址指令。
② 寄存器—寄存器型(R—R型)指令: A1、A2均为寄存器地址的二地址指令。
③ 寄存器—存储器型(R—S型)指令: A1、A2中一个是寄存器地址,另一个是存储器地址的二地址指令。也称一个半地址指令。

二地址指令的指令长度短,特别是R—R型指令,不需访问存储器取操作数,指令执行速度快,因此是最常用的一种指令格式。尤其在RISC结构机器中,所有运算型指令均为R—R型指令。
二地址指令执行后,参加运算的操作数被破坏,若不希望被破坏,则需提前保护。

一地址指令(单地址指令)
一地址指令的格式为:
A可以是存储器地址,也可是寄存器地址。
一地址指令有两种情况
① 单操作数指令:如INC、DEC等,只需一个操作数,其功能为:OP(A)→A。
② 双操作数指令:另一个操作数通常采用隐含寻址的方法,将操作数隐含在约定的累加器AC中,其指令功能为:(AC)OP(A)→AC。
一地址指令长度短,指令执行速度快(若A为存储器地址,只需一次访存取数),对于字长较短的微、小型机,是一种常用的指令格式。

零地址指令
零地址指令中只有操作码而无地址码,其指令格式为;
零地址指令有两种情况:
① 不需操作数的控制型指令,如HALT、WAIT等。
② 运算型零地址指令:操作数隐含在堆栈中。

4.2.3 指令字长度

指令字长度:一个指令字中包含二进制代码的位数。
机器字长:计算机能直接处理的二进制数据的位数。
指令字的长度可以是:单字长、半字长、双字长。

等长指令字结构:各种指令字长度是相等的。这种指令字结构简单,且指令字长度是不变的。
变长指令字结构:各种指令字长度随指令功能而异。结构灵活,能充分利用指令长度,但指令的控制较复杂。

4.2.4 指令助记符

由于硬件只能识别1和0,所以采用二进制操作码是必要的,但是我们用二进制来书写程序却非常麻烦。为了便于书写和阅读程序,每条指令通常用3个或4个英文缩写字母来表示。这种缩写码叫做指令助记符。
例:假定指令系统只有7条指令,所以操作码只需3位二进制,一个典型的指令助记符可如下所示:

由于指令助记符提示了每条指令的意义,因此比较容易记忆,书写起来比较方便,阅读程序容易理解。
 需要注意的是,在不同的计算机中,指令助记符的规定是不一样的。因此,指令助记符还必须转换成与它们相对应的二进制码。这种转换借助汇编程序可以自动完成,汇编程序相当于一个“翻译”。

4.3 指令和数据的寻址方式

寻址方式:形成本条指令的操作数地址和下一条要执行指令的地址的方法。
寻址分为指令地址的寻址和操作数地址的寻址。

指令的执行过程分为:
根据指令地址从内存中取出指令(指令寻址;
执行指令。(在执行指令的过程中要访问操作数一,即操作数娃寻址。)

4.3.1 指令地址的寻址

⑴ 顺序方式:PC+增量→PC
指令通常顺序存放, 程序顺序执行时,可以采用PC增量的方式形成下条指令地址。即按照PC的内容依次取指。增量的多少取决于一条指令所占的存储单元数。
⑵ 跳越方式:当程序转移时,修改PC的内容。
当程序需要转移时,由转移类指令产生转移地址并送入PC中。(演示)

4.3.2 操作数地址的寻址

1.隐含寻址
在指令中不明显的给出而是隐含着操作数的地址。
例如,单地址的指令格式,没有在地址字段中指明第二操作数地址,而是规定累加寄存器AC作为第二操作数地址,AC对单地址指令格式来说是隐含地址。
如指令 MUL CL

2.立即寻址
指令字中直接给出操作数。即指令所需的操作数在指令的地址码部分直接给出。
这种寻址方式在取指令的同时操作数即被取出,不必再次访问存储器,提高了指令执行速度。但由于指令字有限,使得数据范围受限。
例:MOV AX,2000H ;将数据2000H存入累加器AX中

2.直接寻址
指令字中直接给出操作数的有效地址。
有效地址 E=A

例: MOV AX,[2000H]
将有效地址为2000H的内存单元的内容读入累加器AX中。
分析:该寻址方式在早期生产的计算机及目前的某些专用计算机中用得比较多,但随着主存储器容量的不断扩大及虚拟存储器的普及,这种方式暴露出了许多弱点。

(1)它需要很长的地址码,特别在二地址指令及三地址指令中。因此,有限长度的指令无法容纳如此长的地址码。
(2)为了实现循环及有效地处理数组等运算,程序设计中修改数据的地址是必不可少的,在直接寻址方式中,修改数据地址就修改程序中的指令本身。
(3)在多任务的操作系统环境中,要求程序能在主存中浮动,直接寻址方式给操作系统的作业调度带来极大的不便。
因此,必须要有其它寻址方式来支持。

3.间接寻址
指令的地址码部分给出的是操作数地址的地址。
间接寻址分为一级间址和多级间址。
一级间址:指令的地址码部分给出的是操作数地址的地址。

间接寻址的特点:
① 间接寻址比直接寻址灵活,可扩大寻址范围,以短的地址码访问大的存储空间。
② 采用间接寻址,当操作数地址需要改变时,可不必修改指令,只要修改地址指示字中内容(即存放有效地址的单元内容)即可。
③ 间接寻址需多次访存才能取得操作数,尤其是多级间接寻址,因而降低了指令的执行速度。

4.寄存器寻址
在指令地址码中给出某一通用寄存器号(或寄存器地址),该寄存器的内容即为指令所需的操作数。
寄存器存取信息的速度比主存快,需要的地址短,可压缩指令长度,有利于加快指令执行速度。但寄存器的数量有限。

  1. 寄存器间接寻址
    指令中地址码部分所指定的寄存器中内容是操作数的有效地址。
    E=(Rn) Data=((Rn))

6.变址寻址
指令中指定的变址寄存器的内容与指令字中的形式地址相加形成操作数的有效地址。
变址寄存器通常是通用寄存器中的某一个。
E=(Rx)+D Data=(E)

例:Intel 8086指令:
MOV AL,[BX+4]
设 BX=2000H,BX+4=2004H
(2004H)=82H,则 AL←82H

在某些计算机中,变址寄存器还可以自动增量或减量。每存取一个数据,根据数据的长度,变址寄存器的内容自动增量或自动减量,前者称为自增型变址寻址;后者称为自减型变址寻址。

变址寻址可用于数组、向量、字符串等数据的处理。
例: Intel 8086指令:
LODS ;AL←(SI),SI←SI+1

7.基址寻址
操作数的有效地址等于指令中的形式地址与基址寄存器中的内容之和。
基址寄存器可以是一个专用的寄存器,也可以是由指令指定的一个通用寄存器。
E=(Rb)+Disp

基址寻址主要用于将用户程序的逻辑地址(用户编写程序时所使用的地址)转换成主存的物理地址(程序在主存中的实际地址)。

当用户程序装入主存时,为了实现用户程序的重定位,系统程序给每个用户程序分配一个基准地址。程序运行时,该基准地址装入基址寄存器,通过基址寻址,实现逻辑地址到物理地址的转换。

基址寻址与变址寻址在形式上以及有效地址的计算方法上都是相似的,但它们的应用场合是不同的是不同的。
基址寻址是面向系统的,主要用于逻辑地址到物理地址的变换,用以解决程序定位问题。基址寄存器由系统程序通过特权指令使用,对用户是透明的。另外基址寄存器的内容一般不进行自动增量和减量。

变址寻址是面向用户的,主要用于访问数组、向量、字符串等成批数据,用以解决程序的循环控制问题。变址寄存器的内容可以进行自动增量和减量。
此外,还有堆栈寻址方式等。

4.4 典型指令

一个完善的指令系统应包含的以下功能的指令:

  1. 数据传送指令
    数据传送指令主要包括取数指令、存数指令、传送指令、成组传送指令、字节交换指令、清累加器指令、堆栈操作指令等等。这类指令主要用来实现主存和寄存器之间,或寄存器和寄存器之间的数据传送。

2.运算指令
这类指令包括二进制定点加、减、乘、除指令,浮点加、减、乘、除指令,逻辑加、逻辑乘、按位加等。这类指令主要用于定点或浮点的算术运算及逻辑运算。大型机中有向量运算指令,直接对整个向量或矩阵进行求和、求积运算。

3.程序控制指令
程序控制指令也称转移指令。执行程序时,有时机器执行到某条指令时,出现了几种不同结果,这时机器必须执行一条转移指令,根据不同结果进行转移,从而改变程序原来执行的顺序。这种转移指令称为条件转移指令。除各种条件转移指令外,还有无条件转移指令、转子程序指令、返回主程序指令、中断返回指令等。

4.输入输出指令
输入输出指令主要用来启动外围设备,检查测试外围设备的工作状态,并实现外部设备和CPU之间,或外围设备与外围设备之间的信息传送。

5.字符串处理指令
字符串处理指令是一种非数值处理指令,一般包括字符串传送、字符串转换(把一种编码的字符串转换成另一种编码的字符串)、字符串替换(把某一字符串用另一字符串替换)等。

6.特权指令
特权指令是指具有特殊权限的指令。这类指令只用于操作系统或其他系统软件,一般不直接提供给用户使用。 在多用户、多任务的计算机系统中特权指令必不可少。它主要用于系统资源的分配和管理

7. 其他指令
除以上各类指令外,还有状态寄存器置位、复位指令、测试指令、暂停指令,空操作指令,以及其他一些系统控制用的特殊指令。

4.5 指令系统的两种设计风格

  1. 复杂指令系统计算机 CISC(Complex Instruction Set Computer)
    靠增强指令的功能,增加指令系统的复杂程度来提高计算机系统的性能。

特点:
(1) 指令系统复杂庞大,指令数目一般多达200~300条。
(2) 指令格式多,指令字长不固定,使用多种不同的寻址方式。
(3) 可访存指令不受限制。
(4) 各种指令的执行时间和使用频率相差很大。
(5) 大多数采用微程序控制器。

2.精简指令系统计算机RISC (Reduced Instruction Set Computer)
靠精简指令系统,简化指令功能及优化的编译程序来提高计算机系统的性能。

特点:
(1) 选取使用频率高的简单指令以及很有用的指令组成指令系统,指令总数大都不超过100条。
(2) 指令长度一致,指令格式少,寻址方式少,
(3) 以寄存器 — 寄存器方式工作,只有取数/存数(LOAD/STORE)指令访问存储器,其余指令的操作都在寄存器之间进行。
(4) 采用指令流水线调度,使大部分指令在一个机器周期内完成。
(5) 以组合电路控制为主,不用或少用微程序控制。

CISC和RISC技术都在发展,两者都具有各自的特点。目前两种技术已开始相互融和。这是因为随着硬件速度、芯片密度的不断提高,RISC系统也开始采用CISC的一些设计思想,使得系统日趋复杂;而CISC机也在不断部分采用RISC地先进技术(如指令流水线、分级Cache和多通用寄存器等),其性能更加提高。

本章小结

指令系统是指计算机所具有的全部指令的集合。它是反映计算机性能的重要因素。

指令系统是计算机软、硬件的分界面。硬件设计人员设计并实现指令系统;软件设计人员利用指令系统来编制各种软件。

一个完善的指令系统应满足完备性、有效性、规整性和兼容性。

指令系统的设计涉及指令的格式、指令的长度、寻址方式等许多方面。

指令一般由操作码与地址码组成。操作码表示指令的功能,地址码表示操作数的地址。

地址码部分可采用三地址、二地址、一址或零地址格式。地址个数的选取要考虑诸多因素。

指令长度的设计有等长指令字结构与变长指令字结构。

形成操作数地址的方式,称为数据寻址方式。从用户的编程、程序的可重定位等多方面考虑,有多种数据寻址方式。

本章学习目标

理解指令系统的概念。了解指令系统设计需考虑哪些方面。
理解指令中数据寻址方式的多样性。
理解一个完善的指令系统应满足的设计要求及应包括哪些指令。
理解CISC与RISC两种指令设计风格的特点。
本章习题
1、一个完善的指令系统应满足 __ 和兼容性。

2、__是计算机软、硬件的分界面。

3、单地址指令中为了完成两个数的算术运算,除地址码指明的一个操作数外,另一个常需采用__
A 堆栈寻址方式 B 立即寻址方式 C 隐含寻址方式 D 间接寻址方式

4.程序控制类指令的功能是__
A 进行算术运算和逻辑运算
B 进行主存与CPU之间的数据传送
C 进行CPU和I / O设备之间的数据传送
D 改变程序执行顺序

5、指令系统采用不同寻址方式的目的是__
A 实现存贮程序和程序控制;
B 缩短指令长度,扩大寻址空间,提高编程灵活性;。
C 可直接访问外存;
D 提供扩展操作码的可能并降低指令译码的难度;

6、一个完备的指令系统应包括哪些类指令?

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注