カスタム カーネル用のブートローダーを作成しています。これ (ブートローダー) は Linux カーネル v0.1 に基づいていますboot.s
。コードは次のとおりです。
.set BOOTSEG, 0x7c0
.set LOADSEG, 0x9000
.set SYSSEG, 0x1000
start:
//copy the WHOLE bootloader to new location
movw BOOTSEG, %ax
movw %ax, %ds
xor %si, %si
movw LOADSEG, %ax
movw %ax, %es
xor %di, %di
movw 256, %cx
rep movsw
//jump to new location
cli
movw LOADSEG, %ax
movw %ax, %es
ljmp $LOADSEG, $loaded
loaded:
// ...
movw $0x3, %ax
int $0x10
// ...
新しい場所にジャンプしようとすると、Bochs は次のように書き込みます:が、私のコードWARNING: HLT instrucion with IF=0
にはまったくhlt
指示がありません。ジャンプ後、Bochs は実行を続けますが、正しく動作しません。たとえばint $0x10
、画面がクリアされません。
ブートローダを間違ってコピーしたのかもしれませんが、Linux に似ています。
それで、誰でもこの問題を手伝ってもらえますか?