From 52728bc8daba849aacb8b033c0bd5e18172dfae3 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Tue, 13 Oct 2026 15:45:59 +0800 Subject: [PATCH] =?UTF-8?q?refactor(gdt):=20setTSS64=20=E6=94=B9=E7=94=A8?= =?UTF-8?q?=20gdt=5Fentry64=20=E6=95=B4=E4=BD=93=E5=86=99=E5=85=A5=20TSS?= =?UTF-8?q?=20=E6=8F=8F=E8=BF=B0=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 以 gdt_entry64*(&gdt[num]) 复用同一地址写入 16 字节,替代原先手写拆分 gdt[num]/gdt[num+1] 的方式;语义与字节布局均不变。 --- VKernel/Kernel/intr/gdt.vp | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) 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