前言:第三天的难度还是蛮大的,看了一上午理解了大概,还是好好记录,捋顺一下。
1.实现Ipl的程序装载
首先实现用ipl指示将程序(软盘内容,操作系统)装载到内存特定位置
在03_day的harrib00a中的ipl.nas添加内容的部分
可以看到用到了 BIOS INT 0x13中断,0x13号中断主要用来磁盘的读写,AH=0x02说明用来读盘。
具体软盘的结构可以查询学习。
AH=处理对象的扇区数
CH=柱面号
CL=扇区号
DH=磁头号
DL=驱动器号
ES:BX 这个很重要,读取到的程序的装载地址,在这里是0x8200,所以软盘中的数据会被装载到0x8200
从这里可以初步理解启动区的作用,启动区指示了读取软盘哪一部分的数据,并将数据装载到内存的什么位置。到此完成了真正IPL的制作。
在这里增加了一个试错功能,主要目的考虑到读取软盘数据时,可能会发生不能读取数据的情况,这个时候我们再试几次。得到harib00b中的ipl
其实主要是增加了一个判断,每尝试一次si会增加1,当si大于5也就是我们尝试了5次都失败以后才会跳到输出error信息。
2 完善IPL,读取软盘多个扇区和多个柱面。
在1中还是值读取了第2扇区,第1扇区是IPL。
第二步我们希望读取更多的软盘内容。
2.1读取18个扇区
从harib00c中的ipl我们可以看到