CPU指令集存储位置在哪里?

首先,CPU指令集是在CPU设计时固化在里面的“硬程序”,整合在CPU内部的逻辑电路中,不是什么代码,也谈不上“存储”。所以我们在CPU里是不可能找到“指令集”的实体的,如果非要具象化,那它就是“汇编语言”转换到“机器码”(相当于一个翻译过程)+CPU执行机器码的晶体管和逻辑电路的集合。

CPU指令集与CPU的架构息息相关,我们常见的有英特尔和AMD为代表的X86体系,大量用于电脑和服务器;另外就是精简指令集架构的ARM,集于ARM架构的CPU大量用于移动设备。比方说我们做了一个应用程序,想同时可以运行在PC和手机上,那样把它编译成X86版本就可以在X86指令集上运行,相应的再编译一个ARM版本就可以在ARM指令集上运行,不管编译成什么版本,从哪个设备上运行,大体流程就是从软件请求>操作系统请求>CPU指令集执行这么一个过程,大量跨平台的应用程序就是这样来的。

指令集的存在规定了CPU如何识别汇编指令,以及如何与操作系统(上层)交互。打个比方说,指令集就像路上的红绿灯,红灯停绿灯行,车辆什么时候可以走,什么时候不可以走,都是按这个既定规则才能执行的,而且这个规则不可变动。我们常用的win7、win10等操作系统的底层架构就是基于CPU的指令集进行设计的,必须无条件服从指令集体系,所以问题所说的“操作系统从哪里获取CPU指令集信息”的说法是不成立的。

我们再谈一谈具体的指令集,像英特尔主流酷睿处理器中就具备EM64T,MMX,SSE,SSE2,SSE3,SSE4A,SSE4.1,SSE4.2,AVX,AVX2等指令集,AMD处理器也有一些专有的指令集,但是还是以兼容英特尔的为主,为什么要这样,首先英特尔多年雄厚的技术实力使得它牢牢掌握着指令集制定权(开发全新指令集可不是件容易的事),支持新指令集的CPU推出后,众多开发者会开始进行学习并应用到新的应用程序中,从而提高运行效率,对于AMD而言,开发新指令集的实力远不如英特尔,也耗不起那个时间,索性就直接支持英特尔的指令集,这样也能保证CPU的速度,同时让广大应用开发者还免去了重复学习成本。

每个指令集都有自身的用途,比如SSE指令集主要在于加强CPU浮点运算效能,AVX指令集则可以大大提高CPU视频编码的效能,它们就像一道道高效率的数学公式,如果有应用程序针对这些指令集进行设计优化,则可以大大提高程序某些方面的运行效率。

发布了162 篇原创文章 · 获赞 125 · 访问量 47万+

猜你喜欢

转载自blog.csdn.net/jiangchao3392/article/details/102504837
今日推荐