Appearance
题目
下列关于 RISC 的叙述中,错误的是( )。
错因
A
RISC 指令简单、定长、寻址方式少,每条指令的控制信号数量少且固定——非常适合用硬连线控制器(组合逻辑)实现。CISC 则因为指令复杂、变长、寻址方式多,倾向于用微程序控制器分解每条指令。A 描述正确——题目要找"错误的",所以不选 A。
B
RISC 的核心约束之一就是 Load/Store 架构:所有运算只在寄存器之间完成,访存由专门的 Load / Store 指令承担。这样运算指令永远是固定的"寄存器→寄存器"形式,方便流水线和译码统一。B 描述正确,不选 B。
D
RISC 通常有大量通用寄存器(典型 32 个),因此过程调用时前几个参数走寄存器(如 ARM AAPCS 的 r0–r3、MIPS 的 a0–a3),仅多出来的才走栈。CISC(如 x86 早期)寄存器少,多用栈传参。D 描述正确,不选 D。
总解析
题目问"错误的"叙述,C 是错的。
逐项核验:
| 选项 | 内容 | 对/错 | 理由 |
|---|---|---|---|
| A | RISC 多采用硬连线控制器 | ✓ | 指令简单且定长,组合逻辑直接搞定 |
| B | RISC 用 Load/Store 风格 | ✓ | 运算只在寄存器间,访存由专用指令 |
| C | RISC 难以采用流水线 | ✗ | 正好相反——RISC 就是为流水线而生 |
| D | RISC 多用寄存器传参 | ✓ | 寄存器数量多,前几个参数走寄存器 |
C 错在哪里:
RISC 的整套设计哲学(简化指令、定长指令字、Load/Store、统一格式)几乎全部是为了让流水线更好实现:
| RISC 特性 | 对流水线的好处 |
|---|---|
| 指令定长 | IF 段每周期取一条,不需要跨周期判长 |
| 字段固定 | 译码和读寄存器可以并行(甚至重叠到 IF 末段) |
| 简单寻址 | EX 段只算一次有效地址,不必多周期访存 |
| Load/Store 架构 | 只有 LD/ST 经过 MEM 段,其它指令 MEM 段空过即可 |
| 单周期执行段 | 各段时间均衡,时钟周期不被某条复杂指令拖死 |
所以 RISC 不仅能用流水线、而且最适合流水线。CISC(如 x86)反而要先把每条复杂指令拆成"微操作"(μops)才能上流水线——后期的 x86 微架构本质上是"内核 RISC + CISC 译码前端"。
最终答案是 C。
RISC vs CISC 速记:
| 维度 | RISC | CISC |
|---|---|---|
| 指令复杂度 | 简单、单周期可完成 | 复杂、多周期 |
| 指令长度 | 定长(如 32 位) | 变长 |
| 寻址方式 | 少(5 种内) | 多(10+ 种) |
| 控制器 | 硬连线为主 | 微程序为主 |
| 寄存器 | 多(≥ 32) | 少 |
| 访存 | Load/Store 专用指令 | 多种指令直接访存 |
| 流水线 | 天生适合 | 需要 μop 翻译 |
| 编译器 | 复杂(要做调度优化) | 简单(硬件帮你扛) |
"C 说 RISC 难以流水线"——把 RISC 最大的优点说成了缺点,所以是错的。