Przy takim kodzie:
mov ax, gdt_tss_selector ; Jakiś selektor do TSS Deskryptora
ltr ax
jmp 28h:0 ; Skacz przez Task Gate
gdt_tss_selector equ 20h
; To tylko wycinek z mojej GDT
gdt_tss_system:
dw kerntss_size
dw kerntss
db 0
db 10001001b
db 00000000b
db 0
gdt_taskswitch:
dw 0
dw gdt_tss_selector
db 0
db 10000101b
dw 0
kernel_task:
jmp kernel_task
kerntss:
dw 0 ; BACKLINK
dw 0 ; RESERVED
dd 2c00h ; PL0 Stack
dw 10h ; PL0 SS
dw 0h ; RESERVED
dd 2c00h ; PL1 Stack
dw 10h ; PL1 SS
dw 0h ; RESERVED
dd 2c00h ; PL2 Stack
dw 10h ; PL2 SS
dw 0h ; RESERVED
dd 0 ; CR3
dd kernel_task ; EIP
dd 512 ; EFLAGS
dd 0 ; EAX
dd 0 ; ECX
dd 0 ; EDX
dd 0 ; EBX
dd 9FFFFh ; ESP
dd 0 ; EBP
dd 0 ; ESI
dd 0 ; EDI
dw 10h ; ES
dw 0 ; RESERVED
dw 08h ; CS
dw 0 ; RESERVED
dw 10h ; SS
dw 0 ; RESERVED
dw 10h ; DS
dw 0 ; RESERVED
dw 10h ; FS
dw 0 ; RESERVED
dw 10h ; GS
dw 0 ; RESERVED
dw 00000000b ; LDT
dw 0 ; RESERVED
dd 0FFFFh ; Pointer to IO Bitmap
kerntssend:
kerntss_size equ kerntssend - kerntss - 1
Przy JMPie do Task Gate wyskakuje mi TSS Descriptor points to invalid TSS. Co mam źle?