这是用 AT&T 语法编写的。我在这里问我的 gdt 是否有任何问题,因为我的中断不起作用。请指出我可能遇到的任何错误
我使用 GRUB 作为我的引导加载程序并为 i386 架构进行编译。我已经有我的交叉工具链设置 & 我似乎无法在这里找到任何错误
# TODO: Rewrite in intel syntax
# multiboot header constants
.set ALIGN, 1<<0
.set MEMINFO, 1<<1
.set FLAGS, ALIGN | MEMINFO # flags
.set MAGIC, 0x1BADB002 # magic number
.set CHECKSUM, -(MAGIC + FLAGS) # checksum
# multiboot header
.section .multiboot
.align 4
.long MAGIC
.long FLAGS
.long CHECKSUM
.section .gdt
# Setup that GDT
gdt:
gdt_null:
.word 0
.word 0
.word 0
.word 0
gdt_code:
.word 65535
.word 0
.byte 0
.byte 154
.byte 207
.byte 0
gdt_data:
.word 65535
.word 0
.byte 0
.byte 154
.byte 207
.byte 0
gdt_end:
gdt_desc:
.word gdt_end - gdt - 1
.word gdt
# reserve stack
.section .bss
.align 16
stack_bottom:
.skip 16384 # 16 KiB
stack_top:
# entry point for the kernel
.section .text
.global _start
.type _start, @function
_start:
movl $stack_top, %esp
# to the kernel we go!
push %eax
push %ebx
cli # disable interrupts
lgdt (gdt_desc) # load GDT
sti # enable interrupts
call _main
cli
hlt
.size _start, . - _start