10 KiB
第7章 指令系统
📖 本章介绍机器指令系统的分类、寻址方式和指令格式设计。 🎯 重点理解寻址方式和指令格式设计
📋 本章目录
7.1 机器指令
7.1.1 指令的一般格式
[!info] 定义 机器指令是计算机能识别和执行的基本命令,由操作码和地址码组成。
graph LR
subgraph "指令格式"
OP[操作码] --> ADDR[地址码]
end
操作码
功能:指明指令要完成的操作
长度:
- 固定长度:便于硬件设计,译码快
- 可变长度:节省空间,译码复杂
地址码
功能:指出操作数地址、结果地址、下条指令地址
格式分类:
graph TB
A[指令格式] --> B[四地址指令]
A --> C[三地址指令]
A --> D[二地址指令]
A --> E[一地址指令]
A --> F[零地址指令]
| 格式 | 地址字段 | 操作 | 访存次数 |
|---|---|---|---|
| 四地址 | A1, A2, A3, A4 | (A1)OP(A2)→A3 | 4次 |
| 三地址 | A1, A2, A3 | (A1)OP(A2)→A3 | 4次 |
| 二地址 | A1, A2 | (A1)OP(A2)→A1 | 4次 |
| 一地址 | A1 | ACCOP(A1)→ACC | 2次 |
| 零地址 | 无 | 栈操作 | 0-2次 |
[!example] 示例 四地址指令:OP A1 A2 A3 A4
- (A1) OP (A2) → A3
- 下条指令地址 = A4
7.1.2 扩展操作码技术
[!info] 目的 在指令字长固定的情况下,增加指令种类。
原理:操作码长度随地址数减少而增加
graph TB
subgraph "扩展操作码示例(16位指令)"
A["4位操作码<br/>15条三地址指令"] --> B["8位操作码<br/>15条二地址指令"]
B --> C["12位操作码<br/>15条一地址指令"]
C --> D["16位操作码<br/>16条零地址指令"]
end
设计原则:
- 使用频度高的指令用短操作码
- 使用频度低的指令用长操作码
- 为扩展留有余地
7.2 操作数类型和操作类型
7.2.1 操作数类型
| 类型 | 说明 | 示例 |
|---|---|---|
| 地址 | 无符号整数 | 指向存储器位置 |
| 数值 | 定点数、浮点数 | 算术运算 |
| 字符 | ASCII码 | 文本处理 |
| 逻辑数 | 位串 | 逻辑运算 |
7.2.2 操作类型
数据传送类
| 指令 | 功能 | 示例 |
|---|---|---|
| MOV | 数据传送 | MOV AX, BX |
| LOAD | 从存储器取数 | LOAD R1, [addr] |
| STORE | 存数到存储器 | STORE [addr], R1 |
| PUSH/POP | 栈操作 | PUSH AX |
算术逻辑类
| 指令 | 功能 | 示例 |
|---|---|---|
| ADD/SUB | 加/减 | ADD AX, BX |
| MUL/DIV | 乘/除 | MUL BX |
| AND/OR/NOT | 逻辑运算 | AND AX, BX |
| CMP | 比较 | CMP AX, BX |
| SHL/SHR | 移位 | SHL AX, 1 |
控制转移类
| 指令 | 功能 | 示例 |
|---|---|---|
| JMP | 无条件跳转 | JMP addr |
| JZ/JNZ | 条件跳转 | JZ addr |
| CALL | 调用子程序 | CALL addr |
| RET | 返回 | RET |
| INT | 中断 | INT 21H |
7.3 寻址方式
[!info] 定义 寻址方式是指令中如何给出操作数地址或操作数的方式。
7.3.1 指令寻址
顺序寻址
graph LR
PC[PC] --> |"PC+1"| NEXT[下一条指令]
跳跃寻址
graph LR
PC[PC] --> |"JMP addr"| TARGET[目标指令]
7.3.2 数据寻址
指令格式:
graph LR
subgraph "数据寻址格式"
OP[操作码] --> MOD[寻址特征] --> ADDR[形式地址]
end
有效地址:EA = f(寻址方式, 形式地址)
常见寻址方式
1. 立即寻址
[!info] 特点 操作数直接在指令中
格式:OP #立即数
有效地址:$EA = 指令地址 + 1$(操作数在指令中)
优点:速度快,不需要访存 缺点:操作数范围受地址字段限制
2. 直接寻址
[!info] 特点 地址字段直接给出操作数地址
格式:OP A
有效地址:EA = A
优点:简单,只需一次访存 缺点:寻址范围受地址字段限制
3. 间接寻址
[!info] 特点 地址字段给出的是操作数地址的地址
格式:OP (A)
有效地址:EA = (A)
优点:寻址范围大 缺点:多次访存,速度慢
graph LR
A[形式地址A] --> |"第一次访存"| B[地址B]
B --> |"第二次访存"| C[操作数]
4. 寄存器寻址
[!info] 特点 操作数在寄存器中
格式:OP R
有效地址:EA = R
优点:速度快,不需要访存 缺点:寄存器数量有限
5. 寄存器间接寻址
[!info] 特点 寄存器中存放的是操作数的地址
格式:OP (R)
有效地址:EA = (R)
优点:寻址范围大,只需一次访存 缺点:需要一次访存
6. 偏移寻址
基址寻址
格式:OP A,基址寄存器BR
有效地址:EA = (BR) + A
特点:
- 便于程序重定位
- 基址寄存器内容不变
- 形式地址可变
变址寻址
格式:OP A,变址寄存器IX
有效地址:EA = (IX) + A
特点:
- 便于数组操作
- 变址寄存器内容可变
- 形式地址不变
[!example] 数组访问示例 访问数组元素:
EA = (IX) + A
- A:数组首地址
- IX:元素下标
- 每次IX+1,访问下一个元素
相对寻址
格式:OP A
有效地址:EA = (PC) + A
特点:
- 程序浮动
- A是相对于PC的偏移量
7. 堆栈寻址
格式:PUSH/POP 操作数
有效地址:
- PUSH:先SP-1,再存数
- POP:先取数,再SP+1
特点:后进先出(LIFO)
寻址方式对比
| 寻址方式 | 有效地址 | 访存次数 | 优点 | 缺点 |
|---|---|---|---|---|
| 立即寻址 | 操作数在指令中 | 0 | 速度快 | 范围小 |
| 直接寻址 | EA=A | 1 | 简单 | 范围小 |
| 间接寻址 | EA=(A) | 2+ | 范围大 | 速度慢 |
| 寄存器寻址 | EA=R | 0 | 速度最快 | 数量有限 |
| 寄存器间接 | EA=(R) | 1 | 范围大 | 需要访存 |
| 基址寻址 | EA=(BR)+A | 1 | 便于重定位 | 需要基址寄存器 |
| 变址寻址 | EA=(IX)+A | 1 | 便于数组操作 | 需要变址寄存器 |
| 相对寻址 | EA=(PC)+A | 1 | 程序浮动 | 范围有限 |
| 堆栈寻址 | 栈顶 | 0-1 | 自动管理 | 只能栈操作 |
7.4 指令格式
7.4.1 指令格式设计考虑因素
| 因素 | 考虑内容 |
|---|---|
| 指令字长 | 固定/可变,长度选择 |
| 操作码 | 固定/可变,长度分配 |
| 地址码 | 地址个数,寻址方式 |
| 数据类型 | 支持的数据类型 |
| 寻址方式 | 提供哪些寻址方式 |
7.4.2 指令字长
固定字长:
- 优点:取指时间固定,硬件简单
- 缺点:浪费空间
可变字长:
- 优点:节省空间
- 缺点:取指时间不固定
7.4.3 指令格式举例
IBM 370指令格式
graph LR
subgraph "IBM 370 指令格式"
OP[操作码8位] --> R1[寄存器1] --> R2[寄存器2] --> B2[基址寄存器] --> D2[位移量]
end
特点:
- 固定操作码长度(8位)
- 基址+位移寻址
- 16个通用寄存器
Intel 8086指令格式
graph LR
subgraph "Intel 8086 指令格式"
OP[操作码] --> MOD[寻址方式] --> R/M[寄存器/存储器] --> DISP[位移量]
end
特点:
- 可变操作码长度
- 多种寻址方式
- 8个通用寄存器
7.4.4 指令系统设计原则
- 完备性:指令功能完整
- 规整性:指令格式统一
- 对称性:操作对称
- 可扩充性:便于扩展
- 兼容性:向上兼容
7.5 RISC技术
7.5.1 RISC与CISC
| 特性 | CISC | RISC |
|---|---|---|
| 指令数量 | 多(几百条) | 少(几十条) |
| 指令长度 | 可变 | 固定 |
| 寻址方式 | 多种 | 少数几种 |
| 执行时间 | 不固定 | 固定(一个周期) |
| 访存方式 | 多种指令可访存 | 只有LOAD/STORE |
| 控制方式 | 微程序 | 硬布线 |
| 优化目标 | 缩短程序长度 | 提高执行速度 |
7.5.2 RISC特点
主要特点:
- 指令数量少:只包含常用指令
- 指令长度固定:简化取指和译码
- 寻址方式少:简化寻址逻辑
- 只有LOAD/STORE访存:简化数据通路
- 大量寄存器:减少访存次数
- 硬布线控制:提高执行速度
- 流水线技术:提高并行度
- 优化编译:充分利用硬件
7.5.3 RISC优势
| 优势 | 说明 |
|---|---|
| 速度快 | 指令执行时间固定,便于流水线 |
| 硬件简单 | 控制逻辑简单,成本低 |
| 设计周期短 | 指令少,验证容易 |
| 功耗低 | 逻辑简单,功耗小 |
7.5.4 RISC vs CISC对比
graph TB
subgraph "CISC"
A1[复杂指令] --> B1[微程序执行]
B1 --> C1[多周期]
end
subgraph "RISC"
A2[简单指令] --> B2[硬布线执行]
B2 --> C2[单周期]
C2 --> D2[流水线]
end
📝 本章小结
核心概念
- 指令格式:操作码 + 地址码
- 寻址方式:立即、直接、间接、寄存器、基址、变址、相对、堆栈
- 指令系统设计:完备性、规整性、可扩充性
- RISC技术:简化指令,提高速度
关键公式
- 有效地址:
EA = f(寻址方式, 形式地址) - 基址寻址:
EA = (BR) + A - 变址寻址:
EA = (IX) + A - 相对寻址:
EA = (PC) + A
重点图示
[!summary] 必须掌握的内容
- 指令格式分类(四地址到零地址)
- 扩展操作码技术
- 各种寻址方式的计算方法
- RISC与CISC的区别
🧪 自测练习
概念题
- 比较各种指令格式的特点。
- 说明扩展操作码技术的原理。
- 解释RISC技术的主要特点。
计算题
- 给定指令字长和操作数地址,设计扩展操作码。
- 计算各种寻址方式下的有效地址。
分析题
- 设计一个简单的指令系统。
- 分析RISC和CISC的优缺点。
🔗 相关链接
- 06_运算方法 - 上一章
- 08_CPU结构与功能 - 下一章
- 10_控制单元设计 - 指令执行
- 04_存储器 - 存储器访问
本章难度:⭐⭐⭐⭐ 中等偏难 重要程度:⭐⭐⭐⭐ 重点