可执行文件如何能够在 Windows 的不同 CPU 上运行

Eds*_* Ho 2 windows assembly executable

我听说汇编语言取决于 CPU,事实上 .exe 文件几乎可以在所有 Windows 机器上运行。让我想知道这是如何工作的?

这是否意味着只有几种汇编语言?

或者 Windows 系统是否进行某种转换以适应不同类型的 CPU?

Mar*_*nau 7

简单的回答:

它们不能在“不同的 CPU”上执行。

更复杂的答案:

大多数运行 Windows 的计算机仅使用两种不同类型的 CPU:x86 或 x86-64。

  • x86-64 与 x86 兼容,因此您可以在 x86-64 CPU 上运行为 x86 编译的可执行文件。
  • 不能在 x86 CPU 上运行为 x86-64 编译的可执行文件。
  • 有使用不同 CPU(ARM、MIPS、SuperH...)的 Windows 计算机。您不能在 x86-64 或 x86 CPU 上运行为这些 CPU 编译的可执行文件。另一方面,您只能在此类计算机上运行为特定 CPU 类型(ARM、MIPS、SuperH...)编译的可执行文件。

然后是所谓的“.NET”可执行文件。此类可执行文件包含任何机器代码,但包含特殊的字节代码(类似于 Java 程序)。

当您第一次在某台计算机上运行该程序时,Windows 会将该字节码转换为适合您运行该程序的计算机的机器代码。如果您在 ARM 计算机上运行该程序,则字节码将被转换为 ARM 程序。

计算机将实际执行“翻译”,而不是原始的“.NET”可执行文件。

因为“翻译”是针对特定计算机完成的,所以不需要在不同的 CPU 上执行。