org 0x7c00
bits 16
;注意低1M可用0x0~0x9ffff
;屏蔽中断:
cli
in al,0x70
or al,0x80
out 0x70,al
;进入64bits:
db 0x66
lgdt [GDT64];加载GDT
mov eax,cr4
bts eax,5
mov cr4,eax
;设置long-mode页表
mov eax,0x5000
mov cr3,eax
mov ecx,0xc0000080
rdmsr
or eax,0x00000101
wrmsr
db 66h
lidt [];加载IDT
mov eax,cr0
or eax,0x80000001
and eax,0x9fffffff
mov cr0,eax
jmp SC64:;跳转
;各表:
;GDT:
_gdt64:
dq 0,0
_gtd64_code:
dd 0
db 0
db 0x98
db 0x20
db 0
_gtd64_data:
dd 0
db 0
db 0x92
dw 0
_gdt64_end:
GDT64:
dw _gdt64_end-_gdt64-1
dd _gdt64
SC64 equ _gtd64_code-_gdt64
SD64 equ _gtd64_data-_gdt64
times 510-($ -$$) db 0
dw 0xaa55