编写操作系统的引导程序(Boot Sector)(原创)
Boot Sector
第一次写最底层的程序------操作系统的引导启动部份,有点紧张,有点兴奋。
用记事本新建一个文本文件,coding了一通。再另存为boot.asm文件.
再用CMD进入NASM的目录。用NASM编译了下,提示不成功。
d:\nasm> nasm boot.asm -o boot.bin
再核对了下代码,很多地方弄错了,主要是在“0”和“O”方面。
再另存,再编译,还是不行。晕,提示错误是在11行。
再比对了下,没错呀。
汗ING。
倒!
那我原来是错在哪呢,再冷静地一行一行看过去。重点在11行。 Yeah~~~
原来,01301h写成了0130lh,本是数字“1”写成了字母“l".
那就用FloppyWriter.exe写进软盘里玩下吧。重启电脑,出现了红色的字母“Hello,OS world"了
源程序如下:
org 07c00h ; 告诉编译器程序加载到7c00处
mov ax, cs
mov ds, ax
mov es, ax
call DispStr ; 调用显示字符串例程
jmp $ ; 无限循环
DispStr:
mov ax, BootMessage
mov bp, ax ; ES:BP = 串地址
mov cx, 16 ; CX = 串长度
mov ax, 01301h ; AH = 13, AL = 01h,错的就在这里呀,当然现在这里是正确的。呵呵~~
mov bx, 000ch ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)
mov dl, 0
int 10h ; 10h 号中断
ret
BootMessage: db "Hello, OS world!"
times 510-($-$$) db 0 ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw 0xaa55 ; 结束标志