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