x86的机器在通电后内存是干净的,这时候就必须有一个初始程序提供加载等一些工作,这个就是bios了,bios一般写在芯片里,具有断电也能持久存储的性质。bios提供了硬件的驱动,以中断形式提供服务。以软盘启动为例,bios会把软盘第一个扇区内容读到内存的0x7c00处(这是规定,0地址开始的地方存着中断表等bios需要的东西),然后cpu就开始从0x7c00开始执行了。所以写一个引导程序就必须把我们的代码写到软盘的第一扇区中,因为一个扇区只有512K,而且最后两个字节必须是0xaa55结尾。那么我们的代码就必须在这规定的大小内完成。
今天完成的只是完成一个1.44M软盘的制作,并写一个在屏幕上输出helloworld的程序写到软盘的第扇区。
软盘制作命令:
1. 创建一张1.44M空白软盘镜像
dd bs=1024 if=/dev/zero of=yourname.img count=1024
2. 把boot.bin内容写到第一扇区
dd if=boot.bin of=yourname.img bs=512 count=1 conv=notrunc
运行环境:bochs
代码:https://github.com/Corgidog/kernel/tree/master/asm/day1
运行步骤
make
bochs -f bochsrc.bxrc
网友评论