本文最后更新于:2024-11-18T14:20:10+08:00
OS专题-开始引导磁盘
因为MBR的大小只有512字节,其内存空间不足以存储一个完整的OS,所以我们需要让MBR去加载磁盘数据并运行操作系统。
还好我们不用去处理磁盘的磁头和盘片的控制,BIOS已经将对应的ISR中断指令写入了内存,我们只需要调用即可。为此,我们将AL
设置为0x02
(以及具有所需柱面、磁头和扇区的其他寄存器)并触发中断int 0x13
。
这里我们是第一次使用溢出位,这是每个寄存器上存在的一个额外位,用于存储操作溢出其当前容量的标识。溢出位不直接访问,只能被控制指令进行跳转处理,例如: jc
指令(如果设置了溢出位则跳转)
BIOS会以AL中的数据为参数读取指定数量的扇区数据。
原理地址:
https://stanislavs.org/helppc/int_13-2.html
https://stanislavs.org/helppc/int_13-a.html
因这两个地址不太好访问,所以我把它搬运过来了,如下:
INT 13,2 - Read Disk Sectors
INT 13,A - Read Long Sector (XT & newer)
接下来还是做个样例来看看吧,在lib
文件夹中新建disk.asm
文件,代码如下:
修改boot/mbr.asm
文件,代码如下:
这样我们就完成了磁盘的引导、加载并打印了数据。