1// Zero memory for page directories and page tables 2mov $0x1000,%edi 3mov $0x1000,%ecx 4xor %eax,%eax 5rep stos %eax,(%edi) 6 7// Load DWORD [0x4000] with 0xDEADBEEF to retrieve later 8mov $0x4000,%edi 9mov $0xBEEF,%eax 10mov %eax, (%edi) 11 12// Identify map the first 4MiB of memory 13mov $0x400,%ecx 14mov $0x2000,%edi 15mov $3, %eax 16loop: 17stos %eax,(%edi) 18add $0x1000,%eax 19loop loop 20 21// Map phyiscal address 0x4000 to cirtual address 0x7FF000 22mov $0x3ffc,%edi 23mov $0x4003,%eax 24mov %eax, (%edi) 25 26// Add page tables into page directory 27mov $0x1000, %edi 28mov $0x2003, %eax 29mov %eax, (%edi) 30mov $0x1004, %edi 31mov $0x3003, %eax 32mov %eax, (%edi) 33 34// Load the page directory register 35mov $0x1000, %eax 36mov %eax, %cr3 37 38// Enable paging 39mov %cr0, %eax 40or $0x80000000, %eax 41 42// Clear EAX 43mov %eax, %cr0 44 45//Load using virtual memory address; EAX = 0xBEEF 46xor %eax,%eax 47mov $0x7FF000, %esi 48mov (%esi), %eax 49hlt 50