4.6 RISC和CISC指令集
设计者们过去常常为计算机编写指令,这些指令似乎很有用,但导致一些计算机变得相当复杂。20世纪80年代,来自伯克利大学的David Patterson和来自斯坦福大学的John Hennessey对程序进行了统计分析,发现许多复杂指令很少被使用。他们率先设计了一种只包含占程序大部分时间的指令的计算机,甚少使用的指令被淘汰,取而代之的是其他指令的组合。这些计算机被称为RISC(Reduced Instruction Set Computer),即精简指令集计算机。它之前的设计被称为CISC(Complicated Instruction Set Computer),即复杂指令集计算机。
RISC的一个特点是它们有一个加载–存储架构。这意味着它们包含两类指令:一类用于访问内存,另一类用于其他所有指令。
当然,计算机的用途也随着时间的推移而改变。Patterson和Hennessey的原始统计数据是在计算机被普遍用于播放音频和视频之前收集完成的。新程序的统计数据正在促使设计者向RISC添加新的指令。今天的RISC实际上比过去的CISC复杂得多。
其中一个影响很大的CISC是美国数字设备公司的PDP-11。这台机器有8个通用寄存器,而不是前面示例中使用的单个累加器。这些寄存器可用于间接寻址。此外,这种寄存器还支持自动递增和自动递减模式,可以使寄存器中的值在使用之前或之后递增或递减。这使得一些非常有效的计划得以实施。例如,假设要将从源地址开始的n字节内存复制到从目标地址开始的内存中,我们可以将源地址放入寄存器0,将目标地址放入寄存器1,将字节计数放入寄存器2。我们将跳过这里的实际部分,因为PDP-11指令集没有学习的必要。表4-5展示了这些指令的作用。
表4-5 PDP-11复制内存程序
我们为什么要关心这个?C语言是B语言(BCPL的后续)的后续编程语言,是在PDP-11上开发的。C语言中指针的使用,是间接寻址的一个更高层次的抽象,结合了B语言的特性(如自动递增和自动递减运算符),很好地映射到了PDP-11架构。C语言逐渐变得非常有影响力,并影响了许多其他语言的设计,包括C++、Java和JavaScript。