[英]It is possible to call kernel with this ASM bootloader? How?
我做了一個小引導程序。 現在,我想加載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
這是一個非常簡單的引導程序,這是我第一次制作引導程序(帶有教程)。 我在Windows中使用NASM來編譯asm代碼。
現在我想加載c ++內核。 我可以使用我的小asm引導加載程序嗎?
不使用您編寫的代碼,因為在引導加載程序中,實際上是將內核文件帶入內存是您的責任。 僅聲明一個外部標簽[extern _start_kernel]
不會有任何好處。
搜索論壇,您將找到管理此問題的示例。
到目前為止您所做的努力的說明。
因為你寫[ORG 0x7C00]
你希望你的地址是相對於線性地址0。這里也實在是你的責任,以確保該段寄存器相應設置。 您需要添加到代碼中:
xor ax, ax
mov ds, ax
MOV SI, LoadString
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.