为什么 x86 应用程序无法在 ARM 处理器上运行?

为什么 x86 应用程序无法在 ARM 处理器上运行?

在计算机中,内核位于应用程序和硬件(CPU)之间,它允许软件与硬件交互。

那么在 Microsoft Surface X(SQ1 和 SQ2 处理器)上,为什么开发人员不能从 x86 Windows 中带来他们的应用程序?例如 Chrome、Firefox、一些基准测试工具和游戏......我认为微软只需要用 ARM 版本替换他们的 x86-64 内核,大多数应用程序就可以正常运行。

Linux 也同样如此。

答案1

在这种情况下,内核所做的工作比你预期的要少。特别是,内核不会翻译/解析/解释/破坏编译后的二进制文件的机器码。

当有人编译源代码转换成二进制文件,他们实际上做的是将源代码翻译成机器代码指令CPU 能够理解。

其中一个原因是x86一个平台,是一个共享指令系统在所有兼容硬件上。这样,编译器就可以预期,PUSH当您通过线程执行该指令时,任何 x86 CPU 都会理解该指令并执行预期的操作。

手臂使用不同的指令集。在这种情况下,源代码需要编译(翻译)成 ARM CPU 可以理解的指令(其指令集中定义的指令)。

并非所有程序都使用“本机”二进制文件(仅由 CPU 指令集实现的格式正确的指令组成的二进制文件)。Java 和 C# 等语言编译为虚拟汇编语言,并在运行时 JIT 编译为本机指令。其他语言使用针对特定平台定制的解释器。

因此,总而言之,ARM CPU 无法识别 x86 编译程序使用的语言,反之亦然。虽然内核将控制硬件访问和 CPU 调度等内容,但它不会更改系统上执行的程序的指令。它只是创建进程、启动执行并授予 CPU 上的执行时间,以便许多进程可以半同时共享它。

相关内容