为什么可执行文件可以在英特尔和AMD处理器上运行?

24
一个可执行文件如何能在 AMD 和 Intel 系统上运行?AMD 和 Intel 的指令集不同,它们是如何做到同时兼容的?编译器是如何处理这些文件的?操作系统在其中扮演了什么角色?

2
可能是Do Intel and AMD processor have the same assembler?的重复问题。 - Jan
2个回答

17

在给定的处理器迭代中,AMD和Intel之间唯一真正的区别是它们支持的指令集的实现。x86(32位)和x64(64位)是Intel和AMD处理器最常见的两种指令集。

当Intel和AMD在其芯片中实现指令集时,差异就出现了,但这些实现不应对指令集本身产生任何影响。因此,如果程序编译为x64处理器,则可以在实现x64指令集的任何处理器上运行,几乎所有现代Intel和AMD处理器都实现了该指令集。

一个很好的实现差异例子是Intel喜欢超线程核心,而AMD则喜欢添加更多核心。他们这样做有多种原因,例如功耗和更好的并发处理,但这并不会影响程序运行,因为它不会改变指令集。 Intel和AMD之间的另一个区别是流水线阶段的数量,这可能会影响速度。

当考虑操作系统时,会涉及到巨大的复杂性。Windows拥有庞大的库,如果程序想要在Windows上运行,就必须使用这些库。Linux和Mac OS X也是如此。由于这些库在不同的操作系统之间并不共享,因此在一个操作系统上编写的程序可能无法在另一个操作系统上运行。

5

现在基本上来说,编译是为操作系统而不是硬件进行的。由于大多数硬件都有通用协议和/或技术,如Seth Rachwitz's answer中所提到的x86或x64机器代码/操作码/指令集,一些程序员确实会制作针对特定硬件更好运行的软件,即优化了AMD或Intel等。

但他们仍然有其他版本适用于其他硬件。主要是由于操作系统,您需要关注位长度。和/或运行操作系统时,大多数编译器或软件制造商倾向于编译出共享机器代码而不是制造商特定的代码。

应该记住,不同的人以不同的方式使用相同的东西。麻省理工学院的人可能决定为自己的需求编写自己的操作系统,并希望使用Intel的指令集的高级特定功能。有些人完全重新制作自己的Android等。


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