从我读到的内容来看,它用于修复CPU中的错误,而无需修改BIOS。根据我对汇编的基本知识,我知道汇编指令由CPU在内部分解为微代码,并相应地执行。但是intel可以通过某种方式在系统启动和运行时进行一些更新。
有人有更多信息吗?是否有任何关于微码可以做什么以及如何使用的文档?
编辑:我读过维基百科的文章:没弄清楚我怎么能自己写一些,以及它有什么用。
从我读到的内容来看,它用于修复CPU中的错误,而无需修改BIOS。根据我对汇编的基本知识,我知道汇编指令由CPU在内部分解为微代码,并相应地执行。但是intel可以通过某种方式在系统启动和运行时进行一些更新。
有人有更多信息吗?是否有任何关于微码可以做什么以及如何使用的文档?
编辑:我读过维基百科的文章:没弄清楚我怎么能自己写一些,以及它有什么用。
Answers:
在较早的时期,微代码在CPU中被大量使用:每条指令都被拆分成微代码。这在适度的CPU中启用了相对复杂的指令集(考虑到具有许多操作数模式和八个32位寄存器的Motorola 68000可以安装在40000个晶体管中,而单核现代x86将拥有超过一亿个)。这不再是真的。出于性能原因,现在大多数指令都是“硬连线”的:它们的解释是由任何微代码外部的非柔性电路执行的。
在最新的x86中,可能有一些复杂的指令(例如fsin
(在浮点值上计算正弦函数)用微码实现),而简单的指令(包括与imul
进行整数乘法)却没有。这限制了使用自定义微代码可以实现的功能。
话虽这么说,微码格式不仅非常特定于特定的处理器型号(例如,奔腾III和奔腾IV的微码不能相互自由交换-当然,将AMD微码用于AMD处理器当然不可行了)问题),但它也是受严格保护的秘密。英特尔已经发布了一种操作系统或主板BIOS可以更新微码的方法(必须在每次硬重置后完成;更新保存在易失性RAM中),但是微码内容未记录在案。在英特尔®64和IA-32架构软件开发人员手册(第3a卷)描述了更新过程(第9.11节“微码更新工具”),但指出实际的微码已“加密”并且校验和已满时钟。措词含糊不清,几乎可以隐藏任何种类的密码保护,但最重要的是,对于除英特尔以外的其他人来说,目前不可能编写和尝试一些自定义微代码。
如果“加密”不包括数字(非对称)签名,并且/或者如果英特尔员工以某种方式破坏了保护系统,那么可以想到,一些非凡的逆向工程工作可能使人们能够产生这种微代码,但是鉴于适用性可能有限(由于大多数指令都是硬接线的),就编程能力而言,这样做的机会不大。
松散考虑虚拟机或模拟器,例如qemu-arm可以在x86主机上模拟手臂处理器,理想情况下,在模拟手臂上运行的软件不知道它不是真正的手臂。将此想法带到整个芯片的设计水平,使其看起来总是x86,软件永远不会知道芯片内部有一些可编程的项目。并且内部的其他一些处理器是为实现/模拟x86而设计的。可能流行的AMD 29000产品线消失了,因为硬件团队以及也许处理器/内核成为了早期x86克隆的勇气。Linus工作的Transmeta拥有一个vliw处理器,该处理器被制成低功耗x86。在那种情况下,翻译层不是秘密。Vliw,很长的指令字,
不,它不像我所暗示的那样是一个仿真层,在每个芯片内部都没有运行带有qemu程序的linux。它介于中间没有软件/微代码的硬连线和完全仿真之间。可编程位可以像fpga,可编程门一样,也可以是软件或可编程状态机,这意味着非可编程门,只是在门上运行的是可编程的。
您的非x86,非大型铁类型处理器。以ARM为例,是硬连线的,没有微码。PIC,MSP430,AVR等微控制器假定它们未经过微编码。基本上不假定所有处理器都是微编码的,很少假设有任何处理器系列。仅仅是我们在PC中处理过的那些东西已经过去了,也许现在仍然如此,所以感觉就像它们一样。
使用此微代码听起来可能很有趣,但它可能非常特定于处理器系列,除非您为Intel或AMD工作,否则每个人都有自己的内部结构,您可能永远无法访问它的工作方式。因此,您需要在两者之一中找到一份工作,然后在战es中努力,成为一支可能从事这项工作的精英团队之一。而且,一旦您陷入困境,您的技能就可能仅限于在一家公司的一份工作。您可能会对在视频卡上的单个GPU进行编程更有趣,这已被记录或至少具有工具,您今天可以执行而无需在AMD或Intel工作10年就无法实现的目标。
您通常不会编写微代码。为此,需要对CPU微体系结构有深入的了解。英特尔一般不会在其微体系结构或微代码上发布任何信息。