编写OS第一步_编写引导程序boot

文章目录

      • 1.boot的启动过程
      • 2.编写boot.asm
      • 3.创建软盘
      • 4.将boot程序写入软盘
      • 5.运行引导程序
      • 6.执行结果

1.boot的启动过程

在编写boot之前,我们需要知道boot是在操作系统中起什么作用。

1. 在BIOS上电以后,会进行自我检查,然后查找boot程序,boot一般在磁盘的0号盘面0号磁道的1号扇区。
2. 在找到磁盘后,会直接查找起始地址为0x7c00的扇区,检查这个扇区是否是0xAA55结尾,如果是,则说明这个扇区是正确的引导扇区,将这个扇区的512B的内容加载到内存中。
注:0x7c00的算法
分配给操作系统引导区的大小为32kb,即从0x0000到0x7FFF,boot程序放在引导区的最后面,占512个字节。除此之外,还在boot程序后面预留了512个字节的位置。所以
0x7c00=0x7cFF - 512 - 512 + 1;
3. CPU开始执行内存中的boot模块。

2.编写boot.asm

文件放置在./src/boot/下面

org 0x7c00jmp START;set correct CSnopStackBase equ 0x7c00		;Macro definition,equals StackBase=0x7c00BootMessage:	db "Booting......"START:mov ax, csmov ds, axmov ss, axmov sp, StackBase;print string "Booting"mov al, 1mov bh, 0mov bl, 0x07		;black background white wordsmov cx, 13mov dh, 0;es=dspush ds	pop esmov bp, BootMessage	;offset addressmov ah, 0x13		;13h interruptint 0x10jmp $			;died loop;times n,m   n:repeat conut  m:data
times 510-($-$$) db 0		;ensure 512B size $:now address $$:begin addressdw 0xaa55			;boot sector flag

3.创建软盘

使用ssh -X root@ip 连接虚拟机,在虚拟机下转移到项目的根目录
运行如下指令

dd if=/dev/zero of=软盘名称.img bs=512 count=2880

查看软盘是否创建成功

file 软盘名称.img

如果出现boot sector,则说明引导盘设置成功。

4.将boot程序写入软盘

在项目根目录编译boot程序

nasm ./boot/boot.asm -o ./boot.bin

将boot.bin写入软盘

dd if=./boot.bin of=./软盘名称.img bs=512 count=1 conv=notrunc

5.运行引导程序

根据当前目录下的bochsrc,运行bochs

bochs -q

在bochs的最下方命令行处依次输入

b 0x7c00#在0x7c00处设置断点
c#执行
b 0x7c2d#在0x7c2d处设置断点
c#执行

6.执行结果

在这里插入图片描述可以看到显示器出现了booting。。。。。,说明引导程序编写成功。
请添加图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部