--- tags: - 计算机系统结构 - 复习 - 指令系统 create time: 2026-06-15 10:00 --- # 指令系统设计 ## 概述 本文档讲解指令系统(ISA)的设计原则与编码技术,包括指令格式设计、操作码编码(定长/扩展)、RISC vs CISC 的核心差异。指令系统是软硬件的分界面,其设计直接影响计算机的性能和可编程性。 > [!tip] 考试重点 > 扩展操作码的指令格式设计是分析题高频考点,需掌握定长操作码与等长扩展码的计算方法。RISC 原则常以选择题形式出现。 ## 正文 ### 一、指令格式设计 一条指令通常由**操作码**和**地址码**组成: ``` ┌──────────┬──────────┬──────────┬──────────┐ │ 操作码 │ 地址1 │ 地址2 │ 地址3 │ └──────────┴──────────┴──────────┴──────────┘ ``` **指令字长** = 操作码位数 + 各地址码位数之和 > [!question] 为什么指令格式设计需要权衡? > 操作码越长,可表示的指令种类越多,但地址码空间被压缩;地址码越多,寻址能力越强,但指令字长增加,取指开销增大。 ### 二、操作码编码方式 #### 2.1 定长操作码 所有指令的操作码位数相同,格式规整,译码简单。 **例**:指令字长 16 位,地址字段 6 位,双地址指令需 $16 - 6 \times 2 = 4$ 位操作码 → 最多 $2^4 = 16$ 条指令。 #### 2.2 扩展操作码(变长操作码) 通过在操作码中设置**扩展标志位**,使不同类型的指令拥有不同长度的操作码,从而在固定指令字长下支持更多指令。 **设计原则**: 1. 使用频率高的指令分配短操作码 2. 使用频率低的指令分配长操作码 3. 短操作码不能是长操作码的前缀 > [!example] 例:12 位指令字长,3 位地址字段 > > | 类型 | 操作码 | 地址数 | 可用编码空间 | > |:----:|:------:|:------:|:----------:| > | 三地址 | 3 位 | 3 | $2^3 = 8$(用 4 个) | > | 二地址 | 6 位 | 2 | 余下 4 个 × $2^3 = 32$(用 8 个) | > | 单地址 | 9 位 | 1 | 余下编码 × $2^3 = 190$ 条 | ### 三、RISC vs CISC | 特性 | RISC | CISC | |------|------|------| | 指令数量 | 少(< 200) | 多(数百~上千) | | 指令长度 | **等长**(通常 32 位) | 变长 | | 寻址方式 | 少(2~3 种) | 多(十几种) | | 执行周期 | **单周期**为主 | 多周期 | | 访存方式 | **Load-Store**(仅 load/store 访存) | 任意指令可访存 | | 控制方式 | **硬连线**(速度快) | 微程序(灵活) | | 寄存器 | 多(32+ 通用寄存器) | 少 | | 编译器 | 依赖编译器优化 | 硬件承担更多 | > [!warning] RISC 的常见误解 > - RISC 不是"指令功能简单",而是"指令数量少、格式规整" > - RISC 的单周期是指理想情况,Cache 不命中等仍会导致多周期 > - RISC 使用 Load-Store 架构,ALU 操作只在寄存器间进行 > [!question] 为什么 RISC 采用 Load-Store 架构? > 将访存操作限制在专用的 load/store 指令中,使得其他所有指令都只访问寄存器,速度更快、时序更简单,有利于流水线实现。同时,编译器可以更方便地调度指令顺序来隐藏访存延迟。 ### 四、寻址方式 | 寻址方式 | 有效地址 | 适用场景 | |----------|----------|----------| | 立即寻址 | 操作数在指令中 | 常量赋值 | | 寄存器寻址 | EA = R | 高速操作 | | 直接寻址 | EA = A | 全局变量 | | 间接寻址 | EA = (A) | 指针 | | 基址寻址 | EA = R + A | 数组基址 | | 变址寻址 | EA = A + R | 数组下标 | ## 关联笔记 - [[计算机系统结构/复习文档/计算机系统结构基础与定量原理]] - [[计算机系统结构/复习文档/流水线技术]] - [[计算机系统结构/index|试题册索引]]