我聽說Assembly語言取決於CPU,事實上.exe文件幾乎可以在所有Windows機器上運行。讓我想知道這是如何工作的?Executable如何能夠在Windows的不同CPU上運行
這是否意味着只有幾種彙編語言?
或 Windows系統是否進行某種翻譯以適應不同類型的CPU?
我聽說Assembly語言取決於CPU,事實上.exe文件幾乎可以在所有Windows機器上運行。讓我想知道這是如何工作的?Executable如何能夠在Windows的不同CPU上運行
這是否意味着只有幾種彙編語言?
或 Windows系統是否進行某種翻譯以適應不同類型的CPU?
答案很簡單:
他們不能對 「不同的CPU」 執行。
更復雜的答案:
運行Windows大多數計算機使用僅不同類型的CPU:x86或x86-64的。
然後有所謂的「.NET」可執行文件。這樣的可執行文件不包含任何機器代碼,但它們包含特殊的字節代碼(類似於Java程序)而不是。
當您在某臺計算機上第一次運行該程序時,Windows會將該字節代碼轉換爲適合您運行該程序的計算機的機器代碼。如果您在ARM計算機上運行該程序,則字節代碼將被轉換爲ARM程序。
計算機將實際執行「翻譯」,而不是原始的「.NET」可執行文件。
因爲「翻譯」是針對特定計算機完成的,所以不需要在不同的CPU上執行。
對Windows 10桌面提供ARM64支持 - 可能使用32位x86仿真來運行現有的WinAPI應用程序。 – eryksun
@eryksun爲什麼不像他們的操作系統那樣,只是簡單地重新編譯源碼包中的所有包?困擾着模擬......瘋狂。 – Ped7g
@ Ped7g,實際上,這不會發生。應用程序依賴於不受其控制的封閉源庫和其他應用程序。在某些情況下,甚至沒有人再有源代碼。即使他們擁有所有的代碼,它的編寫和測試可能都很差,將它移植到新的架構上並不值得花費時間和成本。如果Windows桌面支持ARM64和bootstrap市場支持,則仿真x86是必備功能。 – eryksun
因爲這些不同的CPU都使用相同的指令集,即x86或x86-64。如果使用不同的ARM,它將不會運行。 Windows甚至不會安裝在那。 – Havenard
嘗試在32位Windows上運行64位二進制文件,並參見 –
@Havenard您最好聲明已排除Embedded,IoT和RT 8/8.1。 – iBug