37 lines
550 B
NASM
37 lines
550 B
NASM
SECTION .text
|
|
USE16
|
|
|
|
protected_mode:
|
|
|
|
.func: dd 0
|
|
|
|
.entry:
|
|
; disable interrupts
|
|
cli
|
|
|
|
; load protected mode GDT
|
|
lgdt [gdtr]
|
|
|
|
; set protected mode bit of cr0
|
|
mov eax, cr0
|
|
or eax, 1
|
|
mov cr0, eax
|
|
|
|
; far jump to load CS with 32 bit segment
|
|
jmp gdt.pm32_code:.inner
|
|
|
|
USE32
|
|
|
|
.inner:
|
|
; load all the other segments with 32 bit data segments
|
|
mov eax, gdt.pm32_data
|
|
mov ds, eax
|
|
mov es, eax
|
|
mov fs, eax
|
|
mov gs, eax
|
|
mov ss, eax
|
|
|
|
; jump to specified function
|
|
mov eax, [.func]
|
|
jmp eax
|