回覆列表
  • 1 # 使用者8063443138229

    要保證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所謂的相容性僅僅體現在使用者態。

  • 中秋節和大豐收的關聯?
  • 閩南語歌曲中有一句歌詞叫啊等等等無人?