0

这是用 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

4

0 回答 0