2017-09-24 92 views
-2

我聽說Assembly語言取決於CPU,事實上.exe文件幾乎可以在所有Windows機器上運行。讓我想知道這是如何工作的?Executable如何能夠在Windows的不同CPU上運行

這是否意味着只有幾種彙編語言?

或 Windows系統是否進行某種翻譯以適應不同類型的CPU?

+1

因爲這些不同的CPU都使用相同的指令集,即x86或x86-64。如果使用不同的ARM,它將不會運行。 Windows甚至不會安裝在那。 – Havenard

+0

嘗試在32位Windows上運行64位二進制文​​件,並參見 –

+0

@Havenard您最好聲明已排除Embedded,IoT和RT 8/8.1。 – iBug

回答

3

答案很簡單:

他們不能對 「不同的CPU」 執行。

更復雜的答案:

運行Windows大多數計算機使用僅不同類型的CPU: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程序。

計算機將實際執行「翻譯」,而不是原始的「.NET」可執行文件。

因爲「翻譯」是針對特定計算機完成的,所以不需要在不同的CPU上執行。

+1

對Windows 10桌面提供ARM64支持 - 可能使用32位x86仿真來運行現有的WinAPI應用程序。 – eryksun

+0

@eryksun爲什麼不像他們的操作系統那樣,只是簡單地重新編譯源碼包中的所有包?困擾着模擬......瘋狂。 – Ped7g

+0

@ Ped7g,實際上,這不會發生。應用程序依賴於不受其控制的封閉源庫和其他應用程序。在某些情況下,甚至沒有人再有源代碼。即使他們擁有所有的代碼,它的編寫和測試可能都很差,將它移植到新的架構上並不值得花費時間和成本。如果Windows桌面支持ARM64和bootstrap市場支持,則仿真x86是必備功能。 – eryksun