私は2ステージのブートローダーを書いています。最初のステージは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
あなたの提案を手伝ってください。