30天自制操作系统day03-进入32位模式并导入C语言

30天自制操作系统

进入32位模式并导入C语言

制作真正的IPL

该部分主要是对第二天结尾内容的深入。上一次简单介绍了如何制作启动区,但只是制作了一个空的框架,其中并未装载任何程序,在这一部分中,会给这个“空壳”真正装载进程序。因为最初的512字节是启动区,所以要从下一个512字节的内容开始装载程序。提供的harib00a中的文件打开,可以发现添加的内容仅有如下一段代码:
在这里插入图片描述
1、指令与标志:
 JC:跳转指令的一种,“jump if carry”,即如果进位标志(carry flag)为1,就跳转。
 “INT 0x13”:调用BIOS的0x13号函数,经过查找可得到如下内容:
磁盘读、写,扇区校验,以及寻道
AH=0x02;(读盘)
AH=0x03;(写盘)
AH=0x04;(校验)
AH=0x0c;(寻道)
AL=处理对象的扇区数;(只能同时处理连续的扇区)
CH=柱面号&0xff;
CL=扇区号(0-5位)|(柱面号&0x300)>>2;
DH=磁头号;
DL=驱动器号;
ES:BX=缓冲地址;(校验及寻道时不使用)
返回值:
FLACS.CF=0:没有错误,AH==0
FLAGS.CF=1:有错误,错误号码存入AH内(与重置reset功能一样)
由代码可知,此处使用的是AH=0x02,所以这里是“读盘”操作。
 FLAGS.CF:进位标志,如果调用函数后无错误,则进位标志为0;若有错,则进位标志为1;
进位标志:一个只能存储1位信息的寄存器,本来表示有无进位,这里用来报告BIOS函数调用是否有错误;
标志:一位寄存器;
2、软盘结构
软盘结构示意图如下:
在这里插入图片描述
 柱面:由外向内(0-79)的一圈一圈圆环状的区域。这并非软盘的生产方式,而是我们将它作为数据存储媒体,这样组织它的数据存储方式。
 磁头:针状的磁性设备。区别与光盘,软盘磁盘是两面都能记录数据的。因此有正反两面两个磁头,其中正面是磁头0号,反面是磁头1号。
 扇区:由于柱面作为单位进行读写过大,所以我们将“圆环”等分成18份(软盘),每一份称为一个扇区(1-18)。
综上,1个软盘有80个柱面,2个磁头,18个扇区,一个扇区512字节,因此软盘容量:
80218512=1440KB
含IPL的启动区位于C0-H0-S1,因此我们想要装载的扇区是C0-H0-S2。
3、缓冲区地址
即为从软盘上读出的数据装载到内存中的内存地址。在EBX出现之前,使用的是辅助作用的段寄存器。
段寄存器地址表示方式:<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值