参考资料:
国产CPU,指令集之殇
RISC-V能否“重构”芯片产业格局
ARM 和 x86 有什么区别?
ARM 处理器:RISC与CISC 是什么?


0. 基础知识

0.1 什么是指令集

所谓指令集,是CPU中用来计算和控制计算机系统的一套指令的集合。指令的强弱是CPU的重要指标,指令集是提高微处理器效率的最有效工具之一。

指令集是一个比较模糊和虚化的概念,我们的看到的指令集是一个指令列表,几百种CPU指令命令,而CPU看到的指令集则是一连串的“01010101”电信号,每种电信号代表一种运算命令。而CPU的设计当中,就必须固化好各种指令对应的芯片电路模块

CPU依靠指令计算和控制系统,每款CPU在设计时就规定了一系列与其硬件电路相配合的指令系统。与其他硬件电路相配合,决定的是这一款CPU的生态系统。因此,指令集搭建的是一个桥梁,是软硬件之间沟通的桥梁,简单来说,软件通过指令集和硬件讲话。因此,指令集对形成生态至关重要,从这个意义上讲,不同的CPU指令集决定了这款CPU设计的复杂程度

从现阶段的主流体系结构讲,指令集可分为复杂指令集(CISC, complex instruction set computer)和精简指令集(RISC, reduced instruction set computer)两部分。简单来讲,RISC功能简洁,代表着简洁的CPU设计,CISC功能完备,代表着复杂的CPU设计。RISC的简洁代表着效率,CISC的功能完备代表着臃肿。这里引用步日欣老师文章中的一段话:

CPU的指令,就如同盖房子的砖,如果都是小块的标准砖头,也能盖起各种不同的房子,这就是RISC;如果除了标准砖头,还设计了很多的砖瓦结构件,适用于拐角、吊梁等,这就是CISC。不同的模式,都能盖起房子,但是效率却大不一样,RISC的标准砖头,小平房可以盖,摩天大楼也可以盖,底层的原材料很简单,都是标准化的砖头;CISC的各种复杂的结构件,对于盖一种房子的时候效率确实高,吊起结构件随便一拼装就ok,但是如果要盖的房子种类多了,就需要定义更多更复杂的结构件,结构件的管理就会越来越复杂,而且在建设某种常见建筑的时候,大部分特殊的结构架是闲置不用的,大大影响了施工效率。
基于CISC模式下的CPU设计,在各种新需求下,堆叠的功能越来越复杂,芯片设计难度也越来越高,效率低下,因此就出现了RISC精简指令集的概念。

  • 注:指令集架构ISA,Instruction Set Architecture)也可简单地理解为指令集。

0.2 RISC指令集的由来

一开始的处理器都是CISC架构,随着时间演进,有越来越多的指令集加入。由于当时编译器的技术并不成熟,程序都会直接以机器码或是汇编语言写成,为了减少程序设计师的设计时间,逐渐开发出单一指令,复杂操作的程序码,设计师只需写下简单的指令,再交由CPU去执行。但是后来有人发现,整个指令集中,只有约20%的指令常常会被使用到,约占整个程序的80%;剩余80%的指令,只占整个程序的20%。于是1979年美国加州大学伯克莱分校的David Patterson教授提出了RISC的想法,主张硬件应该专心加速常用的指令,较为复杂的指令则利用常用的指令去组合。

这里也提供一个小小的概念,CISC是在RISC出现之后才出现的相对名词,并不是从一开始就有CISC、RISC这两种处理器架构。

1. CISC复杂指令集

1.1 CISC体系的指令特征

  1. 使用微代码。指令集可以直接在微代码存储器(比主存储器的速度快很多)里执行,新设计的处理器,只需增加较少的电晶体就可以执行同样的指令集,也可以很快地编写新的指令集程序。

  2. 庞大的指令集。可以减少编程所需要的代码行数,减轻程序员的负担。高级语言对应的指令集:包括双运算元格式、寄存器到寄存器、寄存器到存储器以及存储器到寄存器的指令。

1.2 CISC体系的优缺点

  1. 优点:能够有效缩短新指令的微代码设计时间,允许设计师实现 CISC 体系机器的向上兼容。新的系统可以使用一个包含早期系统的指令超集合,也就可以使用较早电脑上使用的相同软件。另外微程序指令的格式与高级语言相匹配,因而编译器并不一定要重新编写。

  2. 缺点:指令集以及芯片的设计比上一代产品更复杂,不同的指令,需要不同的时钟周期来完成,执行较慢的指令,将影响整台机器的执行效率。

1.3 CISC复杂指令集阵营

Intel的X86。

2. RISC精简指令集

2.1 RISC体系的指令特征

  1. 精简指令集:包含了简单、基本的指令,通过这些简单、基本的指令,就可以组合成复杂指令。

  2. 同样长度的指令:每条指令的长度都是相同的,可以在一个单独操作里完成。

  3. 单机器周期指令:大多数的指令都可以在一个机器周期里完成,并且允许处理器在同一时间内执行一系列的指令。

2.2 RISC体系的优缺点

  1. 优点:在使用相同的芯片技术和相同运行时钟下,RISC 系统的运行速度将是 CISC 的2~4倍。由于RISC处理器的指令集是精简的,它的内存管理单元、浮点单元等都能设计在同一块芯片上。RISC 处理器比相对应的 CISC 处理器设计更简单,所需要的时间将变得更短,并可以比CISC处理器应用更多先进的技术,开发更快的下一代处理器。

  2. 缺点:多指令的操作使得程序开发者必须小心地选用合适的编译器,而且编写的代码量会变得非常大。另外就是RISC体系的处理器需要更快的存储器,这通常都集成于处理器内部,就是L1 Cache(一级缓存)。

2.3 RISC精简指令集阵营

ARM、RISC-V、MIPS。

3. 对比CISC和RISC

  1. 指令的形成:CISC 因指令复杂,故采用微指令码控制单元的设计,而RISC的指令90%是由硬件直接完成,只有10%的指令是由软件以组合的方式完成,因此指令执行时间上RISC较短,但RISC所须ROM空间相对的比较大,至于RAM使用大小应该与程序的应用比较有关系。

  2. 寻址模式:CISC的需要较多的寻址模式,而RISC只有少数的寻址模式,因此CPU在计算存储器有效位址时,CISC占用的汇流排周期较多。

  3. 指令的执行:CISC指令的格式长短不一,执行时的周期次数也不统一,而RISC结构刚好相反,故适合采用流水线处理架构的设计,进而可以达到平均一周期完成一指令的方向努力。显然的,在设计上RISC较CISC简单,同时因为CISC的执行步骤过多,闲置的单元电路等待时间增长,不利于平行处理的设计,所以就效能而言RISC较CISC还是占了上风,但RISC因指令精简化后造成应用程式码变大,需要较大的存储器空间,且存在指令种类较多等等的缺点。

CPU指令集科普:CISC指令集和RISC指令集相关推荐

  1. x86指令集和arm指令集部分对比

    本文主题:本文主要对比了x86 ISA 和 arm ISA的部分区别. 目录 一.x86 ISA 1.指令组成 二.指令各部分解析 1.Instruction Prefixes(可选部分) 2.Opc ...

  2. IDA Pro ARM指令集和Thumb指令集的切换

    在动态调试android的ndk程序的时候,发现很多程序都会反汇编错误,原来是ARM反汇编的模式没搞对.因为在动态调试的时候,ida Pro并没有去解析elf模块中的一些信息,造成了模块信息丢失,有时 ...

  3. 论ARMv7 Thumb-2指令集的性能(含Thumb指令集介绍)【转载】

    [摘要] 主要是介绍ARM CPU中的THUMB-2功能,相对于THUMB的比较THUMB-2指令集的扩展,THUMB-2的新指令带来的好处,新指令对性能和代码密度的改进.    如今的嵌入式系统开发 ...

  4. 复杂指令集(CISC)和精简指令集(RISC)- 历史的产物

    首先,复杂指令集(CISC)和精简指令集(RISC)都是历史的产物. 复杂指令集(CISC) 早期设计思路:计算机性能的提高通过增加硬件的复杂性来获得. CPU内存容量小,只能增加单一指令功能复杂,可 ...

  5. 复杂指令集(CISC)和精简指令集(RISC)

    RISC之前为什么使用复杂指令集: 因为那个时期存储器即昂贵且速度慢,因此指令使用变长编码,以节约存储空间.由于一条指令能完成很多功能,对内存的访问也减少了,这样也减少了缓慢的存储器访问对程序性能的影 ...

  6. 精简指令集的特点_精简指令集有哪些指令

    [推荐阅读] 浅谈linux 内核网络 sk_buff 之克隆与复制 深入linux内核架构--进程&线程 了解Docker 依赖的linux内核技术 精简指令集计算机RISC的特点是指令及其 ...

  7. 【Linux】CISI与RISC指令集

    (一)CISC 1. CISC体系的指令特征 1) 使用微代码.指令集可以直接在微代码存储器(比主存储器的速度快很多)里执行,新设计的处理器,只需增加较少的电晶体就可以执行同样的指令集,也可以很快地编 ...

  8. CPU指令集是什么东西,以及指令集的架构有哪些(有哪些大类),以及具体的指令集都有哪些

    这篇文章来自于农夫山泉,我们是大自然的搬运工,哈哈,文章来源于网络 https://blog.csdn.net/yu132563/article/details/55251534 这个问题包括CPU的 ...

  9. MIPS指令集的常用指令分类和相关解释

    MIPS指令集的常用指令分类和相关解释 MIPS 一些基本概念 MIPS指令集的六种指令格式 R型指令: I型计算类指令 I型取数类指令: I型条件判断类指令: J型指令: MIPS指令集的常用指令 ...

  10. SIMD指令集——一条指令操作多个数,SSE,AVX都是,例如:乘累加,Shuffle等

    SIMD指令集 from:https://zhuanlan.zhihu.com/p/31271788 SIMD,即Single Instruction, Multiple Data,一条指令操作多个数 ...

最新文章

  1. java·环境变量、基本数据类型
  2. 半导体到底靠什么导电?
  3. java--static关键字
  4. SVM_GUI_3.1[mcode]{by faruto}的安装及使用
  5. mybatis-批量插入
  6. 友元函数 友元类 友元成员函数
  7. C++ 高级数据类型(三)—— 指针
  8. html左滑效果图,前端福利——左滑右滑,绝对是你见过的最简单的写法 - 你猜猜看...
  9. 二维向量vector初始化问题(以统计字符串字母题为例)
  10. H5 video 播放器demo代码
  11. 【毕业设计】基于STM32的公交站牌系统 - 物联网 嵌入式 单片机
  12. 硬件时序图软件——TimeGen_v3.3
  13. 轻松学网络设备之思科交换机搭建虚拟局域网
  14. windows 环境下 0x色彩对应表
  15. thon应用领域介绍
  16. 你对Redis的使用靠谱吗?Redis的性能高,吗?Redis可以保证原子性,吗?用Redis可以实现事务,吗?用Redis可以当队列,吗?Redis适合用来做什么?
  17. 深度学习图像处理(色彩编辑4)
  18. 脉歌蓝牙耳机线评测_感受蓝牙5.0带来的震撼——脉歌T1000Pro蓝牙耳机轻体验
  19. 在React项目中引入字体文件并使用
  20. SC2Rank 星际2天梯排行榜 SpringMVC + Spring + Mybatis + Mysql + Maven java web项目

热门文章

  1. Qt教程,Qt6.3,Qt6.2,Qt6,Q,v6.3.1入门,Qt编程入门
  2. 【Java基础知识 1】Java入门级概述
  3. .net ajax 保存文件,.net ajax式上传文件
  4. 编解码格式 -- AAC
  5. c语言函数制作,C语言库函数制作方法
  6. 张小龙 4 小时演讲没时间看?看这一篇就够了!「附赠张小龙历年演讲实录 PDF」...
  7. matlab自适应遗传算法代码,matlab自适应遗传算法
  8. 数据库(基础SQL)
  9. 大厂面经----接近30场面试分享
  10. ASP程序部署在IIS上的步骤