什么是英特尔微代码?

从我读过的内容来看,它用来修复CPU中的错误而不修改BIOS。 根据我对汇编的基本知识,我知道汇编指令被CPU内部分成微码并相应执行。 但是intel以某种方式允许在系统启动并运行时进行一些更新。

任何人有更多的信息? 有没有关于微码可以做什么的文档,以及如何使用它们?


编辑:我读过维基百科的文章:没有弄清楚我怎么可以写一些我自己的,什么使用它会有。

在以前的时代,微代码在CPU中被大量使用:每一条指令都被分成微代码。 这可以在适度的CPU上实现相对复杂的指令集(考虑到Motorola 68000具有许多操作数模式和8个32位寄存器,可以装入40000个晶体pipe,而单核现代x86将拥有超过1 亿个 )。 这不是真的 出于性能的原因,大多数指令现在都是“硬连线”的:他们的解释是由任何微代码之外的不灵活的电路来执行的。

在最近的x86中,一些复杂的指令如fsin (用浮点值计算正弦函数)是用微码实现的,但是简单的指令(包括与imul整数乘法)却不是这样。 这限制了使用自定义微码可以实现的function。

这就是说,微码格式不仅仅是特定的处理器模式(例如,Pentium III和Pentium IV的微码不能彼此自由交换 – 当然,使用英特尔微代码的AMD处理器已经超出了这个问题),但这也是一个受到严格保护的秘密。 英特尔已经公布了操作系统或主板BIOS可以更新微码的方法(每次硬复位后必须完成;更新保存在易失性RAM中),但是微码内容没有logging。 英特尔®64和IA-32架构软件开发人员手册 (第3a卷)介绍了更新程序(第9.11节“微码更新设施”),但指出实际的微码是“encryption的”,并且时钟已满校验和。 措词含糊不清,几乎可以隐藏任何forms的密码保护,但底线是目前英特尔以外的人可以编写和尝试一些自定义的微码。

如果“encryption”不包括数字(不对称)签名和/或英特尔人以某种方式亵渎了保护系统,那么可以设想一些显着的反向工程努力可能使得人们能够产生这样的微码,但是,考虑到可能性有限(因为大多数指令是硬连线的),就编程能力而言,很可能不会有太多的购买。

思考松散的虚拟机或模拟器,例如qemu-arm可以模拟x86主机上的arm处理器,理想情况下在模拟arm上运行的软件不知道它不是一个真正的arm。 把这个想法提升到整个芯片devise的水平,使得它总是看起来像一个x86,但是软件从来不知道芯片内部有一些可编程的项目。 还有一些其他的处理器是为了实现/模拟x86而devise的。 假设stream行的AMD 29000产品线刚刚消失,因为硬件团队,也许处理器/核心成为早期x86克隆的胆量。 在Linus工作的Transmeta有一个vliw处理器,被制成低功耗的x86处理器。 在这种情况下,翻译层不是秘密。 Vliw,非常长的指令词,RISC走到了极点,就是你为这种任务而build立的东西。

不,它不像我暗示的那么多的仿真层,在每个芯片内部都没有一个运行着qemu程序的linux。 它在中间没有软件/微码的硬连线和完整的模拟之间。 可编程位可能像fpga,可编程门,或者可能是软件或可编程状态机,意味着不可编程的门,正是在门上运行的是可编程的。

您的非x86非铁大型处理器。 以ARM为例,硬连线,无微码。 微控制器,PIC,MSP430,AVR,假设这些都没有微码。 基本上不要假设所有处理器都是微码的,如果有任何处理器家族的话,很less。 只是我们在PC上处理的东西已经并可能仍然存在,所以它可能感觉就像它们一样。

玩这个微代码听起来很有趣,但它可能非常特定于处理器家族,除非您为英特尔或AMD工作,否则您可能无法访问其工作原理,每种工作都可能有自己的内部工作。 所以你需要在其中的一个工作,然后通过壕沟工作,成为一个可以做这项工作的精英团队之一。 而一旦你到达那么远,你的职业就被困住了,你的技能可能只限于一个公司的一份工作。 在video卡上编写个人gpus可能会有更多的乐趣,有些文档或者至less有一些工具可以使用,而现在你可以在AMD或Intel花费10年的时间完成某些任务。

你通常不写微码。 要做到这一点,需要熟悉CPU微架构。 英特尔不会一般发布任何微架构或微代码的信息。