64位作業系統 CPU 如何相容32位程式 軟體 請看詳情。?

時間 2021-05-05 18:19:46

1樓:北極

要保證64位相容性,無非就是兩點:

1. 硬體相容(指令層面上);

2. 軟體相容(作業系統);

因為以上兩點都能保證,所以自然32位程式能在相容32位程式的作業系統+CPU上跑。

具體的形式:

1. 硬體相容

現有的x86架構的CPU,作業系統進入64位的工作模式都是相容32位的,即使在long-mode模式下,彙編指令的預設運算元大小不全是64位的,實際上多數都是32位的。所以硬體指令直接平移過來就可以了。

比如彙編指令TEST EAX,EAX;

在32位下編碼是 0x85 0xC0

在64位下編碼也是 0x85 0xC0

硬體相容提供了軟體相容的基礎。

2. 軟體相容

Windows和Linux都提供了32位的使用者態執行庫,所以使用者呼叫各種系統API都可以直接相容。

系統呼叫方面,雖然系統核心是64位的,但因為CPU對32位程式發起系統呼叫時處理的流程不同,所以作業系統能感知到系統呼叫是從什麼狀態發起的,剩下的工作就是專門對32位做一下處理即可。

實際應用中,還有一些特殊的情況,比如:

1. 硬體不提供對早期指令的支援,或者作業系統不想用這種方式,那麼作業系統也可以採用虛擬機器的方式用軟體模式,比如Win2000-WinXP時代裡的控制台(cmd)在執行16位程式時就是完全模擬出來的(比如debug命令)

2. 絕大多數64位作業系統對32位的相容僅僅做到了應用程式,而不是驅動(核心態),因為在核心態提供32位支援是乙個很麻煩並且有風險的事情,而且核心態程式對CPU擁有完整的控制權,很容易讓系統崩潰,所以64位Windows和Linux所謂的相容性僅僅體現在使用者態。

2樓:「已登出」

上面的32位模式和PAE模式是「純32位」的,在這兩種狀態下cpu工作在32位保護模式。

下面的4級分頁是64位專用的,在這個狀態下CPU工作在長模式。

段描述符的L位(CS.L),當然就是long的意思,可以用來從長模式的64位模式切換到32位相容模式,在32位相容模式下,CPU模擬32位處理器的行為,但是依然使用長模式的4級分頁機制。

你看intel就是這樣,標誌位的名字都叫long mode enable,為了和amd做區分模式名字一定要叫ia32e

沒找到圖,將就看吧。

牽扯到的標誌位包括,CR0.PG, CR4.PAE, EFER.LME, EFER.LMA, CS.L

對了之前還牽扯到乙個CR0.PE,用來從實模式切換到保護模式

參考文獻:intel sdm,卷3

3樓:喵喵

只是這個32位的相容包如何在64位的CPU或者作業系統上執行呢

對於 64 位 Windows 來說,包含一整套 32 位 Windows 所需的系統呼叫等所需的檔案,可以執行幾乎所有不依賴驅動的 32 位應用程式。這堆東西加起來叫 WoW64 (Windows on Windows 64),你可以看作這是 Win32 子系統的一部分。

從 Windows Server 2008 R2 開始,可以不安裝 WoW64,系統會無法執行 32 位程式。

macOS 等 UNIX 及 Linux 等 UNIX-Like 不懂。

或者64位CPU上也有人裝32位的作業系統

x64-64 的 CPU 相容之前的所有 32 位 x86 CPU 的指令集。

即是說,同一條指令在 32 位 x86 CPU 上執行的結果和在 64 位 x86-64 CPU 上執行的結果一致。

ARM 架構類似,ARMv8 相容所有 ARMv7 的指令集。

其他架構不懂。

電腦顯示是64位作業系統可是安裝不了64位的軟體,如何處理?

初生之鳥 ARM64的Windows只支援以下架構的程式 32位x86 一般指的32位程式多是這個需要經過x86二進位制翻譯器效能比較差 32位ARM 現在能找到的多是幾年前為越獄Windows RT裝置移植的程式很多都能直接在上面執行 大部分UWP也會是32位ARM 64位ARM 現在很多軟體都在...

64位作業系統跟32位比有什麼區別?

普通IT技術人員 說作業系統32 64位的區別,就不得不說,cpu硬體的位數區別,主要是硬體工藝的問題。32位CPU指的是該CPU在單位時間內能一次處理的二進位制數的位數為32位 64位CPU指的是該CPU在單位時間內能一次處理的二進位制數的位數為64位 而作業系統位數是針對cpu的位數而開發出來的...

C 如何跨平台判斷作業系統是32位還是64位?

WhatIsSpin 題主你這問題,成心折騰程式設計師。首先得說明一下,不呼叫系統API,又想知道與系統相關的東西,這就像你讓我進門拿東西,又把門鎖上不給我鑰匙一樣,正統方法是根本不可能做到的 且不深究這麼做有什麼意義,本來乙個很簡單的函式就能解決的問題繞個圈 那就得走曲道破窗而入。其次是跨平台不是...