xv6 https://github.com/chrisdew/xv6/blob/master/bootasm.Sで、16 ビットから 32 ビット プロテクト モードに移行する方法を示す素敵なアセンブリを見つけました。
64ビットモードに入る同様の例を知っている人はいますか? (32ビットモードを使用するかどうかにかかわらず。)
xv6 https://github.com/chrisdew/xv6/blob/master/bootasm.Sで、16 ビットから 32 ビット プロテクト モードに移行する方法を示す素敵なアセンブリを見つけました。
64ビットモードに入る同様の例を知っている人はいますか? (32ビットモードを使用するかどうかにかかわらず。)
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.
OSDevは、x86 に関する低レベルの情報 (およびその他のアーキテクチャに関する情報) の優れたリソースです。たとえば、この記事は、ロング モードと、プロテクト モードとリアル モードの両方からのロング モードへの移行方法に関する非常に優れた記事です。
ロングモードに入る
ロング モードへの移行は、リアル モードとプロテクト モードの両方から実行できますが、Intel および AMD64 のマニュアルではプロテクト モードのみが説明されています。初期の AMD のドキュメントでは、このプロセスがリアル モードからも機能することが説明されています。