Files
final-exam/计算机系统结构/复习文档/指令系统设计.md
T

97 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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|试题册索引]]