第七章 指令系统

第七章 指令系统

 

7.1 机器指令

7.1.1 指令的一般格式

在这里插入图片描述

 1. 操作码

  操作码用来指明该指令所要完成的操作。操作码分为长度固定和长度可变两种。
  ① 对于长度固定的操作码,无论地址码字段有多长,能容纳有几个操作数,操作码的长度都不变,所能容纳的操作的数量也不变;
  ② 对于长度可变的操作码,随着操作数个数的减少,地址码字段的长度也会减少,进而操作码的长度就会增加,所能容纳的操作的数量也会增加。
  扩展操作码技术:
在这里插入图片描述
  三地址指令操作码每减少一种,最多可多构成 2 4 ^4 4 种二地址指令;二地址指令操作码每减少一种,最多可多构成 2 4 ^4 4 种一地址指令。

 2. 地址码

  地址码用来指出该指令的源操作数的地址、结果的地址、下一条指令的地址。这里的 “地址” 可以是主存的地址,也可以是寄存器的地址,甚至可以是 I/O 设备的地址。
  地址码可以根据地址字段的个数进行分类,在以下分析中,假设指令字长为 32 位
操作码固定为 8 位。

  (1) 四地址指令

在这里插入图片描述
  其中OP为操作码,A 1 _1 1 是第一操作数地址,A 2 _2 2 是第二操作数地址,A 3 _3 3 是结果的地址,A 4 _4 4 是下一条指令地址。
  该指令完成 (A 1 _1 1) OP (A 2 _2 2) → A 3 _3 3 的操作,每一个操作数的地址占 6 位,其寻址范围为 2 6 ^6 6 = 64;这种指令执行期间会访存 4 次 (取指令一次,取两个操作数两次,存放结果一次)。
  程序计数器 PC 既能存放当前欲执行的指令的地址,又具有计数功能,能自动形成下一条指令的地址,因此可以用 PC 代替 A 4 _4 4,由四个操作数变为三个操作数,从而每个操作数所占的地址位数也会增加。

  (2) 三地址指令

在这里插入图片描述
  该指令完成 (A 1 _1 1) OP (A 2 _2 2) → A 3 _3 3 的操作,每一个操作数的地址占 8 位,其寻址范围为 2 8 ^8 8 = 128;这种指令执行期间依旧会访存 4 次。
  指令执行时,没有必要将每次的结果都放入主存,也可以暂时存放在寄存器 (如ACC) 中,这样有可以省去一个地址字段 A 3 _3 3,由三个操作数变为两个操作数。

  (3) 二地址指令

在这里插入图片描述
  该指令完成 (A 1 _1 1) OP (A 2 _2 2) → A 1 _1 1 或 (A 1 _1 1) OP (A 2 _2 2) → A 2 _2 2 的操作,每一个操作数的地址占 12 位,其寻址范围为 2 1 2 ^12 12 = 4K。
  如果把结果放入主存,那么这种指令执行期间依旧会访存 4 次,如果把结果暂时存放在寄存器 (如ACC) 中,那么这种指令执行期间会访存 3 次。
  如果将一个操作数隐含在运算器的 ACC 中,那么又可以省去一个操作数。

  (4) 一地址指令

在这里插入图片描述
  该指令完成 (ACC) OP (A 1 _1 1) ACC 的操作,每一个操作数的地址占 12 位,其寻址范围为 2 2 4 ^24 24 = 16M;这种指令执行期间会访存 2 次。

  (5) 零地址指令

  有一些操作不需要地址码,如空操作、停机;有些指令的操作数的地址隐含在堆栈指针 SP 中。这些指令都是零地址指令。

  当用一些硬件资源代替指令字中的地址码字段后:
    ✦ 可扩大指令的寻址范围
    ✦ 可缩短指令字长
    ✦ 可减少访存次数
  当指令的地址字段为寄存器时:
    ✦ 可缩短指令字长
    ✦ 指令执行阶段不访存
在这里插入图片描述

7.1.2 指令字长

  指令字长决定于:
    ✦ 操作码的长度
    ✦ 操作数地址的长度
    ✦ 操作数地址的个数
  指令字长固定的情况下,指令字长 = 存储字长;
  指令字长可变的情况下,指令字长按字节的倍数变化,即 1 个字 = 1、2、3 字节或… = 8、16、24位…
 

7.2 操作数类型和操作类型

7.2.1 操作数类型

  ✦ 地址:在进行地址计算时,可以把地址看作是一种无符号整数。
  ✦ 数字:常见的数字有定点数、浮点数、十进制数等。
  ✦ 字符:普遍采用 ASCII 码表示。
  ✦ 逻辑数:可以参与逻辑运算。

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

 1. 边界对准与否
  (1) 边界对准

在这里插入图片描述

  (2) 边界未对准

  该存放方式对于字长较长的数据进行存取时,需要读取两次存储器,而后还需要对高低字节的位置进行调整,才能求得相应的数据,如下图的阴影部分的数据。
在这里插入图片描述

 2. 字节次序

在这里插入图片描述

7.2.3 操作类型

 1. 数据传送

在这里插入图片描述

 2. 算术逻辑操作

  算术运算:加、减、乘、除、增 1、减 1、求补、浮点运算、十进制运算;
  逻辑运算:与、或、非、异或、位操作、位测试、位清除、位求反。

 3. 移位操作

  包括算术移位、逻辑移位、循环移位。

 4. 转移
  (1) 无条件转移

  例如 JMP X,其功能为将指令地址无条件转至X。

  (2) 条件转移

  根据当前指令的执行结果来决定是否转移,条件满足则转移,条件不满足则继续顺序执行。
  例如,结果为零转指令 (Z = 1) :JZ;结果溢出转指令 (O = 1) :JO;结果有进位转指令 (C = 1) :JC。
  还有一种条件转移指令 SKP,它暗示跳过下一条指令。例如下图的例子中,如果条件满足 (即完成触发器 D 为 0),则执行完第 305 条指令后,立即跳至第 207 条指令,再顺序执行。
在这里插入图片描述

  (3) 调用和返回

  ✦ 子程序可在多处被调用;
  ✦ 子程序调用可以出现在子程序中,即允许子程序嵌套;
  ✦ 每个 CALL 指令都对应一条 RETURN 指令。
在这里插入图片描述

  (4) 陷阱 (Trap) 与陷阱指令

  陷阱就是一种意外事故的中断,例如电源电压不稳、输入输出设备故障、除数为0等情况。
  计算机的陷阱指令一般不提供给用户直接使用,而作为隐指令 (即指令系统中不提供的指令),在出现事故时,由 CPU 自动产生并执行。
  有的机器也设置供用户使用的陷阱指令,这种陷阱指令可以用来完成系统调用。

 5. 输入输出

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

7.3 寻址方式

  寻址方式即,确定本条指令的操作数地址和下一条欲执行指令的指令地址的方法。寻址方式分为指令寻址和数据寻址两大类。

7.3.1 指令寻址

  指令寻址分为顺序寻址和跳跃寻址:
    ✦ 顺序寻址由 PC 完成,自动形成下一条指令的地址;
    ✦ 跳跃寻址由转移类指令完成。
在这里插入图片描述

7.3.2 数据寻址

  数据寻址方式种类较多,在指令字中必须设一字段来指明属于哪一种寻址方式。指令的地址码字段通常都不代表操作数的真实地址,故把它称为形式地址,记作 A。操作数的真实地址称为有效地址,记作EA,它是由寻址方式和形式地址共同来确定的。由此可得指令的格式应如下图所示。
在这里插入图片描述
  为了便于分析研究各类寻址方式,假设指令字长、存储字长、机器字长均相同。

 1. 立即寻址

  形式地址 A 不是操作数的地址,而是操作数本身。
    ✦ 立即数用补码形式存放;
    ✦ 指令执行阶段不访存;
    ✦ A 的位数限制了立即数的范围。
在这里插入图片描述

 2. 直接寻址

  形式地址 A 就是操作数的真实地址 EA。
    ✦ 执行阶段访问一次存储器;
    ✦ A 的位数决定了该指令操作数的寻址范围;
    ✦ 操作数的地址不易修改 (必须修改 A 才能修改操作数) 。
在这里插入图片描述

 3. 隐含寻址

  指令字中不明显给地给出操作数的地址,其操作数的地址隐含在操作码或某个寄存器中。
在这里插入图片描述
  如 Intel 8086 中的乘法指令 MUL,被乘数隐含在 AX (16位) 或 AL (8位) 中。又如字符串传送指令 MOVS,源操作数的地址隐含在寄存器 SI 中,目的操作数的地址隐含在寄存器 DI 中。
    ✦ 指令字中少了一个地址字段,可缩短指令字长。

 4. 间接寻址

  有效地址由形式地址间接提供,即 EA = (A) 。
在这里插入图片描述
  多次间址中,可用存储字的首位标记间址是否结束。
  由于 A 的位数小于指令字长,而指令字长与存储字长相同,即若 A 为 8 位,存储字长为 16 位,则直接寻址范围为 2 8 ^8 8,一次间接寻址的寻址范围为 2 16 ^{16} 16
  在子程序返回时,例如下图,只要在调用前先将返回地址存入子程序最末条指令的形式地址 A 的存储单元中,便可准确返回到源程序断点。例如,第一次调用子程序时,[A] = 81,第二次调用子程序时,[A] = 202。
在这里插入图片描述
    ✦ 执行指令阶段 2 次访存 (一次间址) 或多次访存 (多次寻址);
    ✦ 可扩大寻址范围;
    ✦ 便于编制程序,很方便地完成子程序返回。

 5. 寄存器寻址

  形式地址部分直接指出寄存器号,即 EA = R i _i i,寄存器中存放着操作数。
在这里插入图片描述
    ✦ 执行阶段不访存,只访问寄存器,执行速度快;
    ✦ 寄存器个数有限,可缩短指令字长。

 6. 寄存器间接寻址

  形式地址部分直接指出寄存器号,但寄存器中存放着操作数所在的主存单元的地址号,即 EA = (R i _i i)。
在这里插入图片描述
    ✦ 有效地址在寄存器中, 操作数在存储器中,执行阶段访存比间接寻址少 1 次;
    ✦ 便于编制循环程序。

 7. 基址寻址

  需要一个基址寄存器 BR,有效地址 EA 等于基址寄存器中的地址加上形式地址 A,即 EA = (BR) + A。

  (1) 采用专用寄存器作基址寄存器


    ✦ 可扩大寻址范围;
    ✦ 在程序的执行过程中 BR 内容不变,形式地址 A 可变;
    ✦ 有利于多道程序,用户不必知道自己的程序存放在主存的什么位置,只需要操作系统赋予 BR 一个值,就能够完成从程序的逻辑地址到主存的物理地址的转化。

  (2) 采用通用寄存器作基址寄存器

在这里插入图片描述
    ✦ 由用户指定哪个通用寄存器作为基址寄存器;
    ✦ 基址寄存器的内容由操作系统确定;
    ✦ 在程序的执行过程中 R 0 _0 0 内容不变,形式地址 A 可变。

 8. 变址寻址

  需要一个基址寄存器 IX,有效地址 EA 等于基址寄存器中的地址加上形式地址 A,即 EA = (IX) + A。
在这里插入图片描述
    ✦ 可扩大寻址范围;
    ✦ IX 的内容由用户给定;
    ✦ 在程序的执行过程中 IX 内容可变,形式地址 A 不变 (这也是和基址寻址的不同之处);
    ✦ 便于处理数组问题。
  例:设数据块首地址为 D,求 N 个数的平均值。
在这里插入图片描述

 9. 相对寻址

  有效地址 EA 等于程序计数器 PC 中的地址加上形式地址 A,即 EA = (PC) + A,A 是相对于当前指令的位移量 (可正可负,用补码表示)。
在这里插入图片描述
    ✦ A 的位数决定操作数的寻址范围;
    ✦ 对程序浮动 (即不知道程序在主存中的位置) 很有利;
    ✦ 广泛用于转移指令。
  例:相对寻址举例
  M 随程序所在存储空间的位置不同而不同,而指令 BNE –3 与 指令 ADD X, D 相对位移量不变,指令 BNE –3 操作数的有效地址为EA = ( M+3 ) –3 = M。
在这里插入图片描述
  例:按字节寻址的相对寻址举例
  设当前指令地址 PC = 2000H,转移后的目的地址为 2008H,因为是二字节指令,所以取出 JMP * + 8 后 PC = 2002H,因此 JMP * + 8 指令 的第二字节为 2008H - 2002H = 06H。
在这里插入图片描述

 10. 堆栈寻址
  (1) 堆栈的特点

  堆栈既可以用寄存器组实现 (称为硬堆栈),也可以用主存的一部分空间做堆栈 (称为软堆栈)。
  下面以先进后出型堆栈 (一个入出口) 为例, 栈顶地址由堆栈指针 SP 指出。
在这里插入图片描述

  (2) 堆栈寻址举例

在这里插入图片描述

  (3) SP 的修改与主存编址方法有关

  ① 按字编址
    进栈:(SP) + 1 → SP
    出栈:(SP) - 1 → SP
  ② 按字节编址
    存储字长 16 位
     进栈:(SP) + 2 → SP
     出栈:(SP) - 2 → SP
    存储字长 32 位
     进栈:(SP) + 2 → SP
     出栈:(SP) - 2 → SP

 11. 基本寻址方式的算法和优缺点

在这里插入图片描述
 

7.4 指令格式举例

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

 1. 指令系统的兼容性

  必须考虑新机器的指令系统与同一系列机器指令系统的兼容性,即高档机必须能兼容低档机程序的运行,称之为 “向上兼容”。

 2. 其他因素

  ① 操作类型:包括指令个数及操作的难易程度
  ② 数据类型:确定哪些数据类型可参与操作
  ③ 指令格式:指令字长是否固定,操作码位数、是否采用扩展操作码技术,地址码位数、地址个数、寻址方式类型
  ④ 寻址方式:指令寻址、操作数寻址用什么方式
  ⑤ 寄存器个数:寄存器的多少直接影响指令的执行时间

 3. 指令系统设计原则

  ① 完备性:指令丰富,功能齐全,使用方便
  ② 有效性:程序占空间小,执行速度快
  ③ 规整性:
    对称性 (对不同寻址方式的支持)
    匀齐性 (对不同数据类型的支持)
    一致性 (指令长度和数据长度的一致性)
  ④ 兼容性:系列机软件向上兼容
  难以兼得!

7.4.2 指令格式举例

 1. PDP-8

  PDP-8 的指令字长统一为 12 位,CPU 内只设一个通用寄存器,即累加器 ACC,其主存被划分为若干个容量相等的存储空间 (每个相同的空间被称为一页)。该机的指令格式可分为三大类,如下图所示。
在这里插入图片描述

  访存类指令属一地址指令。0~2 位为操作码 (只定义了000-101六种基本操作);3、4两位为寻址特征位,其中3位表示是否间接寻址,4位表示是当前页面 (即PC指示的页面) 还是0页面;5-11位为地址码。
  为了扩大操作种类,对应操作码 “111” 又配置了辅助操作码,构成了寄存器类指令,这类指令主要对 ACC 进行各种操作,如清A、对A取反、对A移位、对A加1、根据A的结果是否跳转等。辅助操作码的每一位都有一个明确的操作。
  第三类指令是 I/O 类,用 0-2 位为 110 作标志,其具体操作内容由 9-11 位反映,3~8位表示设备号,总共可选64种设备。
  PDP-8指令格式支持间接寻址、变址寻址、相对寻址。加上操作码扩展技术,共有35条指令。

 2. PDP-11

  PDP-11 机器字长为 16 位,CPU内设 8 个 16 位通用寄存器,其中两个通用寄存器有特殊作用,一个用作堆栈指针SP,一个用作程序计数器PC。
  PDP-11 指令字长有 16 位、32 位和 48 位三种,采用操作码扩展技术,使操作码位数不固定,指令字的地址格式有零地址、一地址、二地址等共有 13 类指令格式,下图列出了其中五种。
在这里插入图片描述
  图中 (a) 为零地址格式;(b) 为一地址格式,其中 6 位目的地址码中的 3 位为寻址特征位,另外 3 位表示 8 个寄存器中的任一个;©、(d)、(e) 均为二地址格式指令,但操作数来源不同,有寄存器-寄存器型、寄存器-存储器型和存储器-存储器型。
  PDP-11 指令系统和寻址方式比较复杂,既增加了硬件的价格,又增加了编程的复杂度,但好处是能编出非常高效的程序。

 3. MIPS指令格式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

 4. X86指令系统举例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
 MIPS X86 差异:
在这里插入图片描述
 

7.5 RISC 技术

  RISC (Reduced Instruction Set Computer) 精简指令系统计算机
  CISC (Complex Instruction Set Computer) 复杂指令系统计算机

7.5.1 RISC 的产生和发展

  80-20 规律:典型程序中 80% 的语句仅仅使用处理机中 20% 的指令。
  然而执行频度高的简单指令,因复杂指令的存在,执行速度无法提高。
  能否用 20% 的简单指令组合不常用的80% 的指令功能?

7.5.2 RISC 的主要特征

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

7.5.3 CISC 的主要特征

  ✦ 系统指令复杂庞大,各种指令使用频度相差大
  ✦ 指令长度不固定、指令格式种类多、寻址方式多
  ✦ 访存指令不受限制
  ✦ 访存指令不受限制
  ✦ 大多数指令需要多个时钟周期执行完毕
  ✦ 采用微程序控制器
  ✦ 难以用优化编译生成高效的目的代码

7.5.4 RISC和CISC 的比较

  1. RISC更能充分利用 VLSI 芯片的面积
  2. RISC 更能提高计算机运算速度,指令数、指令格式、寻址方式少,通用寄存器多,采用组合逻辑 ,便于实现指令流水
  3. RISC 便于设计,可降低成本,提高可靠性
  4. RISC 有利于编译程序代码优化
  5. RISC 不易实现指令系统兼容

  • 8
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值