您现在的位置是:首页 > 正文

CPU扫盲-CPU与指令集

2024-02-01 04:56:45阅读 2

  指令集架构就像是特定的CPU的设计图纸,它规定了这个CPU需要支持那些指令、寄存器有那些状态以及输入输出模型。根据指令集结构的设计,在CPU上通过硬件电路进行实现,就得到了支持该指令集的CPU。指令集就像是我们编程语言中的接口,只定义规范和标准,不做具体的实现,同一个指令集架构可以有多种不同的实现方式,但只要是基于同一指令集架构的应用程序可以相互移植。所以我们上层应用只需要关注CPU的指令集架构即可,具体的CPU实现由厂商去关注。

  很多非开发的同学指令集名称与CPU名称分不清。这是因为一种 CPU 只能识别一种指令集,所以很多情况下 CPU 都以其支持的指令集名称来称呼,比如当我们要下载软件时通常关注的就是指令集的名称x86、ARM等,但是我们在买电脑时厂商备注的却是酷睿12代、龙芯3C5000、飞腾2000等,所以导致有的同学会把龙芯、飞腾、酷睿与x86、ARM搞混。这里的龙芯、飞腾、酷睿指的是CPU的名称,名字可以有CPU的厂商来取。而x86、ARM则是指令集的名称,基本都是由国外最早的几家处理器厂商创造并命名的如:x86是美国Intel公司、ARM是英国的ARM公司。

  CPU本身只是在块硅晶片上所集成的超大规模的集成电路,集成的晶体管数量可达到上亿个,是由非常先进复杂的制造工艺制造出来的,所以CPU的性能不仅仅受指令集的影响,相同的指令集下好的CPU厂商和差的CPU厂商制造出来的CPU性能也是天差地别的,如:苹果自研的m1芯片,使用的就是ARM指令集,但其性能吊打很多使用ARM指令集的CPU厂商(这个不得不承认)。

  相信大家也知道国内很多优秀CPU厂商如:long xin、fei teng、kun peng等,目前只有老大哥long xin自研了LoongArch指令集。为何其他厂商都选择走捷径采用的国外的指令集呢?指令集的创造真的那么难吗?虽然创造一套指令集并不容易,但也没有到望而却步的程度,真正难的是指令集背后的生态和推广。就像我自己可以发明一门语言,语言本身没什么问题,问题是我用自己发明的语言和别人交流,谁听得懂呢,谁又愿意去学这门语言呢?大家都很忙,不通用的东西没人愿意花精力去学。同一段机器指令010001110(随便写的),在A指令集下这组机器语言可能表示赋值,在B指令集下,这组机器语言可能表示循环,所以相同一段源代码,在不同指令集的编译器下,最终呈现的编译结果是不同的,虽然都是由01组成的二进制数字,但是长短和顺序是不同的,所以每个指令集都要有对应的编译器汇编器解释器(后文暂且统称编译器),编译后的汇编语言和机器语言是不能跨指令集使用的。试想如果要自立门户创造新的指令集,那有谁愿意给它写编译器呢?这可不是一个小工程,他要跟着指令集的迭代而迭代,也要自己不断的优化迭代,需要大量的人力成本和时间成本。即使自己完成了编译器,要知道每种指令集都有他自己的新特性以及一些特殊指令,不然也没必要重复造轮子,如果一些软件使用了ARM或者x86的特殊指令(一些内嵌汇编语言的软件,如:jvm的模版解释器就使用了汇编语言),那这些软件就要自己修改源代码来适配新的指令集,软件的开发程序员自然骂娘。所以自研指令集并不难,难的是如何推广,让大家用起来。这里要再吹一下老大哥long xin,long xin发布LoongArch指令集的同时,完成了针对GCC、LLVM、GoLang三大编译器的开发,完成了针对Java、JavaScript、.NET三大虚拟机的开发,使操作系统厂商和应用伙伴,可基于long xin的软件环境,更方便地开发应用。long xin为了能够更好的适应市场,也为了避免软件程序员骂娘,投入巨大成本完成ARM和x86指令集的二进制翻译工作,使运用了ARM和x86特性的软件也不用修改源码即可适配,但指令集翻译本身只是过渡的手段,为了增加用户群体,我相信随着long xin的独立软件生态逐渐强大,指令集翻译就会越来越边缘化,成为锦上添花之举。long xin的自研指令集也为全面国产化奠定了牢固的基础,在此也希望国内更多软件厂商能给与long xin支持,待到中华腾飞日,且让世界听龙吟

  至此CPU和指令集的关系已经讲解完毕,我们在下载软件时除了要选择指令集之外,还要选择32位还是64位如: * * * .x86_32、 * * *.x86_64,我们已经知道了x86代表的是指令集,那32位和64位是指什么呢?

  这里32 位和 64 位中的“位”就是bit,也叫字长,是指的是cpu一次能处理的数据的长度(也就是寄存器的位数)。这里有一个误区很多人一直认为32位和64位代表的是CPU地址总线引脚的数量,因为谈起32位和64位CPU的不同第一个想到的就是寻址空间不同,32位CPU最大可以寻址4GB的内存地址,64位CPU寻址范围可以远超4GB,而地址总线的数量对应着CPU的寻址能力(由于32位CPU地址总线引脚是32条,每根地址总线的状态只能是高电平或低电平,也就是只能是1或0。 所以32位地址总线一共有232种状态,每种状态代表一个内存地址,每个内存地址为1字节,所以232种状态一共可以表示4GB的内存地址),所以这个误区坑骗了很多人。在Intel x86指令集架构下的第一款CPU 80x86中,CPU是16位但地址引线却是20条,通过将段基址寄存器中段基地址左移4位再加段内偏移地址的方式实现了20位地址寻址,所以说32和64指的并不是地址总线的数量。至于为什么现在CPU不管是32位的还是64位其地址总线引脚数量都等于其位数,是因为现在不管是资源还是制造工艺都远胜当年,没必要因为几根地址总线再去做段基地址左移这种设计上的妥协,不然每次寻址前都要先做一次乘法对CPU的性能还是影响很大的。

网站文章

  • 【绘制】HTML5 Canvas 三次方贝塞尔曲线,bezierCureTo()的使用

    【绘制】HTML5 Canvas 三次方贝塞尔曲线,bezierCureTo()的使用

    我的处女作《Canvas系列教程》在我的Github上正在连载更新,希望能得到您的关注和支持,让我有更多的动力进行创作。 教程介绍、教程目录等能在README里查阅。 传送门:https://github.com/827652549/CanvasStudy 介绍 上一节,我们介绍了二次方贝塞尔曲线的用法。现在我们来介绍一下三次方贝塞尔曲线。 既然二次方贝塞尔曲线是向一个方向弯曲的曲线...

    2024-02-01 04:56:38
  • How to enable SSO on domino server

    How to enable SSO on domino server

    Open Server doc file, under Internet Protocols->DWA, select Multiple Servers (SSO) in http sessions section.Select SSO Configurations from Create Web... Open Server doc, select the key to Web SSO

    2024-02-01 04:56:10
  • 摄像头无线传输到服务器方案,智能无线微型咳嗽WIFI摄像头的硬件方案

    摄像头无线传输到服务器方案,智能无线微型咳嗽WIFI摄像头的硬件方案

    智能无线微型咳嗽WIFI摄像头以智慧温度计为链接载体,连接家庭里的宝贝孩子与医生,家庭与医院,患者与医院,为家庭提供最专业的孩子护理和保健,通过孩子的扁桃体图片、提供视频分析为诊断提供依据;智能无线微...

    2024-02-01 04:56:03
  • eclipse 配置php扩展,Eclipse PHP插件(PHPEclipse)安装与配置图解

    PHPeclipse是什么?PHPeclipse是Eclipse的一个插件,它为php开发人员提供了一个集成的开发环境。PHPeclipse这个插件包括的功能有:PHP语法分析,调试,代码格式化,大纲...

    2024-02-01 04:55:55
  • IT行业什么语言最火

    在 IT 行业,目前最热门的编程语言包括: Python:用于各种应用,包括 web 开发、机器学习、数据分析和科学计算。 Java:用于构建企业级应用,是 Android 移动应用的首选语言。 JavaScript:用于客户端 web 开发,可以与 HTML 和 CSS 配合使用,可以实现动态网页效果。 C++:用于操作系统、浏览器、游戏开发等,是一种通用编程语言。 C#:用于构建 W...

    2024-02-01 04:55:47
  • 预科教育计算机基础知识重点,预科计算机基础试题(43页)-原创力文档

    我想忘记你,可做不到……?其实你并不是 完美得无可替代,?你永远是不懂我的心思?不知道我为什么会因为一件小事?就能 开心一整天?也不知道我为什么会因为一句话?而 难过好多天?不懂我的任性?我的乱发脾气?我的恨从哪里来??为什么我总是有那么多脾气?总是那么斤斤计较?总是那么不懂事?其实所有的所有?只是因为爱你?心里全部都是你?你能够活在一个没有我的世界?而我却只能活在一个只有你的天空?谁让我先...

    2024-02-01 04:55:18
  • df -h统计的信息与du -sh不一致的原因(转)

    有时候会遇到这样的问题:df -h统计一个目录,显示有约100M可用空间,使用了5G;而用du -sh统计该目录下的文件大小,却发现总共才占用了1G。也就是说,二者统计结果差距巨大。 例如: 1、df -h /tmp/ 结果: Size Used Avail Use% Mounted on3.9G 3.5G 220M 95% /tmp 2、du -sh...

    2024-02-01 04:55:12
  • java.sql.SQLException: The server time zone value ‘�й���׼ʱ��‘ is unrecognized or

    java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or

    2024-02-01 04:55:05
  • c# winform常用控件缩写大全

    在网上看到了C#控件的缩写大全,为了以后自己方便查找,便引用其原文。 原文地址:https://blog.csdn.net/pp_fzp/article/details/50751259

    2024-02-01 04:54:35
  • 精简Git

    精简Git:1.版本控制、2.聊聊Git的历史、3.Git环境配置、4.Git基本理论(重要)、5.Git项目搭建、6.Git文件操作、7.使用码云、8.IDEA中集成Git、9.git分支、10.git的后续学习

    2024-02-01 04:54:28