经过长时间的高级编程后,我只是触摸了x86指令集的表面。大约20年来,我第一次阅读x86汇编编程,从我的谷歌搜索中我得到了大量的指令集引用;从那些将新一代处理器(286,386,486 ......)与其他添加更新x86指令的处理器混合在一起的处理器。更不用说AMD的变化了。
由于我打算构建一个启动加载器,我首先想到的是完全符合'标准x86',但我无法弄清楚它的位置,甚至它是否存在于任何地方。
即使是英特尔文档似乎也遵循相同的路径,就像另一个人所说的那样,'我们需要x86指令集标准化,操作码的演变是混乱的'。
持有标准化横幅并不是我的想法。我只想看看路,了解哪里是安全的行走地点。如果有人能提供帮助,我会非常感激!
答案 0 :(得分:5)
从历史上看,x86一直非常向后兼容。 x86-64抛弃了一些非常旧的指令(比如BCD指令),但这种更改不太可能再次发生(至少在64位地址空间转换发生之前不会发生)。
如果您想确保您的代码几乎适用于所有x86处理器,请坚持使用386指令集(如果您的代码是32位)或早期的x86-64指令集(如果它是64位)。 / p>
答案 1 :(得分:1)
引导加载程序以16位实模式执行(尽管您可以通过操作数大小前缀访问32位寄存器)。获得386指令参考,您将是安全的。