首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用微编程来修改Intel CPU的指令集体系结构?

如何使用微编程来修改Intel CPU的指令集体系结构?
EN

Stack Overflow用户
提问于 2022-11-01 21:55:41
回答 3查看 95关注 0票数 2

假设我想修改现有指令的实现。例如,假设在获取和解码"mov“指令后执行”mov“指令时,我希望更改由处理器执行的微代码。我该怎么做?

另外,假设我想向ISA添加一个新的指令。例如,假设当前没有使用一个操作码,我希望我的处理器能够在获取它之后进行解码和执行。我该怎么做?

老实说,我甚至不知道从哪里开始,这就是为什么我要问堆栈溢出。我没有编写微码的经验,我只知道这个词是从我的计算机架构课上学来的。我知道查找x86指令列表非常容易,但我不知道在哪里可以查找微指令列表。我甚至不知道英特尔是否公开了他们的微码清单。我不知道我需要用什么程序将这些新的微程序加载到我的CPU内的适当内存中。我认为引导程序可能与此有关,但我可能完全错了。如果我拥有我的CPU,我认为我在法律上能够修改它的微码,并反向工程它的指令,但更容易理解我的CPU是如何工作的,它的微码如何可以通过现有的文件,而不是通过逆向工程来改变。

我知道有一些较小的硬件厂商生产开源ISAs--如果我想尝试一下,也许从其中一个供应商那里购买一个CPU会更好?但我不知道其他厂商提供的CPU是最好的。但实际上,我并不认为购买一个新的CPU对于我想要做的事情是必要的,因为如果有必要的话,我可以使用我现有的CPU在虚拟机中运行开源ISA (我从软件的角度对微指令和微程序感兴趣,而不是从硬件的角度)。

EN

回答 3

Stack Overflow用户

发布于 2022-11-01 22:42:45

例如,假设在获取和解码"mov“指令后执行”mov“指令时,我希望更改由处理器执行的微代码。我该怎么做?

你会:

a)取得计算机工程、计算机科学和/或电气/电子工程硕士学位。

( b)申请英特尔(或AMD)的一份工作,并得到它

( c)努力提升公司结构,以达到一个能够影响未来产品设计的位置

请注意,一个简单的mov指令不会使用微代码,所以您必须首先更改它。

我没有写微码的经验

微码被加密,并被视为商业秘密;所以“几乎没有人”(我猜可能有20名英特尔员工?)有为Intel CPU编写微码的经验。

我知道有一些较小的硬件厂商生产开源ISAs--如果我想尝试一下,也许从其中一个供应商那里购买一个CPU会更好?

“开源ISA”主要意味着一家能够花费数百万$$制造自己芯片的大公司可以节省大约50美分的许可费。

实用的替代方案是使用FPGA (但成本和性能远远低于您从自定义ASIC中获得的)。

票数 6
EN

Stack Overflow用户

发布于 2022-11-01 22:59:44

在现代mov CPU (https://uops.info/ https://agner.org/optimize/)中,各种x86操作码在固定功能逻辑中解码为单个uop,微码不能修改。(除mov用于分段寄存器,或移动到/从控件或调试寄存器。)

即使是英特尔()也无法在他们想要用于谱缓解的时候添加任意的新指令;一些解码器硬件是固定功能的,直接产生uop,只是在某些需要超过4个uop的操作码上间接地指向微码排序器。

英特尔所做的是增加了一个新的MSR (模型特定的寄存器)。wrmsr在ECX中获取一个数字,并使用该数字来确定要运行的微代码。就像一个“函数指针”除了微码。因此,这个新的MSR是一种方式,一个微代码更新可以添加一些新的微码到旧的CPU,这样OSes可以让它运行并修改CPU的内部状态。

因此,ECX=49H (IA32_PRED_CMD) / wrmsr的作用就像一个新指令,您运行它是为了获得副作用,而不是实际设置一个值。请参阅https://www.intel.com/content/dam/develop/external/us/en/documents/336996-speculative-execution-side-channel-mitigations.pdf

类似地,为了允许OSes通过在某些点清理内部状态来减轻一些MDS漏洞,英特尔增加了verw的行为,而不是添加不同的指令。请参阅https://security.stackexchange.com/questions/210209/what-are-the-new-mds-attacks-and-how-can-they-be-mitigated

其中的一些动机可能是,32位操作码的编码空间已经满了,但同样有可能它已经是一条微编码指令:超过4 uop,因此它是通过间接指向微代码排序器来处理的。因此,微码更新可以取代发布的uop序列。

(64位模式有相当多未使用的操作码,因为AMD64删除了一些过时的指令,如aaa和段规则的push/pop。)

我甚至不知道英特尔是否公开了他们的微码清单。

非常不。这不仅是无文件的,微码小块是加密的,并签署了一个秘密的密钥。

戈德蒙特的钥匙泄露了,因此,它的固件可以被解密,并有可能被反向工程。,尽管没有任何格式的文档或比特的含义是不容易的。但仍然无法加载修改后的固件到一个真正的CPU,AFAIK。

票数 6
EN

Stack Overflow用户

发布于 2022-11-01 23:02:52

如果您对自定义指令感兴趣,请查看RISC V.它保留了用于自定义的操作码,并且是开放源代码(硬件),可以在没有许可证的情况下编辑,也可以加入某个私有组织。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74282231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档