6

xv6 https://github.com/chrisdew/xv6/blob/master/bootasm.Sで、16 ビットから 32 ビット プロテクト モードに移行する方法を示す素敵なアセンブリを見つけました。

64ビットモードに入る同様の例を知っている人はいますか? (32ビットモードを使用するかどうかにかかわらず。)

4

3 に答える 3

7

64 ビット機能を有効にするには、CPU をロング モードに切り替える必要があります。

64 ビット x86 プロセッサ (x86-64) でロング モードに入るには:

If paging is enabled, disable paging.
If CR4.PAE is not already set, set it.
Set IA32_EFER.LME = 1.
Load CR3 with a valid PML4 table.
Enable paging.
At this point you will be in compatibility mode. A far jump may be executed to switch to long mode. However, the offset must not exceed 32-bit.
于 2014-04-09T12:44:20.113 に答える
2

OSDevは、x86 に関する低レベルの情報 (およびその他のアーキテクチャに関する情報) の優れたリソースです。たとえば、この記事は、ロング モードと、プロテクト モードとリアル モードの両方からのロング モードへの移行方法に関する非常に優れた記事です。

ロングモードに入る

ロング モードへの移行は、リアル モードとプロテクト モードの両方から実行できますが、Intel および AMD64 のマニュアルではプロテクト モードのみが説明されています。初期の AMD のドキュメントでは、このプロセスがリアル モードからも機能することが説明されています。

于 2014-04-09T13:15:10.003 に答える