為什麼 x86 應用程式無法在 ARM 處理器上運作?

為什麼 x86 應用程式無法在 ARM 處理器上運作?

在電腦中,核心位於應用程式和硬體 (CPU) 之間,它允許軟體與硬體互動。

那麼在 Microsoft Surface X(SQ1 和 SQ2 處理器)上,為什麼開發人員不能從 x86 Windows 移植他們的應用程式?例如Chrome,Firefox,一些基準測試工具和遊戲...我認為微軟只需要用ARM版本替換他們的x86-64內核,大多數應用程式就可以正常工作。

Linux 也是如此。

答案1

在這種情況下,核心所做的事情比您預期的要少。特別是,核心不會翻譯/解析/解釋/破壞編譯後的二進位檔案所包含的機器碼。

當有人編譯原始碼轉換為二進位文件,他們所做的實際上是將原始程式碼轉換為機器碼指令CPU 可以理解的。

其中一件事情使得x86一個平台,一個共享指令系統跨所有相容的硬體。這樣,編譯器就可以期望任何 x86 CPU 都能理解該PUSH指令,並在您透過執行緒執行該指令時執行預期的操作。

手臂使用不同的指令集。在這種情況下,需要將原始程式碼編譯(翻譯)為 ARM CPU 可以理解的指令(在其指令集中定義的指令)。

並非所有程式都使用「本機」二進位(僅由 CPU 指令集實現的格式良好的指令組成的二進位)。 Java 和 C# 等語言編譯為虛擬組譯語言,並在執行時期 JIT 編譯為本機指令。其他人使用為給定平台定制的解釋器。

總而言之,ARM CPU 無法辨識 x86 編譯程式所使用的語言,反之亦然。雖然核心將控制硬體存取和 CPU 調度等事務,但它不會更改系統上執行的程式的指令。它只是創建進程,開始執行,並授予 CPU 執行時間,以便許多進程可以半同時共享它。

相關內容