我要写一个简单的操作系统。从 16 位实模式切换到 32 位保护模式时发生错误。
加载 GDT 寄存器并设置 GDT 后,保护模式已成功开启。我想跳转到内存中的0x0地址但是失败了,GDT的信息显示有数千个GDT描述器。
'''
lgdt (gdt_48 - _start + 0x7c00)
movw $0x1, %ax
lmsw %ax // switch protect mode on
jmp $0x8, $0x0 // jmp 0:0
gdt:
.word 0, 0, 0, 0
.word 0x07ff
.word 0x0000
.word 0x9a00
.word 0x00c0
.word 0x07ff
.word 0x0000
.word 0x9200
.word 0x00c0
gdt_48:
.word 0x7ff // 2048/8=256
.word gdt, 0
'''