我正在为我的自定义内核编写引导加载程序,它(引导加载程序)基于 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。
那么,有人可以帮我解决这个问题吗?