bits 32 section .text global set_gdt set_gdt: mov eax, [esp + 4] mov [gdtbase], eax mov ax, [esp + 8] mov [gdtlim], ax lgdt [gdtlim] ret global setup_selectors setup_selectors: ; set data selectors directly mov ax, [esp + 8] mov ss, ax mov es, ax mov ds, ax mov gs, ax mov fs, ax ; set cs with a long jump mov ax, [esp + 4] mov [jseg], ax mov dword [joffs], .setcs jmp far [joffs] .setcs: ret align 4 joffs dd 0 jseg dw 0 gdtlim dw 0 gdtbase dd 0 ; vi:ft=nasm: