【30天自制操作系统】第三天

1.制作真正的ipl(Initial Program Loader启动程序装载器)

从上一篇文中,讲述了电脑开机的过程,当BIOS执行了一些硬件检测工作后,最后一步将启动区内容加载到内存 0x7c00,并跳转到这里,启动区的内容就是ipl,大小为512字节,启动区代码主要是加载操作系统内核,也就是用来加载真正的操作系统。

在这里插入图片描述

在这里插入图片描述
这段ipl是为了从磁盘(软盘)读取0号柱面(磁道)、0号磁头(一个磁道的正反两面)、2号扇区(软盘一个磁道有18个扇区)

在这里插入图片描述
软盘的存储量为80(磁道)x2(正反两面)x18(扇区)x512(扇区大小)=1474560个字节=1440k
2.试错
为了防止读取软盘出现错误,加入错误检验代码

MOV		AX,0x0820
		MOV		ES,AX
		MOV		CH,0			; 0号柱面
		MOV		DH,0			; 0号磁头(正面)
		MOV		CL,2			; 2号扇区

		MOV		SI,0			; 记录失败次数的寄存器
retry:
		MOV		AH,0x02			; AH=0x02 : 读磁盘
		MOV		AL,1			; 读一个扇区(512字节)
		MOV		BX,0			;加载的偏移地址为0
		MOV		DL,0x00			; 0号驱动器(A号软盘)
		INT		0x13			; 调用BIOS中断
		JNC		fin				; 没错跳转到fin
		ADD		SI,1			; SI加一
		CMP		SI,5			; SI与5比较
		JAE		error			; SI >= 5跳到error
		MOV		AH,0x00
		MOV		DL,0x00			; A驱动器
		INT		0x13			; 重置驱动器
		JMP		retry

3.4.读到18扇区+读到10柱面

entry:
		MOV		AX,0			; 寄存器初始化
		MOV		SS,AX
		MOV		SP,0x7c00
		MOV		DS,AX

; 加载磁盘程序

		MOV		AX,0x0820
		MOV		ES
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值