bits 16 org 0x7c3e kernel_sectors equ 16 kernel_segment equ 0x3000 in al, 0x92 or al, 0x02 out 0x92, al xor ax, ax mov ss, ax mov sp, 0x7ffc mov ah, 0x01 mov ch, 0x3f int 0x10 mov ax, kernel_segment mov es, ax mov ax, 0x0200 + kernel_sectors xor bx, bx mov cx, 0x0002 xor dh, dh int 0x13 cli lgdt [gdt] mov eax, cr0 or al, 0x01 mov cr0, eax jmp 0x08:pmode bits 32 pmode: mov ax, 0x10 mov ds, ax mov ax, 0x18 mov ss, ax mov sp, 0x7ffc jmp kernel_segment * 16 gdt: dw .e - .t dd .t .t: dq 0x0000_0000_0000_0000 dq 0x00c0_9a00_0000_007f dq 0x00c0_9200_0000_00ff dq 0x0040_9203_8000_7fff .e: times $$ + 448 - $ db 0 dw 0xaa55