, böyle bir şey yapabilirsiniz: Yukarıdaki kod
%xdefine PML4_BASE 0x70000 ; Address of PML4-table.
%xdefine CR0_PE 1 << 0
%xdefine CR0_PG 1 << 31
%xdefine CR4_PAE 1 << 5
%xdefine CR4_PGE 1 << 7
%xdefine EFER_LME 1 << 8
mov eax, CR4_PAE | CR4_PGE ; Set PAE- (Physical Address Extensions) and
mov cr4, eax ; PGE- (Page Global Enable).
mov eax, PML4_BASE ; Address of PML4.
mov cr3, eax ; Point CR3 to PML4.
mov ecx, 0xC0000080 ; EFER MSR selector.
rdmsr ; Read from model specific register.
or eax, EFER_LME ; Set LME (Long Mode Enable).
wrmsr ; Write to model specific register.
mov ebx, cr0 ; Get CR0.
or ebx, CR0_PG | CR0_PE ; Set PG (Paging) and PE (Protection Enabled).
mov cr0, ebx ; Set flags to CR0.
lgdt [GDT.ptr] ; Load global descriptor table.
jmp GDT.code_0:long_mode_entry ; Jump to long mode.
Zaten kurulum sayfası tabloları ve Küresel tanımlayıcı tablosu olmasını gerektirir.
Resmi belgeler: [Intel® 64 ve IA-32 Mimarileri Yazılım Geliştirici El Kitabı, Cilt 3A: Sistem Programlama Kılavuzu:] (https://www.intel.com/content/www/us/en/architecture-and- teknoloji/64-ia-32-mimarileri-yazılım-geliştirici-vol-3a-part-1-manual.html) "Bölüm 9.8.5 IA-32e Modunu Başlatma" –