ARM学习系列 ---- RISC和CISC概述
1 引言
CPU发明到现在,有非常多种架构涌现出来,目前市场上主流的芯片架构有 X86、ARM、RISC-V和MIPS四种:
| 架构 | 指令集 | 特点 | 
|---|---|---|
| x86 | CISC | 因特尔和AMD,占领了95%以上的桌面计算机和服务器市场 | 
| ARM | RISC | 在智能手机、可穿戴设备等移动处理器市场占领主要地位 | 
| MIPS | RISC | 广泛被使用在许多电子产品、网络设备、个人娱乐装置与商业装置上 | 
| RISC-V | RISC | 基于RISC-V 指令集架构可以设计服务器CPU,家用电器CPU,工控CPU和用在比指头小的传感器中的CPU。 | 
2 CISC和RISC
CISC(Complex Instruction Set Computer),设计思路是用一条指令完成一个复杂的基本功能;RISC(Reduced Instruction Set Computer),设计思路是一条指令完成一个基本“动作”,多条指令组合完成一个复杂的基本功能。
举个例子:CISC提供的乘法指令,调用时可以完成内存a和内存b中两个数据相乘,结果存入内存c中,需要多个CPU cycle才能完成;而RISC不提供“一站式”的乘法指令,需要调用四条单CPU cycle的指令完成两个数的相乘:
(1) 内存a加载到寄存器;
(2) 内存b加载到寄存器;
(3)两个寄存器中数相乘;
(4) 寄存器结果写入内存c。
关于CISC和RISC具体指标的对比见下图:
| 对比项 | CISC | RISC | 
|---|---|---|
| 指令系统 | 复杂,庞大 | 简单,精简 | 
| 指令数目 | 一般大于200条 | 小于100条 | 
| 指令字长 | 不固定 | 定长 | 
| 可访存指令 | 无限制 | 只有Load/Store指令 | 
| 指令执行时间 | 相差较大 | 绝大多数在一个周期内完成 | 
| 指令使用频度 | 相差加大 | 都比较常用 | 
| 通用寄存器数量 | 较少 | 多 | 
| 目标代码 | 难以用优化编译生成高效的目标代码程序 | 采用优化的编译程序,生成代码较为高效 | 
| 控制方式 | 绝大多数位微程序控制 | 绝大多数位组合逻辑控制 | 
| 指令流水线 | 可以通过一定方式实现 | 必须实现 | 
对于通用寄存器数量,RISC的数量多,而CISC的数量少的原因是:RISC在处理一个任务时往往会拆分成几个部分的指令,每个部分的指令往往需要多个通用寄存器来存储中间结果;而CISC则往往一条指令把一个任务都做完了,无需太多的通用寄存器。
对微程序控制的解释:复杂指令直接用硬件实现的话,需要的硬件数量会过多,故往往需要一些存储的部件来辅助实现,而微程序控制器就是这一类部件。百度百科解释:微程序控制的基本思想,就是仿照通常的解题程序的方法,把操作控制信号编成所谓的“微指令”,存放到一个只读存储器里.当机器运行时,一条又一条地读出这些微指令,从而产生全机所需要的各种操作控制信号,使相应部件执行所规定的操作 。
从硬件角度来看:CISC处理的是不等长指令集,它必须对不等长指令进行分割,因此在执行单一指令的时候需要进行较多的处理工作。而RISC执行的是等长精简指令集,CPU在执行指令的时候速度较快且性能稳定。因此在并行处理方面RISC明显优于CISC,RISC可同时执行多条指令,它可将一条指令分割成若干个进程或线程,交由多个处理器同时执行。由于RISC执行的是精简指令集,所以它的制造工艺简单且成本低廉。
基于上述描述,可以发现,CISC指令较为复杂,因此,其对应的编译器会相对简单,源码编译出来的汇编文件和二进制文件小,但是硬件实现比较复杂,对工艺要求高。与之相反,RICS指令比较简单,由多条指令组合完成复杂的操作,绝大多数指令在一个cycle完成,因此,其对应的编译器会相对复杂,源文件编译出的汇编文件指令多,文件也更大,但是硬件实现简单,对工艺要求较低。

CISC由于指定功能复杂,规则性不好,不利于采用流水线技术提升性能。RICS指令相对规整,功能简单,适合采用流水线技术提高性能,如下图所示:

