该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
什么样的程序。。。。才能算是引导程序呢??
就是从开机加电的那刻,BIOS将检查磁盘的第一个扇区512字节(话说。。。这个512跟磁盘有关。每一扇区大小为512)
载入内存,放于内存的0x0000:0x07c00处
如果第一扇区的最后两个字节是55AA那么它就是一个引导程序
废话不说。。直接贴代码。
(话说有一部分是汇编写的)
org 07c00h ;指令明确告诉编译器我程序开始地址是0c7c00h
;原来的00000
;int 汇编指令 int 10h
int 10h
mov ax,cs
mov es,ax
mov bp,msgstr ;es:bp指向的内容就是我们要显示的字符串地址
mov cx,12 ;字符串长度
mov dh,12 ;x显示的行号
mov dl,36 ;显示的列好号
mov bh,1 ;显示的页数
mov al,1 ;显示的是串结构
mov bl,0ch ;显示的是字符的属性
mov ah,13h ;明确调用13h子程序
msgstr: db "hello my os!"
int 10h
times 510-($-$$) db 0 ;重复N次每次填充为0
dw 0x55aa
jmp $ ;不断跳转到当前位置是个死循环
然后用nasm编译成.bin的二进制文件
。。将写好的汇编程序写入其中。。。。并覆盖
其前512字节
将上面汇编程序命名为boot.bin
用winImage创建一个空白的软盘镜像,选择1.44M
软盘镜像文件名为virtual_floppy.vfd
下面是一个拷贝的c程序
(linux下的c程序哦)
#include
#include
#include
#include
int main(int argc,char *argv[])
{
int fd_source;
int fd_dest;
int read_count=0;
char buffer[512]={0};
fd_source=open("boot.bin",O_RDONLY);
if(fd_source<0)
{
perror("open bppt.bin error:");
return 0;
}
fd_dest=open("virtual_floppy.vfd",O_WRONLY);
wile((read_count=read(fd_source,buffer,512))>0)
{
write(fd_dest,buffer,read_count);
memset(buffer,0,512);
}
printf("write image ok!");
return 0;
}
然后。。的步骤。。。大家都会。。就不麻烦打字了
(话说。。。打字。。真心累)