CISC 和 RISC 讨论的是指令系统的设计思想:复杂功能应该由一条复杂机器指令完成,还是由多条简单机器指令组合完成。

基本思想

CISC 是 Complex Instruction Set Computer,复杂指令集计算机。

它的设计倾向是:提供功能强、语义复杂的机器指令,让一条指令尽可能完成一个复杂功能。例如,一条指令可能同时完成访存、运算、写回。

RISC 是 Reduced Instruction Set Computer,精简指令集计算机。

它的设计倾向是:每条指令只完成简单、规整的基本动作,复杂功能由多条简单指令组合完成。例如,先用 Load 指令把数据从主存读入寄存器,再用寄存器之间的运算指令处理,最后用 Store 指令写回主存。

关键差异

对比项 CISC RISC
指令系统 指令多,功能复杂 指令少,功能规整
指令字长 往往不固定 往往定长
寻址方式 较多、较复杂 较少、较简单
访存方式 很多指令都可能访存 通常只有 Load/Store 访存
运算位置 可能直接对主存操作数运算 主要在寄存器之间运算
通用寄存器 相对较少 相对较多
控制方式 常见微程序控制 更适合硬布线控制
流水线 可实现,但复杂度较高 更适合流水线
最核心的判断点

RISC 通常采用 Load/Store 结构:访存只由 LoadStore 完成,算术逻辑运算主要发生在寄存器之间。

## RISC 更适合流水线

流水线希望每条指令的执行过程尽量规整。如果指令长度差异很大、寻址方式复杂、每条指令执行时间差异明显,那么取指、译码、执行、访存、写回这些阶段就很难整齐划分。

RISC 更适合流水线,主要因为:

  • 指令格式更规整,取指和译码更简单。
  • 指令功能更简单,执行时间更容易统一。
  • 运算指令主要使用寄存器,减少复杂访存指令带来的不确定性。
  • 通用寄存器较多,可以减少频繁访问主存。

现代 CISC 处理器内部也会把复杂指令分解为更简单的内部操作,再进入流水线执行。

典型判断

看到下面特征,通常判断为 CISC:

  • 指令数量多,指令功能复杂。
  • 指令长度不固定。
  • 寻址方式多。
  • 运算指令可以直接访问主存操作数。
  • 一条指令可能完成多个基本动作。
访存型运算指令

若某条乘法、加法等运算指令可以直接访问主存操作数,例如一条乘法指令同时取主存数据并完成运算,这通常体现 CISC 风格。RISC 的典型做法是先 Load 到寄存器,再在寄存器之间运算。

看到下面特征,通常判断为 RISC:
  • 指令数量少,格式规整。
  • 指令长度固定。
  • 只有 Load/Store 指令访问主存。
  • 运算指令主要在寄存器之间进行。
  • 通用寄存器数量较多。
  • 更强调流水线执行。
不要把代表架构理解成绝对标签

x86 常作为 CISC 的代表,ARM 常作为 RISC 的代表。但现代处理器会吸收彼此思想:外部指令集和内部实现并不总是完全一致。

## 总结
  • RISC 是 Load/Store 结构,运算主要在寄存器之间完成;CISC 允许更复杂的机器指令直接完成复杂操作。
  • CISC 把更多复杂性放进指令本身,编程和目标代码可能更紧凑,但硬件控制更复杂。
  • RISC 把指令做得更简单规整,把复杂功能交给多条指令组合完成,更利于流水线和编译优化。
  • 两种设计没有简单的孰优孰劣、也不存在兼容一说。
  • 现代处理器常吸收彼此思想:外部指令集风格和内部实现方式不一定完全一致。