> 文章列表 > 初始化引导程序 使用BIOS中断显示字符、读取磁盘

初始化引导程序 使用BIOS中断显示字符、读取磁盘

初始化引导程序  使用BIOS中断显示字符、读取磁盘

基本概念

 BIOS会将磁盘的第0个扇区(大小为512字节),加载到0x7c00处。

引导程序负责操作系统的加载,主要用于为操作系统运行提供初始化环境,并运行加载操作系统。

 

BIOS只加载磁盘的第0个扇区(512字节)到内存中,次程序无法做很多事情。

 

因此,我们可以采取以下两种方式种的任意一种。

 X86在上电后,自动进入实模式,目的是为了兼容早期的应用程序。

 X86与编程相关的主要内核寄存器

 AX BX CX DX 是32位寄存器,在实模式的情况下,只能使用低16位寄存器。高16位寄存器是要留给切换到保护模式的。

CS DS SS ES FS GS 为段寄存器,为访问特定内存地址,需要采用段寄存器:偏移的形式。

 

8086 CPU 在实模式工作的情况下,内存映射。只能够访问1M的内存空间,如下图所示:

 工程实战

进入start 示例工程

 

在source/boot/start.S 添加如下代码。

 

先build,然后F5启动调试,可以看到各个段寄存器都为 0X0。

 

按下F11进行单步进行调试。

可以看到进行单步调试前,esp寄存器为:0x6f00

 

单步调试到27行,esp寄存器就变为:0x7c00

 

使用BIOS中断显示字符

BIOS提供了一组服务,可以方便地帮助我们操作硬件,避免与硬件细节打交道。

 

当触发软中断的时,会自动从中断向量表中取相应的地址执行,参数通过寄存器传递。

 

 

使用BIOS中断读取字符

将引导程序分成2部分:

1.Boot只是做一些简单的工作,它的程序容量比较小,不超过512字节。

2.把更多的工作放在loader里面做。

 

BIOS提供了磁盘读取的接口,方便我们从磁盘上读取loader。