Assembly x86指令集路线图

Assembly x86指令集路线图,assembly,x86,opcode,Assembly,X86,Opcode,经过长时间的高级编程之后,我只触及x86指令集的表面。我第一次阅读x86汇编编程已经有大约20年了,从我的谷歌搜索中,我被无数的指令集引用迷住了;从混合新一代处理器(286386486…)到添加新x86指令的其他处理器。更不用说AMD的变种了 由于我正计划构建一个引导加载程序,我的第一个想法是完全符合“标准x86”,但我无法确定它在何时何地,甚至它是否存在于任何地方 即使是英特尔的文档似乎也遵循同样的路径,就像另一个文档所说的那样,“我们需要x86指令集标准化,操作码的演变是混乱的” 举着标准化

经过长时间的高级编程之后,我只触及x86指令集的表面。我第一次阅读x86汇编编程已经有大约20年了,从我的谷歌搜索中,我被无数的指令集引用迷住了;从混合新一代处理器(286386486…)到添加新x86指令的其他处理器。更不用说AMD的变种了

由于我正计划构建一个引导加载程序,我的第一个想法是完全符合“标准x86”,但我无法确定它在何时何地,甚至它是否存在于任何地方

即使是英特尔的文档似乎也遵循同样的路径,就像另一个文档所说的那样,“我们需要x86指令集标准化,操作码的演变是混乱的”


举着标准化的旗帜不是我的主意。我只想看看路,知道哪里是安全的地方。如果有人能帮忙,我会非常感激的

从历史上看,x86非常向后兼容。x86-64已经扔掉了一些非常旧的指令(如BCD指令),但这些变化不太可能再次发生(至少在64位地址空间转换等重大变化发生之前不会发生)


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

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

我注意到最近有一种趋势,即在各种发行版中为586(奔腾)或更高版本构建Linux内核。。。尽管它们仍然不能默认为686(奔腾II/III/IV/Pro)内核,因为它们与k7(AMD Athlon)指令之间存在差异。贝姆罗斯:这是一个合乎逻辑的最终选择。在我看来,x86-64的美妙之处不仅仅在于64位,还在于为处理器(如SSE)支持的指令设定了合理的最小值。Fedora 12现在为i686构建,因此放弃了对许多旧处理器的支持。我可怜的儿子-(谢谢你的回答!好吧,386是选择。我看到其他趋势也这么说。但它不会再落在同一个问题上了?谁是蛋,谁是鸡?通用386在哪里?@Ruben:(如果我正确理解你的问题的话…)我相信英特尔处理器软件开发手册对386的描述相当好。此外,汇编程序通常支持指令来指定编写代码的最小处理器,以防止您意外使用更新的、可能不受支持的指令。