dong-frank的博客

第十三讲 指令系统

字数统计: 1.5k阅读时长: 5 min
2025/02/18

第十三讲 指令系统

计算机功能

  • 计算机的基本功能是执行程序
  • 程序由存储在内存中的一组指令组成
  • CPU通过执行指定的指令来完成实际工作

指令集: CPU能执行的各种不同指令的集合

指令

指令的要素

  1. 操作码: 指定将要完成的操作
  2. 源操作数引用: 操作会涉及一个或多个源操作数,这是操作所需的输入
  3. 结果操作数引用: 操作可能会产生一个结果
  4. 下一指令引用: 告诉处理器这条指令执行完成后到哪儿去取下一条指令

寻址方式

一些记号
A: 指令中地址字段的内容
R: 指向寄存器的指令地址字段的内容
EA: 被访问位置的实际(有效)地址
(X): 存储器位置X或寄存器X的内容

立即寻址

  • 方法: 操作数实际出现在指令中
  • 用法: 定义和使用常数或设置变量的初始值
  • 算法: 操作数 = A
  • 优点: 除了取指令之外,获得操作数不要求另外的存储器访问
  • 缺点: 数的大小受限于地址字段的长度

直接寻址

  • 方法: 地址字段含有操作数的有效地址
  • 用法: 早期计算机常用,在当代计算机体系结构中不多见
  • 算法: EA = A
  • 优点: 只要求1次存储器访问,且无需为生成地址而专门计算
  • 缺点: 地址空间是有限的

间接寻址

  • 方法: 地址字段指示一个存储器字地址, 而此地址处保存有操作数的全长度地址
  • 算法: EA = (A)
  • 优点: 扩大了地址空间
  • 缺点: 取操作数需要2次访问存储器
  • 限制地址引用的数量, 防止无限循环寻址

寄存器寻址

  • 方法: 地址字段指示的是寄存器
  • 算法: EA = R
  • 优点: 指令中仅需要一个较小的地址字段, 且不需要存储器访问
  • 缺点: 地址空间十分有限
  • 寄存器寻址只有在被有效使用的时候才有意义

寄存器间接寻址

  • 方法: 地址字段指示的是寄存器, 寄存器中保存有操作数的全长度地址
  • 算法: EA = (R)
  • 优点: 扩大了地址空间,比间接寻址少1次存储器访问
  • 缺点: 相对于寄存器寻址,需要多1次存储器访问

偏移寻址

  • 方法: 结合直接寻址和寄存器间接寻址能力
  • 算法: EA = (R) + A
  • 类型
    • 相对寻址
    • 基址寄存器寻址
    • 变址
  • 偏移寻址要求指令有两个地址字段,至少其中一个是显式的

相对寻址

  • 方法: 隐含引用的寄存器是程序计数器
  • 用法: 大多数存储器访问都相对靠近正在执行的指令,相对寻址可节省指令中的地址位数
  • 算法: EA = (PC) + A
  • 优点: 利用程序局部性原理,节省指令中地址的位数

基址寄存器寻址

  • 方法: 被引用的寄存器含有一个存储器地址,地址字段含有一个相对于那个地址的偏移量(通常是无符号整数表示)
  • 用法: 虚拟内存空间中的程序重定位
  • 算法: EA = (B) + A

变址寻址

  • 方法: 指令地址字段引用一个主存地址,被引用的寄存器含有对于该地址的一个正的偏移量
  • 用法: 为完成重复操作提供一种高效机制
  • 算法: EA = A + (R)

栈寻址

  • 方法: 栈指针保存在寄存器中,对寄存器中栈位置的访问实际上是一种寄存器间接寻址方式

指令格式

  • 指令格式通过它的各个构成部分来定义指令的位安排
  • 一个指令格式必须包含一个操作码,以及隐式或显式的、零个或多个操作数
  • 指令格式必须显式或隐式地为每个操作数指定其寻址方式
  • 大多数指令集使用不止一种指令格式

设计原则

  • 指令尽量短
  • 有足够的操作码位数
  • 操作码的编码必须有唯一的解释
  • 指令长度是字节的整数倍
  • 合理选择地址字段的个数
  • 指令尽量规整

指令长度

  • 最明显的权衡考虑是在强有力的指令清单和节省空间之间进行
    • 编程人员希望更多的操作码、更多的操作数、更多的寻址方式和更大的地址范围
    • 指令长度变短可以节省存储空间和减少数据传送时间
  • 指令长度应该是字符长度或定点数长度的整数倍
  • 指令长度应该等于存储器的传送长度(即数据总线宽度),或者这两个值其中之一是另一个的整数倍

指令集设计

设计的基本原则

  • 完备性/完整性:操作类型应当尽可能完备,但太复杂了也会给硬件实现增加困难
  • 兼容性:应当兼容以前的指令系统,为软件重复利用带来方便
  • 均匀性:应当能对多种类型的数据进行处理
  • 可扩充性:操作码要预留一定的编码空间

设计的基本问题

  • 操作指令表:应提供多少和什么样的操作,操作有多复杂
  • 数据类型:对哪几种数据类型完成操作
  • 指令格式:指令的位长度、地址数目、各个字段的大小等
  • 寄存器:能被指令访问的寄存器数目以及它们的用途
  • 寻址:寻址方式的种类以及有效地址的计算
  • 下一条指令地址的确定:通常通过PC寄存器实现

易错题目

alt text
alt text

CATALOG
  1. 1. 第十三讲 指令系统
    1. 1.1. 计算机功能
    2. 1.2. 指令
    3. 1.3. 寻址方式
    4. 1.4. 指令格式
    5. 1.5. 指令集设计
    6. 1.6. 易错题目