【问题标题】:x86 instruction set roadmapx86 指令集路线图
【发布时间】:2010-01-11 19:54:30
【问题描述】:

在长时间的高级编程之后,我只是接触了 x86 指令集的表面。大约 20 年来,我第一次阅读 x86 汇编编程,从我的谷歌搜索中,我迷失了无数的指令集参考;从混合新一代处理器(286、386、486...)的处理器到添加更新 x86 指令的处理器。更不用说 AMD 的变体了。

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

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

高举标准化大旗不是我的主意。我只是想看看路,了解哪里是安全的步行场所。如果有人可以提供帮助,我将不胜感激!

【问题讨论】:

    标签: assembly x86 opcode


    【解决方案1】:

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

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

    【讨论】:

    • 我注意到最近在各种发行版中为 586 (Pentium) 或更高版本构建 Linux 内核的趋势......尽管它们仍然不能默认为 686 (Pentium II/III/ IV/Pro) 内核,因为它们与 k7 (AMD Athlon) 指令之间存在差异。
    • R. Bemrose:这是最终的合乎逻辑的方式。 IMO,x86-64 的美妙之处不仅仅是 64 位,而是为处理器支持的指令(例如 SSE)建立了合理的最小值
    • fedoraproject.org/wiki/Features/F12X86Support Fedora 12 现在为 i686 构建,放弃了对许多旧处理器的支持。我可怜的Via C3 ... :-(
    • 感谢您的回复!好的,选择386。我看到其他趋势也这么说。但它不会再次落入同一个问题吗?谁是鸡蛋,谁是鸡?通用 386 在哪里?
    • @Ruben:(如果我正确理解您的问题...)我相信英特尔处理器软件开发手册intel.com/products/processor/manuals 很好地描述了 386。此外,汇编程序通常支持指令来指定编写代码的最小处理器,以防止您意外使用更新的、可能不受支持的指令。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-21
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      • 2014-12-23
      相关资源
      最近更新 更多