为什么一个可执行文件可以在 Intel 和 AMD 处理器上运行?

问题描述 投票:0回答:2

可执行文件如何在 AMD 和 Intel 系统上运行? AMD 和 Intel 的指令集不一样吗?可执行文件如何在两者上工作?他们究竟如何编译文件才能像那样工作?操作系统在这一切中究竟扮演什么角色?

executable instructions instruction-set platform-independent
2个回答
15
投票

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

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

实现差异的一个很好的例子是英特尔喜欢 超线程内核 而 AMD 喜欢只添加更多内核的方式。他们出于多种原因这样做,例如功耗和更好的并发处理,但如果程序运行,它不会真正影响,因为它不会更改指令集。 Intel 和 AMD 的另一个区别是流水线阶段的数量,这会影响速度。

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


3
投票

现在基本上,编译是针对操作系统完成的,而不是针对硬件。由于大多数硬件都具有通用协议和/或技术,如 Seth Rachwitz 的回答、x86 或 x64 机器代码/操作码/指令集所述,一些程序员确实制作了旨在在某些硬件上运行得更好的软件,即针对 AMD 或英特尔等

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

应该记住不同的人以不同的方式使用相同的东西。麻省理工学院的人可能会决定根据自己的需要编写自己的操作系统代码,并且可能希望使用英特尔指令集的高级特定功能。还有一些人完全重做他们自己的机器人,等等。

© www.soinside.com 2019 - 2024. All rights reserved.