首页 > 其他分享 >自制操作系统 Step 2 —— Bootloader(一)

自制操作系统 Step 2 —— Bootloader(一)

时间:2022-11-27 17:13:46浏览次数:40  
标签:操作系统 Boot boot mov 扇区 Step 镜像 ax Bootloader

部分内容来源于《一个60位操作系统的设计与实现》
此博客仅记录学习过程。




一、BIOS 引导原理

BIOS自检结束后会根据启动选项设置选择启动设备,即检测软盘的第0磁头-第0磁道-第1扇区,是否以数值0x550xAA两字节作为结尾,如果是,BIOS认为这是引导扇区,并复制扇区数据至内存地址0x7C00处,随后执行这段程序。


鉴于引导扇区仅有512B, Boot 引导程序的作用仅仅是将引导加载程序 Loader 装载到内存中(硬件向软件移交控制权)




二、写一个 Boot 引导程序


打开编辑器:

$ vim boot.asm

写入以下内容:

	org	0x7c00	

BaseOfStack	equ	0x7c00

Label_Start:

	mov	ax,	cs
	mov	ds,	ax
	mov	es,	ax
	mov	ss,	ax
	mov	sp,	BaseOfStack

;=======	clear screen

	mov	ax,	0600h
	mov	bx,	0700h
	mov	cx,	0
	mov	dx,	0184fh
	int	10h

;=======	set focus

	mov	ax,	0200h
	mov	bx,	0000h
	mov	dx,	0000h
	int	10h

;=======	display on screen : Start Booting......

	mov	ax,	1301h
	mov	bx,	000fh
	mov	dx,	0000h
	mov	cx,	10
	push	ax
	mov	ax,	ds
	mov	es,	ax
	pop	ax
	mov	bp,	StartBootMessage
	int	10h

;=======	reset floppy

	xor	ah,	ah
	xor	dl,	dl
	int	13h

	jmp	$

StartBootMessage:	db	"Start Boot"

;=======	fill zero until whole sector

	times	510 - ($ - $$)	db	0
	dw	0xaa55



三、创建虚拟软盘镜像文件


使用 bximage 工具创建虚拟镜像:


  1. 输入 1,创建镜像
  2. 输入 fd ,创建软盘镜像
  3. 选择默认 1.44M
  4. 输入 boot.img,命名镜像

img




四、编译 .asm 文件


$ nasm boot.asm -o boot.bin



五、写入数据至镜像


$ dd if=boot.bin of=boot.img bs=512 count=1 conv=notrunc



六、在 Win10 中运行虚拟机


双击 Disk & Boot 设置启动项

img


选择镜像并如图设置:

img


镜像可在快速访问中的 linux 中找到

img




六、开机测试


运行结果如图:

img

标签:操作系统,Boot,boot,mov,扇区,Step,镜像,ax,Bootloader
From: https://www.cnblogs.com/xuanplus/p/16930086.html

相关文章