计算机组成原理|第七章(笔记)

目录

  • 第七章 指令系统
    • 7.1 机器指令
      • 7.1.1 指令的一般格式
      • 7.1.2 指令字长
    • 7.2 操作数类型和操作类型
      • 7.2.1 操作数类型
      • 7.2.2 数据在存储器中的存放方式
      • 7.2.3 操作类型
    • 7.3 寻址方式
      • 7.3.1 指令寻址
      • 7.3.2 数据寻址
    • 7.4 指令格式举例
      • 7.4.1 设计指令格式时应考虑的各种因素
      • 7.4.2 指令格式举例
    • 7.5 RISC 技术
      • 7.5.1 RISC 的产生和发展
      • 7.5.2 CISC 的主要特征
      • 7.5.3 RISC 的主要特征
      • 7.5.4 RISC和CISC的比较


上篇:第六章、计算机的运算方法

第七章 指令系统


7.1 机器指令

计算机能解题是由于机器本身存在一种语言,它既能理解人的意图,又能被机器自身识别。机器语言是由一条条语句构成的,每一条语句又能准确表达某种语义。计算机就是连续执行每一条机器语句而实现全自动工作的。人们习惯把每一条机器语言的语句叫机器指令,而又将全部机器指令的集合叫做机器的指令系统。因此机器的指令系统集中反映了机器的功能。


7.1.1 指令的一般格式

指令是由操作码地址码两部分组成:

1. 操作码

操作码是用来指明该指令所要完成的操作,如加法、减法、传送、移位、转移等等。通常,其位数反映了机器的操作种类,也即机器允许的指令条数,如操作码占 7 位,则该机器最多包含 27=128 条指令。

操作码长度可以是固定的,也可以是变化的:

  • 操作码长度固定:将操作码集中放在指令的一个字段内,这种格式便于硬件设计,指令译码时间短,广泛用于字长较长的、大中型计算机和超级小型计算机以及 RISC 中。如: IBM370 和 VAX-11 系列机
  • 操作码长度不固定:其操作码分散在指令字的不同字段中,这种格式可有效地压缩操作码的平均长度,在字长较短的微机中被广泛采用。如:PDP-11,Inter18086/80386 等

为了支持操作码的长度可变,通常采用扩展操作码技术

扩展操作码技术 能够使操作码的长度随地址数的减少而增加,不同地址数的指令可以具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长。

扩展方法有两种:

  • 方式一:保留一个编码的码点作为扩展标志
  • 方式二:利用操作码当中某一位作为扩展标志

以方式一进行举例来探究操作码如何进行扩展:

计算机组成原理|第七章(笔记)_第1张图片

图中指令字长为 16 位,其中 4 位为基本操作码字段 OP,另外三个 4 位长的地址字段为 A1、A2、A3。如果不采用扩展操作码技术,可以根据 OP 的字节长度计算出操作码最多只能有 24 条,根本无法满足计算机系统编写复杂程序的要求,所以指令必须进行扩展。当操作码 4 位时,从 0000 ~ 1111 有 16 种编码,可以将 0000 ~ 1110 这 15 个编码作为指令,剩下一个 1111 作为扩展标志,如果前 4 个编码为 1111 时,则表明这条指令操作码长度至少为 8 位,依次类推,可以看出随着地址数的减少,操作码增加。扩展标志可以有多个,比如将 1110 也作为扩展标志的话,那么指令的个数也会随之增加。

在设计操作码不固定的指令系统时,应尽量考虑安排指令使用频度(即指令在程序中出现的概率)高的指令占用短的操作码,对使用低的指令可占用较长的操作码,以缩短经常使用的指令译码时间。

2. 地址码

地址码用来指出该指令的源操作数的地址(一个或两个)、结果的地址以及下一条指令的地址。这里的 “地址” 可以是主存的地址,也可以是寄存器的地址,甚至可以是IO设备的地址。

(1)四地址指令

  • OP 为操作码
  • A1 为第一操作数地址
  • A2 为第二操作数地址
  • A3 为结果地址
  • A4 为下一条指令的地址

该指令完成 (A1) OP (A2) —> A3 操作,会进行 4 次访存。假设指令字长为 32 位,操作码固定 8 位,4 个地址字段各占 6 位,则指令的直接寻址范围是 26=64,这么短的地址码,如果是寄存器尚且可行,如果是内存的话,这样的指令几乎是不可用的,那要如何通过减少地址码的个数来增加地址码的长度,从而增加寻找范围。

因为程序种大多数指令是按顺序执行的,而程序计数器 PC 既能存放当前欲执行指令的地址,又有计数功能,因此它能自动形成下一条指令的地址,这样,指令中的第四地址字段 A4 便可省去,即得三地址指令格式。

(2)三地址指令


它完成 (A1) OP (A2) —> A3 操作,也会进行 4 次访存。但是由于地址吗个数减少,每个地址字段各占 8 位,其寻址范围也变成了 28=256。

其实,机器在运行过程中,没有必要将每次运算结果都存入主存,中间结果可以暂时存放在 CPU 的寄存器(如 ACC )中,这样又可省去一个地址字段 A3,从而得出二地址指令。

(3)二地址指令

它进行的操作是 (A1) OP (A2) —> A1 或者 (A1) OP (A2) —> A2,仍需进行 4 次访存。但是地址码从 3 个变为 2 个,每一个地址码的长度从 8 位增加到 12 位,寻址范围变为 212=4K。

如果将一个操作数的地址隐含在运算器的 ACC 中,则指令字中只需给出一个地址码,构成了一地址指令。

(4)一地址指令


其执行的操作为 (ACC) OP (A1) —> ACC,ACC 既存放参与运算的操作数,又存放运算的中间结果,这样,完成一条一地址指令只需 2 次访存,其寻址范围达到 224=16M。

在指令系统中,还有一种指令可以不设地址字段,即所谓零地址指令。

(5)零地址指令

零地址指令在指令字中无地址码,例如进栈(PUSH)、出栈(POP)这类指令,其操作数的地址隐含在堆栈指针 SP 中。


7.1.2 指令字长

指令字长取决于 操作码的长度操作数地址的长度操作数地址的个数 。不间机器的指令字长是不相同的。

早期计算机指令字长是 固定的,指令字长可以等于存储字长。随着计算机的发展,指令字长 可变,通常情况下长度的变化都是按字节倍数变化。


7.2 操作数类型和操作类型


7.2.1 操作数类型

机器中常见的操作数类型有:

  • 地址:可被认为是一个无符号整数
  • 数字:定点数、浮点数和十进制数
  • 字符:在应用计算机时,文本或字符串也是一种常见的数据类型,由于计算机在处理信息过程中不能以简单的字符形式存储和传送,因此普遍采用 A S C ⅠⅠ ASCⅠⅠ ASCⅠⅠ 码,它是很重要的一种字符编码
  • 逻辑数据:计算机除了作算术运算外,有时还需作逻辑运算,此时 n n n 个 0 和 1 的组合不是被看作算术数字,而是看作逻辑数

7.2.2 数据在存储器中的存放方式

在 第四章、存储器 有提到过,主存中数据的存放可以按照:① 以高位字节地址为字地址;② 以低位字节地址为字地址。两种方式进行存放。

计算机组成原理|第七章(笔记)_第2张图片

其中 (a) 表示低字节为低地址,(b) 表示高字节为低地址。

由于不同的数据字长不同,每台机器处理的数据字长也不统一,在内存要如何进行存储呢?

  • 从任意位置开始存储
    计算机组成原理|第七章(笔记)_第3张图片

    • 优点:不浪费存储资源
    • 缺点:读写控制比较复杂,除了访问一个字节之外,访问其它任何类型的数据都可能花费两个存储周期的时间
  • 从一个存储字的起始位置开始访问
    计算机组成原理|第七章(笔记)_第4张图片

    • 优点:无论访问何种类型的数据,在一个周期内均可完成,读写控制简单
    • 缺点:浪费了宝贵的存储资源
  • 边界对准方式 — 从地址的整数倍位置开始访问
    计算机组成原理|第七章(笔记)_第5张图片

    • 数据存放的起始地址是数据长度(按照编址单位进行计算)的整数倍
    • 该方案是前两个方案的折中,在一个周期内可以完成存储访问,也减少了存储空间的浪费

7.2.3 操作类型

不同的机器操作类型也是不同的,但几乎所有的机器都有以下几类通用的操作。

1. 数据传送

数据传送包括寄存器与寄存器、寄存器与存储单元、存储单元与存储单元之间的传送。如从源到目的之间的传送、对存储器读(LOAD)和写(STORE)、交换源和目的的内容、置 1、清 0 、进栈、出栈等。

2. 算术逻辑操作

这类操作可实现算术运算(加、减、乘、除、增1、减1、取负数即求补)和逻辑运算(与、或、非、异或)。对于低档机而言,一般算术运算只支持最基本的二进制加减、比较、求补等,高档机还能支持浮点运算和十进制运算。

有些机器还具有位操作功能,如位测试(测试指定位的值)、位清除(清除指定位)、位求反(对指定位求反)等。

3. 移位

移位可分为算术移位、逻辑移位和循环移位三种。

4. 转移

在多数情况下,计算机是按顺序执行程序的每条指令的,但有时需要改变这种顺序,此刻可采用转移类指令来完成。转移指令按其转移特征又可分为无条件转移、条件转移、跳转、过程调用与返回、陷阱(Trap)与陷阱指令等几种。

5. 输入输出

对于 IO 单独编址的计算机而言,通常没有输入输出指令,它完成从外设中的寄存器读入一个数据到 CPU 的寄存器内,或将数据从 CPU 的寄存器输出至某外设的寄存器中。

6. 其它

其他包括等待指令、停机指令、空操作指令、开中断指令、关中断指令、置条件码指令等等。


7.3 寻址方式

寻址方式是指确定本条指令的数据地址,以及下一条将要执行的指令地址的方法,它与硬件结构紧密相关,而且也直接影响指令格式和指令功能。

寻址方式分为指令寻址数据寻址两大类。


7.3.1 指令寻址

指令寻址可分为:

  • 顺序寻址:可通过程序计数器 PC 加 1,自动形成下一条指令的地址
  • 跳跃寻址:通过转移类指令实现

计算机组成原理|第七章(笔记)_第6张图片

如果程序的首地址为 0,只要先将 0 送至程序计数器 PC 中,启动机器运行后,程序便按0、1、2、3、7、8、… 序执行。其中第1、2、3号指令地址均由 PC 自动形成。因第 3 号地址指令为 JMP 7, 故执行完第 3 号指令后,便无条件将 7 送至 PC,因此,此刻指令地址跳过 4、5、6三条,直接执行第 7 条指令,接着又顺序执行第 8 条、第 9 条等等指令。


7.3.2 数据寻址

数据寻址方式种类较多,在指令字中必须设一字段来指明属哪一种寻址方式。指令的地址码字段,通常都不代表操作数的真实地址,把它称作形式地址,记作 A。操作数的真实地址叫做有效地址,记作 EA,它是由寻址方式和形式地址共同来确定的。


为了便于分析研究各类寻址方式,假设指令字长、存储字长、机器字长均相同。

1. 立即寻址

立即寻址的特点是操作数本身设在指令字内,即形式地址 A 不是操作数的地址,而是操作数本身,又称之为立即数。

计算机组成原理|第七章(笔记)_第7张图片
它的优点在于只要取出指令,便可立即获得操作数,这样指令在执行阶段不必再访问存储器。

2. 直接寻址

直接寻址的特点是,抬令字中的形式地址 A 就是操作数的真实地址 EA
E A = A EA=A EA=A

计算机组成原理|第七章(笔记)_第8张图片

它的优点是寻找操作数比较简单,也不需要专门计算操作数的地址,在指令执行阶段对主存只访问一次。它的缺点在于 A 的位数限制了指令的寻址范围,而且必须修改 A 的值,才能修改操作数的地址。

3. 隐含寻址

隐含寻址是指指令字中不明显地给出操作数的地址,其操作数的地址隐含在操作码或某个寄存器中。

例如,一地址格式的加法指令只给出一个操作数的地址,另一个操作数隐含在累加器 ACC 中,这样累加器 ACC 成了另一个数
的地址。

计算机组成原理|第七章(笔记)_第9张图片
由于隐含寻址在指令字中少了一个地址,因此,这种寻址方式的指令有利于缩短指令字长。

4. 间接寻址

倘若指令字中的形式地址不直接指出操作数的地址,而是指出操作数有效地址所在的存储单元地址,也就是说,有效地址是由形式地址间接提供的,故为间接寻址。即
E A = ( A ) EA=(A) EA=(A)

计算机组成原理|第七章(笔记)_第10张图片
这种寻址方式与直接寻址相比,它扩大了操作数的寻址范围,其第二个优点在于它便于编制程序,不过间接寻址的指令执行阶段需要访存两次(一次间址)或多次(两次间址),致使指令执行时间延长。

5. 寄存器寻址

在寄存器寻址的指令字中,地址码字段直接指出了寄存器的编号,即 E A = R i EA=R_{i} EA=Ri

计算机组成原理|第七章(笔记)_第11张图片

其操作数在由 R i R_{i} Ri 所指的寄存器内。由于操作数不在主存中,故寄存器寻址在指令执行阶段无须访存,减少了执行时间。由于地址字段只需指明寄存器编号(计算机中寄存器数有限),故指令字较短,节省了存储空间,因此寄存器寻址在计算机中得到广泛应用。

6. 寄存器间接寻址

计算机组成原理|第七章(笔记)_第12张图片

R i R_{i} Ri 中的内容不是操作数,而是操作数所在主存单元的地址号,即有效地址 E A = ( R i ) EA=(R_{i}) EA=(Ri)。与寄存器寻址相比,指令的执行阶段还需访问主存。与图 一次间址 相比,因有效地址不是存放在存储单元中,而是存放在寄存器中,故称其为寄存器间接寻址,它比间接寻址少一次访存。便于编写循环程序。

7. 基址寻址

基址寻址需设有基址寄存器 BR,其操作数的有效地址 EA 等于指令字中的形式地址与基址寄存器中的内容(称作基地址)相加。即:
E A = A + ( B R ) EA=A+(BR) EA=A+(BR)

计算机组成原理|第七章(笔记)_第13张图片
基址寄存器可采用 隐式 的和 显式 的两种。所谓隐式是在计算机内专门设有一个基址寄存器 BR,使用时用户不必明显指出该基址寄存器,只需由指令的寻址特征位反映出基址寻址即可。显式是在一组通用寄存器里,由用户明确指出哪个寄存器用作基址寄存器,存放基地址。

基址寻址可以扩大指令对主存的寻址范围,在多道程序和浮动程序编制时极为有用。

8. 变址寻址

变址寻址与基址寻址极为相似。其有效地址 EA 等于指令字中的形式地址 A 与变址寄存器 IX 的内容相加之和。即
E A = A + ( I X ) EA=A+(IX) EA=A+(IX)

计算机组成原理|第七章(笔记)_第14张图片

显然只要变址寄存器位数足够,也可扩大指令的寻址范围,IX 的内容由用户给定,在程序的执行过程中 IX 内容可变,形式地址 A 不可变,便于处理数组问题。

9. 相对寻址

相对寻址的有效地址是将程序计数器 PC 的内容(即当前指令的地址)与指令字中的形式地址 A 相加而成。即
E A = A + ( P C ) EA=A+(PC) EA=A+(PC)

计算机组成原理|第七章(笔记)_第15张图片
相对寻址常被用于转移类指令,转移后的目标地址与当前指令有一段距离,叫做相对位移量,它由指令字的形式地址 A 给出,故 A 又可称位移量,位移量 A 可正可负。

相对寻址的最大特点是转移地址不固定,它可随 PC 值的变化而变,因此,无论程序在主存的哪段区域,都可正确运行,对于编写浮动程序特别有利,广泛应用于转移指令。

10. 堆栈寻址

在堆栈寻址的指令字中没有形式地址码字段,它是一种零地址指令。堆栈寻址要求计算机中设有堆栈。

堆栈一般可分为 硬堆栈(用寄存器组来实现)软堆栈(利用主存的一部分存储空间实现)

堆栈的运行方式为先进后出或先进先出两种,先进后出型堆栈的操作数只能从一个个进行读或写。

以软堆栈为例,可用堆栈指针 SP(Stack Point)指出栈顶地址,也可用 CPU 中一个或两个寄存器作为 SP。 操作数只能从栈顶地址指示的存储单元存或取。可见堆栈寻址也可视为一种隐含寻址,其操作数的地址总被隐含在 SP 中。堆栈寻址就其本质也可视为寄存器间址,因 SP 可视为寄存器,它存放着操作数的有效地址。

计算机组成原理|第七章(笔记)_第16张图片


7.4 指令格式举例


7.4.1 设计指令格式时应考虑的各种因素

  1. 兼容性:即高档机必须能兼容低档机的程序运行,称之为 “向上兼容”
  2. 其它因素:
    • 操作类型:包括指令个数及操作的难以程度
    • 数据类型:确定哪些数据类型可参与操作
    • 指令格式:指令字长是否固定,包括指令字长、操作码位数、地址码位数、地址个数、寻址方式以及指令字长和操作码位数是否可变等
    • 寻址方式:指令寻址、操作数寻址
    • 寄存器个数:寄存器的多少直接影响指令的执行时间

7.4.2 指令格式举例

1. IBM 360

IBM360属系列机,所谓系列机是指其基本指令系统相同,基本体系结构相同的一系列计算机,IBM370 对 IBM360 是向上兼容的。

计算机组成原理|第七章(笔记)_第17张图片

IBM 360/370 指令格式

2. Interl 8086

Intel 8086/80486 系列微机的指令字长为 1 ~ 6 个字节,即不定长。如零地址格式的空操作指令 NOP 只占一个字节;地址格式的 CALL 指令可以是 3 字节(段内调用)或5字节(段间调用);二地址格式指令中的两个操作数,既可以是寄存器一寄存器型、寄存器—存储器型,也可以是寄存器一立即数型或存储器一立即数型,它们所占的字节数分别为2、2 ~ 4、2 ~ 3、 3 ~ 6个字节。


7.5 RISC 技术

RISC 是精简指令系统计算机的英文缩写,即Reduced Instruction Set Computer,与其对应的是 CISC,即复杂指令系统计算机(Complex Instruction Set Computer)。


7.5.1 RISC 的产生和发展

计算机发展至今,硬件功能越来越强,但也越来越复杂。为了节省开销,人们希望新机种能兼容旧机种的软件,于是出现了同类型的系列机。然而,随着指令系统的发展,机器指令变得越来越复杂,导致编译器编写和代码执行效率下降。人们发现典型程序中只有 20% 的指令被频繁使用,而这些指令都是简单指令。因此,复杂指令的增加并不能提高执行速度。为解决这些问题,人们开始研究 CISC,并发现了 80-20 规律。

  • 典型程序中 80% 的语句仅仅使用处理机中 20% 的指令
  • 执行频度高的简单指令,因复杂指令的存在,执行速度无法提高

人们从 80-20 规律中得到启示:能否仅仅用最常用的 20% 的简单指令,重新组合不常用的 80% 的指令功能呢?这便引发出 RISC 技术。


7.5.2 CISC 的主要特征

  • 系统指令复杂庞大,各种指令使用频度相差大
  • 指令长度不固定、指令格式种类多、寻址方式多
  • 访存指令不受限制
  • CPU 中设有专用寄存器
  • 大多数指令需要多个时钟周期执行完毕
  • 采用微程序控制器

7.5.3 RISC 的主要特征

  • 选用使用频度较高的一些简单指令,复杂指令的功能由简单指令来组合
  • 指令长度固定、指令格式种类少、寻址方式少
  • 只有 LOAD/STORE 指令访存
  • CPU 中有多个通用寄存器
  • 采用流水技术,一个时钟周期内完成一条指令
  • 采用组合逻辑实现控制器

7.5.4 RISC和CISC的比较

  • RISC 更能充分利用 VLSI 芯片的面积
  • RISC 更能提高计算机运算速度
  • RISC 便于设计,可降低成本,提高可靠性
  • RISC 有效支持高级语言程序
  • RISC 不易实现指令系统兼容

上篇:第六章、计算机的运算方法

你可能感兴趣的:(理论学习,笔记,原理)