什么是Intel微码?

时间:2010-12-06 13:27:16

标签: linux assembly intel

据我所知,它用于修复CPU中的错误而无需修改BIOS。 根据我对汇编的基本知识,我知道汇编指令在内部由CPU分成微码并相应地执行。但是,在系统启动并运行时,intel会以某种方式提供访问以进行更新。

任何人都有更多信息吗?是否有关于微码可以做什么以及如何使用它们的文件?


编辑: 我已经阅读了维基百科的文章:我不知道如何自己写一些,以及它有什么用途。

3 个答案:

答案 0 :(得分:76)

在较旧的时代,微代码在CPU中被大量使用:每条指令都被分成微码。这使得适度CPU中相对复杂的指令集成为可能(考虑到Motorola 68000具有多个操作数模式和8个32位寄存器,适合40000个晶体管,而单核现代x86将拥有超过100个< EM>百万)。这不再适用。出于性能原因,大多数指令现在都是“硬连线”:它们的解释是由任何微码之外的不灵活电路执行的。

在最近的x86中,似乎有些复杂的指令,如fsin(计算浮点值的正弦函数)是用微码实现的,但是简单的指令(包括{{1的整数乘法) }}) 不是。这限制了使用自定义微码可以实现的目标。

话虽这么说,微代码格式不仅非常特定于特定的处理器型号(例如Pentium III和Pentium IV的微代码不能互相自由交换 - 当然,使用Intel微代码处理AMD处理器是不可能的),但它也是一个严重保护的秘密。英特尔发布了操作系统或主板BIOS可以更新微码的方法(必须在每次硬复位后完成;更新保存在易失性RAM中),但微代码内容没有记录。 Intel® 64 and IA-32 Architectures Software Developer’s Manual(第3a卷)描述了更新过程(第9.11节“微码更新设施”),但声明实际的微码是“加密的”并且是时钟满的校验和。措辞含糊不清,几乎可以隐藏任何类型的加密保护,但最重要的是,对于英特尔以外的人来说,目前不可能编写和尝试一些自定义微码。

如果“加密”不包括数字(非对称)签名和/或如果英特尔人以某种方式破坏了保护系统,那么可以想象一些显着的逆向工程工作可以可能使一个人产生这样的微码,但是,考虑到可能性有限(因为大多数指令是硬连线的),就编程能力而言,这可能不会太大。

答案 1 :(得分:17)

松散地思考虚拟机或模拟器,例如qemu-arm可以模拟x86主机上的arm处理器,理想情况下,模拟臂上运行的软件不知道它不是真正的手臂。将这个想法提升到整个芯片设计的水平,使得它看起来总是像x86,软件永远不会知道芯片内部有一些可编程项目。而其他一些处理器在某种程度上是为了实现/模拟x86而设计的。据说流行的AMD 29000产品系列刚刚消失,因为硬件团队和处理器/核心成为早期x86克隆的核心。 Linus工作的Transmeta有一个vliw处理器,它被制作成低功耗的x86。在那种情况下,翻译层不是(尽可能多)秘密。 Vliw,非常长的指令词,RISC发挥到极致,是你为这种任务建立的那种东西。

不,它不像我暗示的那么多仿真层,没有一些linux在每个芯片内部运行qemu程序。它介于硬连线之间,中间没有软件/微代码和完全打击模拟。可编程位可以像fpga,可编程门,也可以是软件或可编程状态机,意味着不可编程门,只需在门上运行的是可编程的。

您的非x86,非大铁型处理器。以ARM为例,是硬连线,没有微码。微控制器,PIC,MSP430,AVR,假设这些不是微编码的。基本上不要假设所有处理器都是微编码的,如果有任何处理器系列则很少。只是我们在PC上处理的那些已经存在并且可能仍然如此,所以可能感觉它们都是。

尽管玩这个微代码听起来很有趣,但它可能非常特定于处理器系列,除非您为英特尔或AMD工作,否则您可能永远无法获得它的工作方式,每个人都可能拥有他们的自己的内部。因此,您需要在两个中的一个中找到一份工作,然后通过战壕工作,成为完成这项工作的精英团队之一。一旦你的职业生涯陷入困境,你的技能可能仅限于一家公司的一份工作。你可能有更多的乐趣在一个视频卡上编写单独的gpus,一些记录或者至少有工具的东西,今天你可以做的事情,而不用花费10年时间在AMD或英特尔可能无处可去。

答案 2 :(得分:9)

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