1

我一直在编写一个 2 阶段引导加载程序,第一阶段只是加载第二阶段并设置 gdt 并打开保护模式和所有 . 我浏览了几本手册和以前的问题,但我仍然面临这个问题。使用 BIOS int 0x13 调用加载扇区会全部为零,我无法找出原因。这是我阅读该部门的代码。我什至试图读取第一个扇区,但这也给了内存中的所有零。

    read:
    xorw    %ax,%ax
    movw    %ax,%es
    movw    $0x1000,%bx
    movb    $0x2, %ah   #command to read the sector
    movb    $0x80, %dl  #read from the hard disk
    movb    $0x1, %al  # read one sector
    movb    $0x1, %ch  #track no
    movb    $0x1, %cl  # read the first sector
    movb    $0x1 , %dh  # head number
    int     $0x13    
    jc      read
    movw    $0x11fe, %di
    movw    (%di),%ax
    cmpw     $0xaa55,%ax  # testing the signature
    jne     error
    ljmp    $0x0,$0x1000

因此,如您所见,我正在尝试再次读取第一个扇区(只是为了测试),但内存包含所有零我正在使用我使用以下内容创建的虚拟磁盘映像:

    dd if=/dev/zero of=obj/kern/kernel.img~ bs=512 count=20000 2>/dev/null
dd if=obj/boot/boot of=obj/kern/kernel.img~ conv=notrunc 2>/dev/null
dd if=obj/boot1/boot of=obj/kern/kernel.img~ seek=1 conv=notrunc 2>/dev/null
dd if=obj/kern/kernel of=obj/kern/kernel.img~ seek=3 conv=notrunc 2>/dev/null
mv obj/kern/kernel.img~ obj/kern/kernel.img

请帮我提出你的建议。

4

1 回答 1

0

The simple answer is that the first sector is sector 1, track 0, head 0.

The happy answer is that although writing a bootloader is the easy part, getting it to work is most satisfying.

于 2012-07-22T15:54:49.310 回答