[跟我做:-P]
上面说的很简单吧?那好,现在我们来写一个吧!
第一步:写代码
; 文件名:boot.asm
; 代码如下,注意,汇编中通常用“;”来表示注释内容
; 此段代码参考《自己动手写操作系统》(于渊)
;
; 初始化函数
org 07c00h ; 告诉编译器将此段程序加载
; 到内存0x0000:07C00处
mov ax, cs
mov ds, ax
mov es, ax
call PrintStr ; 调用屏幕打印函数
jmp $ ; 无限循环
PrintStr: ; 屏幕打印函数
mov ax, HelloWorld ; 将字符串拷贝到ax
mov bp, ax ; es:bp = 串地址
mov cx, 24 ; cx = 串长度
mov ax, 01301h ; ah = 13, al = 01h
mov bx, 000ch ; 页号为0(bh = 0) 黑底红字(bl = 0ch,高亮)
mov dl, 0
int 10h ; 10h号中断
ret
HelloWorld: db "Welcome to Lee's OS *_*" ; 字符串负值
times 510-($-$$) db 0 ; 用0x0填充剩余的空间使生成
; 的二进制代码刚好为512字节
dw 0xaa55 ; 结束标志
; 整个程序结束!很短吧
第二步:汇编
假设你已经安装了NASM程序,那么进入命令行模式,然后输入以下命令:
C:[PATH]\ nasm boot.asm -o boot.bin
其中“C:[PATH]\”为boot.asm代码文件所在位置。
现在如果不出意外的话,你已经拥有了boot.bin二进制文件,这个就是引导程序!
第三步:制作引导盘
由于不能随便更改硬盘,否则系统无法进入原来的操作系统,所以我们用软盘来试验。
那么,我们准备一张软盘。
现在,我们要自己写一个程序将我们汇编得到的二进制文件写到软盘的第一个扇区。
C语言程序代码如下:
/***************START***************/
#include
#include
int main(void)
{
FILE *in;
unsigned char buffer[520];
if((in = fopen("boot.bin", "rb"))==NULL)
{
printf("Error loading file\n");
exit(0);
}
fread(&buffer, 512, 1, in);
while(biosdisk(3, 0, 0, 0, 1, 1, buffer));
fclose(in);
return 0;
}
/****************END****************/
注意,这个程序必须同boot.bin文件在同一目录下,然后将软盘放进软驱,运行此程序。

【