指令系统
指令系统(ISA)是硬件与软件之间的接口,规定了 CPU 能识别与执行的全部操作。本篇介绍指令格式、常见寻址方式,以及 CISC 与 RISC 的设计哲学差异。
指令格式
一条指令通常由 操作码 (OP) 与 地址码 (A) 两部分组成:
| 操作码 OP | 地址码 A / 操作数 |
| n 位 | m 位 |
操作码指明指令功能,如加、减、传送、跳转。地址码给出操作数或操作数地址,数量可为 0-3 个,常见有零地址(栈机)、一地址(累加器机)、二地址(通用寄存器机)、三地址(如ADD R1,R2,R3)。
按操作数长度,指令又可分为定长指令(译码简单、RISC 主流)与变长指令(密度高、CISC 主流)。
寻址方式
寻址方式决定操作数如何获取,影响指令灵活性与代码密度。
立即寻址:操作数就在指令中,MOV R1, #5,速度快但位数受限。直接寻址:指令给出内存地址,MOV R1, [2000H]。寄存器寻址:操作数在寄存器中,速度最快,ADD R1, R2。寄存器间接寻址:寄存器中存的是地址,MOV R1, [R2],用于指针。变址寻址:基址 + 变址寄存器偏移,适合数组访问,MOV R1, [R2 + R3]。相对寻址:以 PC 当前值为基准加减偏移,用于分支跳转。
CISC vs RISC
| 维度 | CISC (x86) | RISC (ARM/RISC-V) |
|---|---|---|
| 指令条数 | 多,达数百条 | 少而精 |
| 指令长度 | 变长 1-15 字节 | 定长 4 字节 |
| 寻址方式 | 丰富(>10 种) | 精简(load/store) |
| 访存指令 | 可对内存直接运算 | 仅 load/store 访存 |
| 流水线 | 实现复杂 | 易实现高频率 |
| 译码 | 微程序/硬布线 | 硬布线 |
| 目标 | 减少代码空间 | 提高速度与并行度 |
现代 x86 处理器内部已将 CISC 指令拆分为类 RISC 微操作(µops)执行,RISC-V 与 ARM 持续向高性能与向量扩展演进。理解 ISA 差异有助于做编译优化、跨平台移植与性能调优。