Files
SUB-OS/boot/gdt.asm
T

44 lines
1.4 KiB
NASM

; Global Descriptor Table Definition
align 16
gdt_start:
; Null descriptor (0x00)
dq 0
; 32-bit Code Segment (0x08)
dw 0xFFFF ; Limit (low 16 bits)
dw 0x0000 ; Base (low 16 bits)
db 0x00 ; Base (next 8 bits)
db 10011010b ; Access byte (Present, Ring 0, Code/Data, Executable, Read/Write)
db 11001111b ; Flags (32-bit, 4KB granularity) and Limit (high 4 bits)
db 0x00 ; Base (high 8 bits)
; 32-bit Data Segment (0x10)
dw 0xFFFF ; Limit
dw 0x0000 ; Base
db 0x00 ; Base
db 10010010b ; Access byte (Present, Ring 0, Code/Data, Read/Write)
db 11001111b ; Flags and Limit
db 0x00 ; Base
; 64-bit Code Segment (0x18)
dw 0x0000 ; Limit (ignored)
dw 0x0000 ; Base
db 0x00 ; Base
db 10011010b ; Access byte (Present, Ring 0, Code/Data, Executable, Read/Write)
db 00100000b ; Flags (64-bit code segment, Long Mode) and Limit
db 0x00 ; Base
; 64-bit Data Segment (0x20)
dw 0x0000 ; Limit (ignored)
dw 0x0000 ; Base
db 0x00 ; Base
db 10010010b ; Access byte (Present, Ring 0, Code/Data, Read/Write)
db 00000000b ; Flags and Limit
db 0x00 ; Base
gdt_end:
gdt_descriptor:
dw gdt_end - gdt_start - 1 ; Size of GDT minus 1
dd gdt_start ; Base address of GDT