【发布时间】:2015-06-02 22:20:28
【问题描述】:
我最近开始从事 os 编程,并且我用 nasm 编写了一个调用内核的引导加载程序……当我模拟它时,引导加载程序运行良好,但内核不加载,我的代码:
bootloader.asm
%define os 0x1000
%define drive 0x80
%define os_sect 3
%define ftable 0x2000
%define ftabsect 2
[BITS 16]
[org 0x7c00]
start:
;boot message
mov si, bootMsg
call printstring
;waitin for user press key
mov ah, 0
int 16h
;load sector os
mov ax, os
mov es, ax
mov cl, os_sect
mov al, 2
call sectorloader
jmp 0x1000:0
;print charactere function
printchar:
mov ah, 0x0E
mov bh, 0x00
mov bl, 0x03
int 0x10
ret
;print string function ~ using printchar function
printstring:
nextchar:
mov al, [si]
inc si
or al, al
jz exit
call printchar
jmp nextchar
exit:
ret
sectorloader:
mov bx, 0
mov dl, drive
mov dh, 0
mov ch, 0
mov ah, 2
int 0x13
jc loaderror
ret
loaderror:
mov si,loadsectorError
call printstring
mov ah,0
int 16h
int 19h
;data
bootMsg db 'Booting [OK]',10,13,'Press any key !',10,13,10,13,0
loadsectorError db 'Error while loading sector[!]',10,13,0
TIMES 510 - ($-$$) db 0
DW 0xAA55
kernel.asm
[bits 16]
[org 0]
mov al, 65
mov ah, 0x0E
mov bh, 0x00
mov bl, 0x03
int 0x10
我像这样构建程序:
nasm -f bin -o try.bin bootloader.asm -p kernel.bin
我模仿它是这样的: qemu-system-i386 try.bin
所以如果有人可以帮助我...谢谢
【问题讨论】:
-
相关:Michael Petch's general tips for bootloader development,以及在 QEMU 上运行的 bootloader + kernel 的工作示例。
标签: kernel nasm bootloader