指令系统
指令系统
核心定义
ISA(Instruction Set Architecture)是 CPU 与软件之间的 软硬件之间的接口约定 ,规定了指令格式、寻址方式、数据类型、寄存器和异常机制。指令系统 研究指令格式、寻址方式、指令类型和执行流程。
指令格式由 操作码 + 地址码 构成。操作码长度可以是 定长(RISC 常用,便于译码) 或 变长(CISC 常用,灵活但解析复杂) 。地址码个数决定指令的分类:三地址、二地址、一地址、零地址指令。
指令执行时间=指令条数×CPI×时钟周期
RISC 特点:指令 长度固定、种类少、寻址方式简单、便于流水线实现 。CISC 特点:指令 功能丰富、寻址方式多样、单条指令更复杂、CPI 较大 。
语言层级与翻译程序
语言层级(从底到顶):
| 层级 | 形式 | 与硬件关系 |
|---|---|---|
| 机器语言 | 二进制 0/1 | 硬件唯一能直接执行(驱动逻辑门电平翻转) |
| 汇编语言 | 助记符(MOV / ADD) | 与 ISA 强绑定(x86、ARM、RISC-V 各不同),需汇编程序翻译 |
| 高级语言 | C / Python | 与硬件无关(图灵完备,功能等效) |
翻译程序四兄弟:
| 程序 | 输入 → 输出 | 特点 |
|---|---|---|
| 编译程序 Compiler | 高级语言 → 目标代码(.obj / .o) | 一次性全翻译,生成文件 |
| 汇编程序 Assembler | 汇编语言 → 机器语言 | 输入必须是汇编,不能是高级语言 |
| 解释程序 Interpreter | 高级语言 → 逐句执行 | 不生成目标文件(Python / JS) |
| 链接程序 Linker | 多个目标模块 → 可执行文件 | 拼装装配 |
💡 口诀:高级 → 目标文件 = 编译;高级 → 直接跑不留文件 = 解释;汇编 → 机器 = 汇编。
🚫 易错:汇编语言 与机器结构高度绑定(“汇编与机器无关”必错),只有高级语言才与硬件无关。“直接执行” ⇒ 必须是 0/1,带英文字母的汇编硬件也看不懂。
软件分类
软件的顶层二元对立:系统软件 + 应用软件。
| 类别 | 定义 | 典型代表 |
|---|---|---|
| 系统软件 | 管理系统、作为硬件与应用的桥梁 | 操作系统、DBMS、编译器、语言处理程序 |
| 应用软件 | 按任务需要编制的程序 | 微信、Word、科学计算包 |
🚫 逻辑降维陷阱:操作系统、DBMS、编译器只是 系统软件的子集,不是软件分类的顶层。第一刀永远是”为机器打工(系统软件)vs 为用户打工(应用软件)“。
关键细节 / 操作步骤
- 第一步:先判断 操作数在哪里 ——立即数、寄存器还是存储器。
- 第二步:再确定 寻址方式 怎么取到有效地址(EA)。立即寻址:操作数在 指令中 ;直接寻址:EA = 指令中的地址码 ;间接寻址:EA = 地址码所指单元中的地址 ;寄存器寻址:操作数在 寄存器中 ;寄存器间接寻址:EA = 寄存器内容 ;变址寻址:EA = 变址寄存器 + 偏移量 ;基址寻址:EA = 基址寄存器 + 偏移量 ;相对寻址:EA = PC + 偏移量 。
- 第三步:若问指令字长,先看是否定长或变长。定长利于 流水线 ,变长利于 编码空间压缩 。
- 第四步:若问操作码扩展,操作码位数与地址码位数 此消彼长 ,需在指令字长内分配。
- 第五步:若问 CPI,复杂寻址方式增加 地址计算和访存次数 ,从而拉高 CPI。例如间接寻址需 两次访存 。
- 第六步:若问指令周期,按 取指→译码→执行→访存→写回 五阶段分解。
- 第七步:若问 RISC/CISC 比较,RISC 的 CPI 接近 1 ,CISC 的 CPI 远大于 1 。
- 第八步:若问有效地址与物理地址的关系,先按寻址方式公式求 EA,再结合 MMU 转换 得物理地址。
- 第九步:若问操作码长度限制,要联系 编码空间和指令字长的折中 ——操作码越长,地址码越短。
- 第十步:若问指令系统和 CPU 的关系,指令系统规定了 CPU 能执行的动作集合 。
⚠️ 易错辨析
- 立即寻址 vs 直接寻址:立即寻址操作数 直接在指令中 ,直接寻址指令中放的是 操作数的地址 。反例:指令
ADD R1, #5是立即寻址;ADD R1, (1000H)是直接寻址。- 间接寻址至少需要 两次访存 :一次取地址,一次取操作数。多级间接寻址访存次数更多。
- ISA 不是单纯的指令列表,它还包括 寄存器、数据类型、寻址方式和异常机制 等约定。
- 复杂寻址方式让单条指令功能更强,但 CPI 变大。反例:一条 CISC 指令可能等效于多条 RISC 指令。
- 变址寻址(变址寄存器内容变化、偏移量固定 )和基址寻址(基址寄存器内容由 OS 设定、偏移量变化 )方向相反,容易混淆。
💡 技巧与口诀 口诀:先找操作数,再找地址;想性能,看指令长度和 CPI;立直间寄变基相,访存次数逐个涨 (立=立即 0 次,直=直接 1 次,间=间接 2+ 次,寄=寄存器 0 次,变/基/相=1 次访存)。 应用场景:一看到”立即数""偏移量""变址寄存器”,先把寻址方式按有效地址公式拆开。涉及 RISC/CISC 时,从 指令复杂度 和 硬件实现难度 切入。
📝 真题闭环 题目:某机器字长 16 位,指令格式为:操作码 4 位 + 寻址特征 2 位 + 形式地址 10 位。已知变址寄存器 IX 的内容为 2000H,基址寄存器 BR 的内容为 1000H,PC 的内容为 3000H,形式地址 D = 0060H。分别求变址寻址、基址寻址、相对寻址的有效地址 EA。
解题思路:
- 变址寻址:EA = (IX) + D = 2000H + 0060H = 2060H 。
- 基址寻址:EA = (BR) + D = 1000H + 0060H = 1060H 。
- 相对寻址:EA = (PC) + D = 3000H + 0060H = 3060H (注意 PC 是否已 +1 视题目约定)。
答案:变址 EA = 2060H ,基址 EA = 1060H ,相对 EA = 3060H 。关键辨析:变址适合 数组遍历(变址变、偏移不变) ,基址适合 程序重定位(基址由 OS 设、偏移变) 。
cd ..