cpu:编程中的CPU架构知识(指令集:x86armrisc-vloongarc)

Posted jackletter

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cpu:编程中的CPU架构知识(指令集:x86armrisc-vloongarc)相关的知识,希望对你有一定的参考价值。

参考:

1. 问题

你是否有下面的问题?

  • 什么是指令集架构?
  • RISC-V是个什么鬼,好像最近很火呢?
  • ARM是个啥?
  • AMD和ARM有关系吗?
  • x86是intel公司的专属吗?
  • 下载linux操作系统的时候,经常让选择架构?amd64和x86什么区别?

2. 从指令集概念说起

广义上指令集分为两类:RISC(精简指令集)CISC(复杂指令集)
它们的区别是什么呢?

  • CISC(Complex Instruction Set Computer),设计思路是用一条指令完成一个复杂的基本功能;

  • RISC(Reduced Instruction Set Computer),设计思路是一条指令完成一个基本“动作”,多条指令组合完成一个复杂的基本功能。

两大指令集各有优缺点:

  • CISC相对于RISC较重,支持的指令多,功能强大,但功耗也大,适合PC机(也是事实上PC机的霸主);
  • RISC相对于CISC较轻,功耗也小,适合手机等便携设备(也是现在手机上霸主);

但,需要注意,RISCCISC都只是概念上的分类。。。

3. 指令集架构

上面,我们说CISCRISC只是概念上的分类,那么具体都有哪个架构呢?

  • CISC:x86;
  • RISC:arm、RISC-V、LoongArc、MIPS;

3.1 x86架构

虽然x86这个名字起源于Intel,但这种架构不是Intel公司的专属,而且x86也不仅仅指32位处理器,它也可以表示64位处理器。

有的时候,我们也能看到x86_x64amd64等说法,那是因为某些情况下需要明显区分32位64位

那么,为什么我们会认为x86就是32位系统呢?
其实,这也是历史命名的问题:
早期,Intel公司推出一系列的80868018680286等芯片,将它们统一称为x86,但此时它还只是32位架构,后来AMD公司对它进行了扩展,率先推出了amd64(64位)处理器,然后Intel也推出了64位处理器,为了明显区分之前的,就称之为x86_x64,其实,它们都是对原有x86架构的一种扩展而已。

讲到这里不得不说两大公司IntelAMD。。。

Intel自不用多说,早期的奔腾系列,现在的PC机的酷睿系列、服务器的至强系列都占据了很大市场。

AMD早期做Intel的代工厂,后来Intel觉察到了AMD的威胁,果断禁止AMD生产intel研发的X86芯片,从此AMD正式走上了自主研发的道路,后来与Intel的诉讼中胜诉,可以自行生产兼容x86架构的芯片了,从此x86不再是Intel的专属,AMDIntel 在CPU上开始了漫长的拉扯。。。

它们两家在历史上都有各自的辉煌期,都是碾压对方的存在,不过当前Intel致力于转型为以数据为中心的研发,而AMD在收购了ati后也成为了同时研发CPU显卡的公司。

具体它们的历史,可以自行百度,或参考:《intel和amd处理器发展历史》

3.2 ARM

arm既是一个公司,也是一种架构(arm和amd并没有什么关系)。

arm早期成立时也类似于IntelAMD自己生产芯片销售,但迫于资金压力,转为卖授权,由此,arm架构的芯片称为了手机和嵌入等设备的霸主。

直接看百度百科对arm公司的介绍:

3.3 RISC-V

或许是因为arm要被英伟达收购,RISC-V这一个开源的cpu架构最近活了起来(国内国外厂商都积极加入,如:华为海思、阿里平头哥等),但pc已被x86占据,移动端也被arm吞噬,RISC-V的未来主战场或许在处在萌芽阶段的物流网市场。

注意:RISC-V相比于x86和arm还有很多不足,许多基础设施还不完善。

3.4 LoongArc

这是国产自动知识产权的芯片。由龙芯中科设计,据宣传:


后续如何,可以期待。

3.5 MIPS

MIPS公司研发的一种RISC架构,用在网关机顶盒路由等设备上较多,一般我们程序员接触的比较少,不过多介绍,可以参考百度百科:

4. 汇编的语法

汇编语言是依赖于硬件的,更准确的说是依赖于cpu的指令集架构,所以,每种架构理论上都有自己的汇编语法。

4.1 x86汇编:

有两种风格的语法:IntelAT&T,前者是Intel的专属,一般我们在window上做汇编基于此;而后者多用在linux上。具体可参考:《汇编格式 AT&T 与 Intel》,截图如下:

4.2 arm汇编:

arm这种架构有自己的汇编语言,不过,我们不做嵌入式开发,接触的少,我们可以去官网上查看它的编译器:

4.3 RISC-V汇编:

也有自己的汇编,可以百度支持它的语法和编译器
- 官网:https://riscv.org/
- github地址:https://github.com/riscv

4.4 LoongArc汇编:

也有自己的汇编,可以去官网看看:https://www.loongson.cn/
根据资料显示,gcc 12.1+linux5.9+FFmpeg5.0+dotnetcore 3.1都已支持 LoongArc架构。


5. 常见关于架构的问题

5.1 下载操作系统时cpu架构的选择

我们在下载操作系统的时候,经常会让我们选择cpu架构,如:

5.1.1 centos:

5.1.2 ubuntu

5.1.3 debian

5.2 下载其他软件时的cpu架构选择

有的时候,我们下载某些软件的时候也是要选择cpu架构的,如:

5.2.1 dotnet

5.2.2 linux上安装软件时

6. 补充手机上cpu的市场

手机上的cpu厂商基本上都是买的arm公司的授权,比如:高通华为联发科

但手机的cpu不止要有pc机上的功能,还要有通信技术,其中有个CMDA,早期高通在这个上面大量研发,申请了很多专利,导致现在其他的手机厂商都要向高通支付昂贵的专利费(苹果也不例外,为此还打了官司,还没打赢,后来就自研了,比如:A系列、M1等)。。。

在手机市场上,Intel也想过,也尝试过,奈何自己不行,现在也不怎么做手机了,就像微软当时要做Window Mobile一样,最后也没了声响。

回顾概念:CPU指令集指令集架构

一、CPU(中央处理器)

  中央处理器(CPU,central Processing Unit)是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心(Control Unit)。他的主要功能是解释计算机指令(指令是指示计算机执行某种操作的命令。它由一串二进制数码组成)以及处理计算机软件中的数据。

  微处理器由一片或少数几片大规模集成电路组成的中央处理器。

  CPU可以分为:4位微处理器、8位微处理器、16位微处理器、32位微处理器以及最新的64位微处理器。

  中央处理器主要包括运算器(算术逻辑运算单元,ALU,Arithmetic Logic Unit)和高速缓冲存储器(Cache)及实现它们之间联系的数据(Data)、控制及状态的总线(Bus)。它与内部存储器(Memory)和输入/输出(I/O)设备合称为电子计算机三大核心部件。

  主要功能:处理指令、执行操作、控制时间、处理数据。

工作过程:

  第一阶段:提取,从存储器(存放程序和数据的器件)或高速缓冲存储器(存在于主存与CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多, 接近于CPU的速度)中检索指令(为数值或一系列数值)。有程序计数器指定存储器的位置。

  第二阶段:解码,CPU根据存储器提取到的指令来决定其执行行为。在解码阶段,指令被拆解为有意义的片段。根据CPU的指令集架构(ISA)定义将数值解译为指令。一部分的指令数值为运算码(Opcode),其指示要进行哪些运算。其它的数值通常供给指令必要的信息,诸如一个加法(Addition)运算的运算目标。

  第三阶段:执行,在提取和解码阶段之后,紧接着进入执行阶段。该阶段中,连接到各种能够进行所需运算的CPU部件。

  第四阶段:写回,以一定格式将执行阶段的结果简单的写回。运算结果经常被写进CPU内部的暂存器,以供随后指令快速存取。在执行指令并写回结果之后,程序计数器值会递增,反覆整个过程,下一个指令周期正常的提取下一个顺序指令。

二、指令集

  CPU依靠指令来自计算和控制系统,每款CPU在设计时就规定了一系列与其硬件电路相配合的指令系统。指令的强弱也是CPU的重要指标,指令集是提高微处理器效率的最有效工具之一。

从现阶段的主流体系结构讲,指令集可分为复杂指令集和精简指令集两部分(指令集共有四个种类)。

  CISC指令集,也称为复杂指令集,英文名是CISC,(Complex Instruction Set Computing的缩写)。x86CPU主要有intel的服务器CPU和AMD的服务器CPU两类。

  RISC是英文“Reduced Instruction Set Computing ”的缩写,中文意思是“精简指令集”。在中高档服务器中采用RISC指令的CPU主要有以下几类:PowerPC处理器、SPARC处理器、PA-RISC处理器、MIPS处理器、Alpha处理器。

三、指令集架构

  微处理器的指令集架构(ISA,Instruction Set Architecture)常见种类如下: 复杂指令集运算(Complex Instruction Set Computing,CISC);精简指令集运算(Reduced Instruction Set Computing,RISC) ;显式并行指令集运算(Explicitly Parallel Instruction Computing,EPIC);超长指令字指令集运算(VLIW)。

  CISC:主要针对的操作系统是微软的Windows。另外Linux,一些UNIX等都可以运行在x86(CISC)架构的微处理器。

  参考百度百科:https://baike.baidu.com/item/中央处理器/284033?fr=aladdin

 

以上是关于cpu:编程中的CPU架构知识(指令集:x86armrisc-vloongarc)的主要内容,如果未能解决你的问题,请参考以下文章

CPU指令集架构

ARM与X86 CPU架构区别

[架构之路-13]:目标系统 - 硬件平台 - 五种主流CPU架构的比较(CISC X86RISC ARMRISC PowerPCRISC MIPSRISC-V)

CPU架构类型

求助!为啥X86以上的CPU指令集不提供给用户呢?比如X86-64,sSSE3等等。

“常言的x86”理解