BIOS(Basic Input Output System,基本输入输出系统)
=================================================================
1.它是一组固化到计算机内主板上一个ROM芯片上的程序,保存着计算机最重要的基本输入输出的程序、系统设置、开机后自检程序和系统自启动程序。
2.主要功能是为计算机提供最底层的、最直接的硬件设置和控制。
=================================================================
1.开机,从ROM运行BIOS程序,BIOS是厂家写好的。
2.BIOS程序检查软盘0面0磁道1扇区,如果扇区以0xaa55结束,则认定为引导扇区,将其512字节的数据加载到内存的07c00处,然后设置PC,跳到内存07c00处开始执行代码。
3.以上的0xaa55以及07c00都是一种约定,BIOS程序就是这样做的,所以我们就需要把我们的os放在软盘的第一个扇区,填充,并在最末尾写入0xaa55.
4.nasm -f bin boot.asm:生成的其实是一个512字节的二进制文件如何把它放在软盘的第一个扇区?直接拷贝是不可以的(涉及到文件系统以及FAT12文件系统)。
5.dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc:if代表输入文件,of代表输出设备,bs代表一个扇区大小,count代表扇区数,conv代表不作其它处理,a.img是虚拟软盘。
6.为什么要org 07c00h这行代码?org是伪指令,不生成对应的二进制指令,只是汇编器使用的,在链接时使用,不是汇编那步用的。即boot.bin文件里面,压根没有07c00h这个东西,BIOS不是一味这条指令才把代码放在07c00h。这条指令的作用:告诉汇编器,当前这段代码会放在07c00h处。所以,如果之后遇到需要绝对寻址的指令,那么绝对地址就是07c00h加上相对地址。
--绝对地址:内存的实际地址(这里不考虑内存分页一类逻辑地址)
--相对地址:当前指令相对第一行代码的位置
==================================================================
系统引导过程主要由以下几个步骤组成(以硬盘启动为例)
1、 开机;
2、 BIOS加电自检(POST——Power On Self Test),内存地址为0fff:0000;
3、 将硬盘第一个扇区(0头0道1扇区,也就是Boot Sector)读入内存地址0000:7c00处;
4、 检查(WORD)0000:7dfe是否等于0xaa55.若不等于则转去尝试其他介质;如果没有其他启动介质,则显示 “No ROM BASIC” ,然后死机;
5、 跳转到0000:7c00处执行MBR中的程序;
6、 MBR先将自己复制到0000:0600处,然后继续执行;
7、 在主分区表中搜索标志为活动的分区。如果发现没有活动分区或者不止一个活动分区,则停止;
8、 将活动分区的第一个扇区读入内存地址0000:7c00处;
9、 检查(WORD)0000:7dfe是否等于0xaa55,若不等于则显示 “Missing Operating System”,然后停止,或尝试软盘启动;
10、 跳转到0000:7c00处继续执行特定系统的启动程序;
11、 启动系统。
(冒号:隔开两个十六进制数)