global start extern kmain section .text bits 32 start: ; print `OK` to screen ; mov dword [0xb8000], 0x2f4b2f4f ; mov word [0xb8000], 0x0248 ; H ; mov word [0xb8002], 0x0265 ; e ; mov word [0xb8004], 0x026c ; l ; mov word [0xb8006], 0x026c ; l ; mov word [0xb8008], 0x026f ; o ; mov word [0xb800a], 0x022c ; , ; mov word [0xb800c], 0x0220 ; ; mov word [0xb800e], 0x0277 ; w ; mov word [0xb8010], 0x026f ; o ; mov word [0xb8012], 0x0272 ; r ; mov word [0xb8014], 0x026c ; l ; mov word [0xb8016], 0x0264 ; d ; mov word [0xb8018], 0x0221 ; ! lgdt [gdt_info] call kmain hlt ; WARNING: Do not insert random label/lines between gdt_xxx label gdt_start: ;TODO GDT entries, like null, kernel code, kernel data, user code, user data, TSS... gdt_info: dw gdt_info - gdt_start - 1 dq gdt_start section .bss resb 64 head_stack: