diff --git a/VKernel/Kernel/intr/gdt.vp b/VKernel/Kernel/intr/gdt.vp index 193ff99..2bfade0 100644 --- a/VKernel/Kernel/intr/gdt.vp +++ b/VKernel/Kernel/intr/gdt.vp @@ -128,15 +128,14 @@ def setGate(num: int, base: uint64, limit: uint32, access: uint8, gran: uint8): def setTSS64(num: int, base: uint64, limit: uint32): global gdt - gdt[num].limit_low = limit & 0xFFFF - gdt[num].base_low = base & 0xFFFF - gdt[num].base_middle = (base >> 16) & 0xFF - gdt[num].access = 0x89 - gdt[num].granularity = (limit >> 16) & 0x0F - gdt[num].base_high = (base >> 24) & 0xFF - gdt[num + 1].limit_low = (base >> 32) & 0xFFFF - gdt[num + 1].base_low = (base >> 48) & 0xFFFF - gdt[num + 1].base_middle = 0 - gdt[num + 1].access = 0 - gdt[num + 1].granularity = 0 - gdt[num + 1].base_high = 0 + # 64 位 TSS 描述符占 16 字节(GDT 两项),复用同一地址按 gdt_entry64 整体写入: + # 前 8 字节为常规描述符字段,后 8 字节为 base[63:32] + 保留 0 + e: gdt_entry64* = gdt_entry64*(&gdt[num]) + e.limit_low = limit & 0xFFFF + e.base_low = base & 0xFFFF + e.base_middle = (base >> 16) & 0xFF + e.access = 0x89 + e.granularity = (limit >> 16) & 0x0F + e.base_high = (base >> 24) & 0xFF + e.base_upper = uint32(base >> 32) + e.reserved = 0