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
- dw 0
+joffs dd 0
+jseg dw 0
gdtlim dw 0
gdtbase dd 0