操作系统开发系列—9.Loader

一个操作系统从开机到开始运行,大致经历“引导—>加载内核入内存—>跳入保护模式—>开始执行内核”这样一个过程。也就是说,在内核开始执行之前不但要加载内核,而且还有准备保护模式等一系列工作,如果全都交给引导扇区来做,512字节很可能是不够用的,所以不妨把这个过程交给另外的模块来完成,我们把这个模块叫做Loader。引导扇区负责把Loader加载入内存并且把控制权交给它,其他工作放心地交给Loader来做,因为它没有512字节的限制,将会灵活得多。

为了操作方便,把软盘做成FAT12格式。这样对Loader以及今后的Kernel(内核)的操作将会非常简单易行。

引导扇区是整个软盘的第0个扇区,FAT12格式如下:

loader源码:

org	0100h

	mov	ax, 0B800h
	mov	gs, ax
	mov	ah, 0Fh				; 0000: 黑底    1111: 白字
	mov	al, 'L'
	mov	[gs:((80 * 0 + 39) * 2)], ax	; 屏幕第 0 行, 第 39 列

	jmp	$				; 到此停住

然后执行命令

nasm boot.asm -o boot.bin

nasm loader.asm -o loader.bin

先用bximage生成一个软盘映像,然后在linx下这样做,因为我的linux里只有/mnt/hgfs/

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

sudo mount -o loop a.img /mnt/hgfs/

sudo cp loader.bin /mnt/hgfs/ -v

sudo umount /mnt/hgfs/

运行结果如下:

看到了字符“L”。

如果把前面学习的时钟中断程序按照上面的方法来运行也可以,如下

可以在虚拟机上运行,说明已经突破了512字节限制。

那么现在我们假设已经有了一个内核,Loader肯定要加载它入内存,而且内核开始执行的时候肯定已经在保护模式下了,所以,Loader要做的事情至少有两件:

1.加载内核入内存

2.跳入保护模式

 

一个码农的日常 

源码

转载于:https://www.cnblogs.com/joey-hua/p/5392376.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值