Skip to content

3.5 指令系统的发展

本节探讨指令系统设计的演进,包括操作码的优化方法以及从复杂指令集到精简指令集的转变。

3.5.1 指令操作码的优化

  • 目标: 在满足所有指令编码的前提下,使操作码字段的平均长度最短,从而节省程序存储空间。

  • 哈夫曼编码 (Huffman Coding):

    • 原则: 对使用频率高的指令分配较短的操作码,对使用频率低的指令分配较长的操作码。
    • 特点: 是一种理论上最优的编码方法,可以得到最短的平均码长。但生成的编码长度不规整,硬件译码困难。
  • 扩展操作码法:

    • 是哈夫曼思想的一种工程实践。它将指令按地址数量或使用频率分组,为高频或地址多的指令分配短码,为低频或地址少的指令分配长码。
    • 比哈夫曼编码规整,更易于硬件实现。

3.5.2 从复杂指令系统到精简指令系统 (CISC vs. RISC)

1. 复杂指令系统计算机 (CISC - Complex Instruction Set Computer)

  • 设计思想: 增强指令功能,用一条复杂的指令代替一串简单的指令,力图缩小高级语言与机器语言的"语义差距"。
  • 特点:
    • 指令数量多,功能复杂。
    • 指令长度可变,格式多样。
    • 支持多种复杂的寻址方式。
    • 控制器大多采用微程序控制

2. 精简指令系统计算机 (RISC - Reduced Instruction Set Computer)

  • 设计思想: 基于 "80-20" 原则(程序中80%的时间在执行20%的简单指令),简化指令系统,提高执行效率。将复杂功能交给编译器用简单指令组合实现。
  • 特点:
    • 指令数量少,功能单一。
    • 指令长度固定,格式规整。
    • 寻址方式少,通常只有 LOAD/STORE 指令能访问内存。
    • 大量使用寄存器,采用 "Load-Store" 结构。
    • 控制器大多采用硬布线逻辑,易于实现指令流水线

CISC 与 RISC 对比

特性CISC (复杂指令集)RISC (精简指令集)
指令系统复杂、庞大 (>200条)简单、精简 (<100条)
指令长度不固定固定
寻址方式多 (>4种)少 (<4种)
访存指令无限制LOADSTORE 指令
通用寄存器较少较多
控制器微程序控制组合逻辑控制 (硬布线)
编译优化较难容易
执行效率单条指令执行时间相差大绝大多数指令在一个时钟周期内完成

3.5.3 设计RISC的关键技术

  1. 重叠寄存器窗口 (Overlapping Register Windows):

    • 目的: 加快子程序调用时的参数传递和现场保存。
    • 方法: CPU内设置大量寄存器,并划分为多个"窗口"。调用子程序时,切换窗口,通过让父程序和子程序的窗口部分重叠来实现快速的参数传递,避免了频繁访存。
  2. 延迟转移技术 (Delayed Branch):

    • 目的: 解决流水线中由转移指令引起的"断流"问题。
    • 方法: 编译器在转移指令之后插入一条或多条与转移结果无关的有效指令(称为延迟槽指令)。无论转移是否发生,这些指令都会被执行,从而填补了流水线的空闲,提高了效率。
  3. 指令流调整和编译优化:

    • RISC 的性能在很大程度上依赖于编译器的优化能力。编译器负责将高级语言高效地翻译成简单的RISC指令序列,并通过指令调度来解决数据相关、资源冲突等流水线问题。

易考点和难点

易考点

  • 核心考点: CISC和RISC的特点对比。这是一个非常经典的考点,需要熟记对比表格中的各项内容。
  • 易考点: 理解RISC为提高流水线效率而采用的关键技术,特别是延迟转移的基本思想。

难点

  • 难点: 深入理解重叠寄存器窗口的工作原理和延迟转移的实现细节。