x86指令集路线图

7

经过长时间的高级编程,我只是涉及到了x86指令集的表面。大约20年前,我第一次接触x86汇编程序设计,但是通过我的搜索,我对于众多指令集参考文献感到困惑。有些混合了新一代处理器(286、386、486等),还有一些添加了较新的x86指令,更不用提AMD的变化了。

由于我计划构建一个引导加载程序,所以我的第一个想法是要完全遵守“标准x86”,但我无法确定它在何时出现,甚至无法确定它是否存在于任何地方。

即使是英特尔文档也似乎走同样的路线,正如另一个人所说,“我们需要一个x86指令集标准化,操作码的演变是混乱的。”

我并不想成为标准化的旗手。我只想看到道路,并理解安全行走的地方。如果有人能帮忙,我将非常感激!

2个回答

5

历史上,x86一直非常向后兼容。x86-64放弃了一些非常古老的指令(如BCD指令),但是这种变化不太可能再次发生(至少在64位地址空间转换之前不会发生)。

如果你想确保你的代码可以在几乎所有的x86处理器上运行,请使用386指令集(如果你的代码是32位)或早期的x86-64指令集(如果是64位)。


1
我注意到最近有一种趋势,即在各种发行版中构建适用于586(Pentium)或更高版本的Linux内核...尽管由于这些和k7(AMD Athlon)指令之间的差异,它们仍无法默认为686(Pentium II/III/IV/Pro)内核。 - Powerlord
R. Bemrose:这是一个最终合理的逻辑方式。在我看来,x86-64的美不仅在于它是64位的,而且还建立了处理器支持的指令的合理最小值(例如SSE)。 - Mehrdad Afshari
https://fedoraproject.org/wiki/Features/F12X86Support Fedora 12现在支持i686架构,不再支持许多旧处理器。我的可怜的Via C3... :-( - ephemient
谢谢回复!好的,386 是选择。我看到其他趋势也在说同样的话。但是它不会再次陷入同样的问题吗?谁是鸡蛋,谁是鸡?通用的 386 在哪里? - Ruben Trancoso
@Ruben:(如果我理解你的问题正确的话……)我相信英特尔处理器软件开发手册http://www.intel.com/products/processor/manuals/很好地描述了386。此外,汇编程序通常支持指令来指定代码编写的最低处理器,以防止您意外使用较新的、可能不受支持的指令。 - Mehrdad Afshari
显示剩余2条评论

1

引导加载程序在16位实模式下执行(虽然您可以通过操作数大小前缀访问32位寄存器)。获取386指令参考,您就会安全。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接