; GDT global descriptor table gdt_start: ; mandatory null entry gdt_null: dd 0x0 dd 0x0 ; code segment ; base=0x0, limit=0xfffff ; flags: present (not paged), ring 0, executable, direction bit ; conforming, writable, not accessed ; granularity: 4kb pages, 32-bit mode, no 64-bit segment, AVL would ; be for our own extensions gdt_code: dw 0xffff ; limit (bits 0-15) dw 0x0 ; base (bits 0-15) db 0x0 ; base (bits 16-23) db 10011010b ; flags db 11001111b ; flags, limit (bits 16-19) db 0x0 ; base (bit 24-31) ; flat model, same as code segment, but flags are ; flags: ring 0, gdt_data: dw 0xffff ; limit (bits 0-15) dw 0x0 ; base (bits 0-15) db 0x0 ; base (bits 16-23) db 10010010b ; flags db 11001111b ; flags, limit (bits 16-19) db 0x0 ; base (bit 24-31) gdt_end: gdt_descriptor: dw gdt_end -gdt_start - 1 ; size dd gdt_start ; start address of the GDT ; constants representing the segment bases CODE_SEGMENT equ gdt_code - gdt_start DATA_SEGMENT equ gdt_data - gdt_start