這個問題在這里已經有了答案: x86 32 位匯編代碼是否有效 x86 64 位匯編代碼? (2 個回答) 11 小時前關閉。
Intel x64 CPU 也可以運行 x86 asm。CPU 中是否有標志或模式來確定指令應解碼為 x86 還是 x64?CPU 如何知道指令是 x86 還是 x64?
在 CPU 級別(不是作業系統級別!),是否可以混合使用 x86 和 x64 指令?
注意:在作業系統級別有很多關于這個問題的 SO Q&A ;我對CPU 級別感興趣。談論庫、檔案等,不是在 CPU 級別。
uj5u.com熱心網友回復:
IA32_EFER MSR 中的位 LMA(Long Mode Active)表示處理器處于長模式(64 位模式)。
在長模式下,活動代碼段描述符中的 L 位指示處理器是在解碼 32 位還是 64 位指令。
要改變 LMA,軟體先清零 CR0 中的 PG 位,改變 EFER 中的 LME 位,然后設定 PG。
要更改 CS 中的 L 位,軟體執行遠跳轉或遠呼叫,以使用具有所需值的代碼段描述符的選擇器加載 CS。
uj5u.com熱心網友回復:
對于 80x86;CPU 模式與代碼大小或指令解碼幾乎沒有關系(并且主要決定在昂貴的事情期間會發生什么,例如段暫存器加載和降級為微代碼的中斷處理程式)。
對于指令解碼,重要的是代碼大小(不是 CPU 模式);并且有 3 種可能性 - 16 位代碼、32 位代碼和 64 位代碼。
在長模式下,代碼大小由代碼段描述符中的 2 位決定。
在保護模式下,代碼大小由代碼段描述符中的 1 位決定(64 位代碼不是一個選項)。
在實模式(以及其他一些情況 - virtual8086 模式、系統管理模式)下,代碼大小“名義上固定”為 16 位(其中“名義上固定”意味著有辦法解決它,包括暫時切換到另一種模式來捏造) .
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/338680.html
