4 min read

Computer Composition Review Ch4 指令系统

Table of Contents

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

4.1.1 指令系统的发展

  • 计算机程序由一系列机器指令组成
    • 每条指令可完成一个独立的算术/逻辑运算操作
  • 指令系统(指令集)
    • 一台计算机中所有机器指令的集合
  • 复杂指令系统计算机 CISC
  • 精简指令系统计算机 RISC

4.1.2 指令系统的性能要求

  • 完备性
    • 指令系统丰富
    • 功能齐全
    • 使用方便
  • 有效性
    • 指令系统编写的程序可以高效率地运行
      • 程序存储空间小
      • 执行速度快
    • 功能更强、更完善的指令系统,一定有更好的有效性
  • 规整性
    • 指令系统
      • 对称性
        • 所有寄存器和存储器单元都可同等对待
        • 所有指令都可使用各种寻址方式
      • 匀齐性
        • 一种操作性质的指令可以支持各种数据类型
    • 指令格式和数据格式的一致性
      • 指令长度和数据长度有一定的关系,以方便处理和存取
      • 例如,指令长度和数据长度通常是字节长度的整数倍
  • 兼容性
    • 相同的基本结构和共同的基本指令系统
      • 指令系统兼容,软件也可通用

4.1.3 低级语言与硬件结构的关系

  • image.png|493
  • 指令系统体系结构
    • 机器语言程序员所看到的计算机属性
    • 组成
      • 寄存器组织
      • 存储器的组合和寻址方式
      • I/O 系统结构
      • 数据类型&表示
      • 指令系统
      • 中断机制
      • 机器工作状态定义&切换
      • 保护机制

4.2 指令格式

  • image.png

4.2.1 操作码

  • 操作码
    • 表示指令应进行怎样的操作,如加减乘除、存取数等
    • nn 位操作码最多能表示 2n2^n 条指令

4.2.2 地址码

  • image.png
    • 零地址指令
      • 只需要操作码,不需要地址,如停机操做
    • 一地址指令
      • 指定一个操作数,另一个操作数地址是隐含的,如累加寄存器 AC 中的数据,AC(AC)OP(A)AC \leftarrow (AC)OP(A)
    • 二地址指令
      • 两个地址
        • 参与操作的两个数的地址
        • 存放操作结果的地址
      • 依据操作数物理位置分类
        • 存储器存储器 SS
          • 从内存中取数,操作结果也存在内存中
          • 需要多次访问内存
        • 寄存器寄存器 RR
          • 从寄存器中取数,操作结果存在另一寄存器中
          • 不需要访问内存,执行速度快
        • 寄存器-存储器 RS
          • 既要访问内存,也要fa
    • 三地址指令
      • 被操作数地址
      • 操作数地址
      • 存放操作结果的地址

4.2.3 指令字长度

  • 指令字长度
    • 一个指令字中包含的二进制代码位数
  • 机器字长
    • 计算机能直接处理的二进制数据位数
    • 决定计算机运算精度
    • 通常与主存单元位数一致
  • 分类
    • 单字长指令
      • 指令字长度=机器字长
    • 半字长指令
      • 指令字长度=半个机器字长
    • 双字长指令
      • 指令字长度=两个机器字长
  • 指令系统
    • 等长指令字结构
      • 各指令字长相等,都是单字长或半字长指令
      • 结构简单
    • 变长指令字结构
      • 各指令字长随功能而不同
      • 充分利用指令长度,但控制较为复杂
  • 扩展操作码技术
    • 确保指令字长度尽可能统一,向地址码字段扩展操作码的长度
    • image.png|263
      • 通过全 1 作为扩展标识
        • eg:OP 域扩展到 A1A_1
          • 保留 1111 作为标识
          • 当 OP 域为 1111 时,说明已扩展到 A1A_1
          • 则 1111 XXXX 为操作码区域

4.2.4 指令助记符

  • 方便书写和阅读程序,使用 3-4 个英文缩写来代表二进制操作码的含义
  • image.png|479

4.2.5 指令格式举例

  • 八位微型计算机指令格式
    • image.png|437
  • MIPS R4000 指令格式
    • image.png|458
    • image.png|460
  • ARM 指令格式
    • image.png
  • Pentium 指令格式
    • image.png

4.3 操作数类型

4.3.1 一般的数据类型

  • 地址数据
    • 无符号整数
  • 数值数据
    • 定点整数/定点小数
    • 浮点数
    • 压缩十进制数,1 字节用 2 位 BCD 码表示
  • 字符数据
    • 7 位 ASCII 表示字符
    • 最高位第 8 位用于奇偶校验
  • 逻辑数据
    • 一个单元由若干个二进制位项组成

4.4 指令和数据的寻址方式

4.4.1 指令的寻址方式、

  • 顺序寻址方式
    • image.png|261
    • 按程序计数器中的顺序号(内存中的顺序)逐条进行取指并执行
  • 跳跃寻址方式
    • image.png|262
    • 指令地址由当前指令给出,而不是由程序计数器给出
    • 程序计数器跟踪新的指令地址
    • 程序转移/循环时,能缩短程序长度或作为公共程序进行引用

4.4.2 操作数基本寻址方式

  • 操作数来源
    • 地址码部分直接给出操作数
      • 简便快捷,但操作数固定不变
    • 操作数存在 CPU 中的通用寄存器中
      • 快捷获取,但数量有限
    • 操作数存在内存中
      • 有效地址
        • 指令直接给出操作数的实际访存地址
      • 形式地址
        • 地址字段给出形式地址,在指令执行时,变换成有效地址
  • 操作数寻址方式
    • 形成操作数的有效地址的方法
    • |423
    • 基本寻址方式
      • image.png|422

      • 隐含寻址

        • image.png
      • 立即寻址

        • 在地址字段直接指出操作数,而不是地址
        • 节省访问内存的时间
        • image.png
      • 直接寻址

        • 在地址字段直接指出内存地址(也称为直接地址)
        • image.png|160
      • 间接寻址

        • 地址字段并不是操作数的真实地址,而是真实地址的指示器
        • 间接寻址和直接寻址结合起来,通过特征位判断直接寻址还是间接寻址
        • 需要两次访存,影响执行速度
        • image.png
      • 寄存器寻址

        • 地址字段给出通用寄存器编号,寄存器中存放着操作数
        • image.png
      • 寄存器间接寻址

        • 地址字段给出通用寄存器编号,寄存器中存放着操作数地址
        • image.png
      • 偏倚寻址

        • 直接寻址+寄存器间接寻址
        • 隐含的地址和地址字段(或隐含引用,指某个专用寄存器)获得有效地址
        • image.png
        • 常用偏倚寻址
          • 相对寻址
            • 隐含引用的专用寄存器是程序计数器 PCPCEA=A+(PC)EA=A+(PC)
          • 基址寻址
            • 被引用的专用寄存器存有存储器地址,地址字段为相对于该存储器地址的偏移量
          • 变址寻址
            • 地址字段引用主存地址,被引用的专用寄存器存放正偏移量
            • 专用寄存器中的偏移量可变,例如访问数组,变址寄存器从 0 逐次 +1
      • 段寻址

        • image.png
      • 堆栈寻址

        • 寄存器堆栈/存储器堆栈
        • 数据存储都与栈顶地址进行
        • 需要一个隐式/显式的堆栈指示器
        • image.png

4.4.3 寻址方式举例

  • Pentium 寻址方式
    • image.png
  • Power PC 寻址方式
    • image.png

4.5 典型指令

4.5.1 指令分类

  • 数据传送指令
    • 存数指令、取数指令、传送指令、成组传送指令等
    • 用于实现主存和寄存器间或寄存器之间的数据传送
  • 算术运算指令
    • 二进制定点加减乘除,浮点数的加减乘除取反,求补等
    • 用于定点/浮点数的算术运算
  • 逻辑运算指令
    • 逻辑加,逻辑乘、按位加、逻辑位移等
    • 用于无符号数的位操作、代码转换、判断及运算
  • 程序控制指令
    • 一般采用直接寻址和相对寻址
    • 类型
      • 条件转移指令
      • 无条件转移指令
      • 转子程序指令
      • 返回主程序指令
      • 中断返回指令
  • 输入输出指令
  • 字符串处理指令
    • 字符串传送、字符串转换、字符串比较等
    • 非数值处理指令
  • 特权指令
    • 主要用于系统资源的分配和管理
    • 改变系统工作方式、检测用户的访问权限等
  • 其他指令
    • 状态寄存器置位、复位指令、测试指令等用于系统控制的特殊指令

4.5.2 基本指令系统的操作

  • image.pngimage.png

4.5.3 RISC 指令系统

  • 特点
    • 使用频率高的简单指令,指令条数小
    • 指令长度固定,格式种类少,寻址方式少
    • 只有取数/存数指令访问存储器,其他指令操作在寄存器中进行