CISC And RISC
CISC 和 RISC 讨论的是指令系统的设计思想:复杂功能应该由一条复杂机器指令完成,还是由多条简单机器指令组合完成。
基本思想
CISC 是 Complex Instruction Set Computer,复杂指令集计算机。
它的设计倾向是:提供功能强、语义复杂的机器指令,让一条指令尽可能完成一个复杂功能。例如,一条指令可能同时完成访存、运算、写回。
RISC 是 Reduced Instruction Set Computer,精简指令集计算机。
它的设计倾向是:每条指令只完成简单、规整的基本动作,复杂功能由多条简单指令组合完成。例如,先用 Load 指令把数据从主存读入寄存器,再用寄存器之间的运算指令处理,最后用 Store 指令写回主存。
关键差异
| 对比项 | CISC | RISC |
|---|---|---|
| 指令系统 | 指令多,功能复杂 | 指令少,功能规整 |
| 指令字长 | 往往不固定 | 往往定长 |
| 寻址方式 | 较多、较复杂 | 较少、较简单 |
| 访存方式 | 很多指令都可能访存 | 通常只有 Load/Store 访存 |
| 运算位置 | 可能直接对主存操作数运算 | 主要在寄存器之间运算 |
| 通用寄存器 | 相对较少 | 相对较多 |
| 控制方式 | 常见微程序控制 | 更适合硬布线控制 |
| 流水线 | 可实现,但复杂度较高 | 更适合流水线 |
最核心的判断点
RISC 通常采用 Load/Store 结构:访存只由 Load、Store 完成,算术逻辑运算主要发生在寄存器之间。
流水线希望每条指令的执行过程尽量规整。如果指令长度差异很大、寻址方式复杂、每条指令执行时间差异明显,那么取指、译码、执行、访存、写回这些阶段就很难整齐划分。
RISC 更适合流水线,主要因为:
- 指令格式更规整,取指和译码更简单。
- 指令功能更简单,执行时间更容易统一。
- 运算指令主要使用寄存器,减少复杂访存指令带来的不确定性。
- 通用寄存器较多,可以减少频繁访问主存。
现代 CISC 处理器内部也会把复杂指令分解为更简单的内部操作,再进入流水线执行。
典型判断
看到下面特征,通常判断为 CISC:
- 指令数量多,指令功能复杂。
- 指令长度不固定。
- 寻址方式多。
- 运算指令可以直接访问主存操作数。
- 一条指令可能完成多个基本动作。
访存型运算指令
若某条乘法、加法等运算指令可以直接访问主存操作数,例如一条乘法指令同时取主存数据并完成运算,这通常体现 CISC 风格。RISC 的典型做法是先 Load 到寄存器,再在寄存器之间运算。
- 指令数量少,格式规整。
- 指令长度固定。
- 只有 Load/Store 指令访问主存。
- 运算指令主要在寄存器之间进行。
- 通用寄存器数量较多。
- 更强调流水线执行。
不要把代表架构理解成绝对标签
x86 常作为 CISC 的代表,ARM 常作为 RISC 的代表。但现代处理器会吸收彼此思想:外部指令集和内部实现并不总是完全一致。
- RISC 是 Load/Store 结构,运算主要在寄存器之间完成;CISC 允许更复杂的机器指令直接完成复杂操作。
- CISC 把更多复杂性放进指令本身,编程和目标代码可能更紧凑,但硬件控制更复杂。
- RISC 把指令做得更简单规整,把复杂功能交给多条指令组合完成,更利于流水线和编译优化。
- 两种设计没有简单的孰优孰劣、也不存在兼容一说。
- 现代处理器常吸收彼此思想:外部指令集风格和内部实现方式不一定完全一致。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Elian's blog page!