我一直在编写一个 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
请帮我提出你的建议。