vault backup: 2026-06-15 22:39:56
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
---
|
||||
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|试题册索引]]
|
||||
Reference in New Issue
Block a user