From e49b569f651d50e6c3e4dd0977639cefbc4fc8ea Mon Sep 17 00:00:00 2001 From: pointer-to-bios Date: Sun, 3 Dec 2023 18:27:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E5=88=87=E6=8D=A2=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- qemu/metaverse.img | Bin 86441984 -> 86441984 bytes src/kernel/arch/x86_64/entry32.s | 13 ++++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/qemu/metaverse.img b/qemu/metaverse.img index 11f1d8d9a3caf7a9e0d2c7d9c17e2acb7e3a8445..8966027056d00fcb13d55b0a9cd00593da49cf69 100644 GIT binary patch delta 10162 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 Ka{G(ee)eCHlkivo delta 10626 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 diff --git a/src/kernel/arch/x86_64/entry32.s b/src/kernel/arch/x86_64/entry32.s index d18cf9f..8add63b 100644 --- a/src/kernel/arch/x86_64/entry32.s +++ b/src/kernel/arch/x86_64/entry32.s @@ -1,6 +1,9 @@ section .entry extern init64 ; 寄存器ebx是multiboot2 information,不可以使用 + ; + ; 由于这个代码是32位环境的代码,而链接器链接时会把它当作64位代码链接 + ; 所以这里所有的使用了常数的位置都要通过指令写入 init32: cli @@ -34,15 +37,18 @@ init32: add edi, 4 loop init32_loop0 + ; 设置gdt_ptr + mov eax, 0x10402a + mov dword [eax], 0x104000 ; 加载GDTR和段寄存器 + db 0x66 + lgdt [0x104028] mov ax, 0x10 mov ds, ax - ; mov ss, ax + mov ss, ax mov es, ax mov fs, ax mov gs, ax - db 0x66 - lgdt [0x104028] ; 打开PAE mov eax, cr4 @@ -61,6 +67,7 @@ init32: ; 打开分页机制 mov eax, cr0 + bts eax, 0 bts eax, 31 mov cr0, eax