我做了一个小的引导程序。现在我想加载C ++内核。我可以使用我的小引导加载程序吗?
[BITS 16]
[ORG 0x7C00]
[extern _start_kernel]
MOV SI, LoadString
CALL String
CALL _start_kernel
JMP $
Print:
MOV AH, 0x0E
MOV BH, 0x00
MOV BL, 0x07
INT 0x10
RET
String:
characters:
MOV AL, [SI]
INC SI
OR AL, AL
JZ stopPrint
CALL Print
JMP characters
stopPrint
RET
LoadString db 'Loading...', 0
TIMES 510 - ($ - $$) db 0
DW 0xAA55
这是一个非常简单的bootloader,这是我第一次制作bootloader(带教程)。我在windows中使用NASM来编译asm代码。
答案 0 :(得分:3)
使用您编写的代码现在我要加载c ++内核。我可以使用我的小asm bootloader吗?
不,因为在引导加载程序中 负责实际将内核文件带入内存。只是声明外部标签[extern _start_kernel]
不会有任何好处
搜索论坛,您将找到管理此问题的示例。
到目前为止你的努力记录
因为您编写了[ORG 0x7C00]
,所以您希望地址与线性地址0相关。这也是您的责任,以确保相应地设置段寄存器。您需要添加到您的代码中:
xor ax, ax
mov ds, ax
MOV SI, LoadString
答案 1 :(得分:1)