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

How does Executable able to run on different CPUs for Windows

我听说汇编语言依赖于 CPU,而且一个 .exe 文件几乎可以用于所有 Windows 机器。让我想知道这是如何工作的?

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

或 Windows 系统是否会进行某种翻译以适应不同类型的 CPU?

简单答案:

它们无法在 "different CPUs" 上执行。

更复杂的答案:

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

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

还有所谓的 .NET" 可执行文件。这样的可执行文件 包含任何机器代码,但它们包含特殊的字节代码(类似于 Java 程序)。

当您运行程序第一次在某台计算机上运行时Windows会将该字节码翻译成适合您运行程序所在计算机的机器码。如果您 运行 ARM 计算机上的程序,字节码将被翻译成 ARM 程序。

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

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