Files
KatauOS/src/gdt.asm
T
2025-04-06 20:07:24 +03:00

62 lines
1.4 KiB
NASM

section .gdt
extern tss ; Объявляем tss как внешний символ из .data
extern tss_end
gdt_start:
; null entry
dd 0
dd 0
gdt_code:
dw 0xffff ; 00-15 limit
dw 0 ; 16-31 base
db 0 ; 32-39 base
db 10011010b ; 40-47 access
db 11001111b ; 48-55 limit (48-51) and flags (52-55)
db 0 ; 56-63 base
gdt_data:
dw 0xffff ; 00-15 limit
dw 0 ; 16-31 base
db 0 ; 32-39 base
db 10010010b ; 40-47 access
db 11001111b ; 48-55 limit (48-51) and flags (52-55)
db 0 ; 56-63 base
gdt_code_ring3:
dw 0xffff
dw 0
db 0
db 11111010b
db 11001111b
db 0
gdt_data_ring3:
dw 0xffff
dw 0
db 0
db 11110010b
db 11001111b
db 0
gdt_tss:
dw 103 ;tss_end - tss - 1 ; Limit (размер TSS - 1)
dw 0 ; Base (будет заполнено вручную в boot.asm)
db 0 ; Base (средние 8 бит)
db 10001001b ; Access: Present, Ring 0, Type 9 (Available TSS)
db 00000000b ; Limit (48-51) и Flags (52-55): Granularity=0, Size=0
db 0 ; Base (верхние 8 бит)
gdt_end:
gdt:
dw gdt_end - gdt_start - 1
dd gdt_start
CODE_SEG equ gdt_code - gdt_start
DATA_SEG equ gdt_data - gdt_start
CODE_SEG_RING3 equ gdt_code_ring3 - gdt_start
DATA_SEG_RING3 equ gdt_data_ring3 - gdt_start
TSS_SEG equ gdt_tss - gdt_start