Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可执行文件如何能够在Windows的不同CPU上运行_Windows_Assembly_Executable - Fatal编程技术网

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

可执行文件如何能够在Windows的不同CPU上运行,windows,assembly,executable,Windows,Assembly,Executable,我听说汇编语言取决于CPU,而且一个.exe文件几乎可以在所有Windows机器上运行。让我想知道这是怎么回事 这是否意味着只有少数几种汇编语言 或 Windows系统是否进行某种转换以适应不同类型的CPU?简单的答案是: 它们不能在“不同的CPU”上执行 更复杂的答案: 大多数运行Windows的计算机只使用两种不同类型的CPU:x86或x86-64 x86-64与x86兼容,因此您可以在x86-64 CPU上运行为x86编译的可执行文件 无法在x86 CPU上运行为x86-64编译的可执行

我听说汇编语言取决于CPU,而且一个.exe文件几乎可以在所有Windows机器上运行。让我想知道这是怎么回事

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


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

简单的答案是:

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

更复杂的答案:

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

  • x86-64与x86兼容,因此您可以在x86-64 CPU上运行为x86编译的可执行文件
  • 无法在x86 CPU上运行为x86-64编译的可执行文件
  • 有些Windows计算机使用不同的CPU(ARM、MIPS、SuperHA…)。无法在x86-64或x86 CPU上运行为这些CPU编译的可执行文件。另一方面,您只能在这样的计算机上运行针对特定CPU类型(ARM、MIPS、SuperH…)编译的可执行文件
还有所谓的“.NET”可执行文件。此类可执行文件不包含任何机器代码,但包含特殊字节码(类似于Java程序)

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

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


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

简单的答案是:

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

更复杂的答案:

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

  • x86-64与x86兼容,因此您可以在x86-64 CPU上运行为x86编译的可执行文件
  • 无法在x86 CPU上运行为x86-64编译的可执行文件
  • 有些Windows计算机使用不同的CPU(ARM、MIPS、SuperHA…)。无法在x86-64或x86 CPU上运行为这些CPU编译的可执行文件。另一方面,您只能在这样的计算机上运行针对特定CPU类型(ARM、MIPS、SuperH…)编译的可执行文件
还有所谓的“.NET”可执行文件。此类可执行文件不包含任何机器代码,但包含特殊字节码(类似于Java程序)

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

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


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

因为这些不同的CPU都使用相同的指令集,即x86或x86-64。如果你用另一个,比如手臂,它就不会跑了。Windows甚至不会在其中安装。请尝试在32位Windows和Windows上运行64位二进制文件see@Havenard您最好声明已排除Embedded、IoT和RT 8/8.1。因为这些不同的CPU都使用相同的指令集,即x86或x86-64。如果你用另一个,比如手臂,它就不会跑了。Windows甚至不会在其中安装。请尝试在32位Windows和Windows上运行64位二进制文件see@Havenard你最好声明你已经排除了,IoT和RT 8/8.1.ARM64支持即将出现在Windows 10桌面上——可能是通过32位x86仿真来运行现有的WinAPI应用程序。@eryksun为什么不像在其他操作系统中那样,他们不直接从源代码重新编译所有包呢?为模仿而烦恼。。。疯狂。@Ped7g,实际上,这不会发生。应用程序依赖于封闭源代码库和其他超出其控制范围的应用程序。在某些情况下,甚至可能没有人拥有源代码了。即使他们拥有所有的代码,也可能写得很糟糕,而且没有经过测试,因此从时间和成本上来说,将其移植到新的体系结构是不值得的。如果Windows桌面要支持ARM64和bootstrap市场支持,模拟x86是必须具备的功能。@Ped7g他们将如何编译Adobe源代码?你看到他们的演示了吗?这是一个运行在ARM上Windows上的win32 Photoshop。显然,所有Windows应用程序都将编译成ARM@L如果您谈到MS演示,请看下面的例子:这个演示演示了一个在ARM上运行的x86CPU仿真器。因此,这些应用程序实际上是在模拟的x86 CPU上运行的。ARM64支持正在进入Windows 10桌面--可能是通过32位x86模拟来运行现有的WinAPI应用程序。@eryksun为什么不像在其他操作系统中一样,从源代码重新编译所有包呢?为模仿而烦恼。。。疯狂。@Ped7g,实际上,这不会发生。应用程序依赖于封闭源代码库和其他超出其控制范围的应用程序。在某些情况下,甚至可能没有人拥有源代码了。即使他们拥有所有的代码,也可能写得很糟糕,而且没有经过测试,因此从时间和成本上来说,将其移植到新的体系结构是不值得的。如果Windows桌面要支持ARM64和bootstrap市场支持,模拟x86是必须具备的功能。@Ped7g他们将如何编译Adobe源代码?你看到他们的演示了吗?这是一个运行在ARM上Windows上的win32 Photoshop。显然,所有Windows应用程序都将编译成ARM@L如果您谈到MS演示,请参阅:此演示演示了一个x86