初始化引导程序 使用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。