62 lines
1.4 KiB
NASM
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
|