计算机加电自检

当你按下计算机的开机键时,cpu的RESET针脚将会接收到一个高电平的复位信号,cpu开始工作…

众所周知,cpu的主要功能就是取指执行,但是此时内存空间内并没有操作系统的数据,这时就该BIOS出面了。BIOS存储介质为ROM,只读存储器,掉电并不会丢失数据,BIOS入口地址为0xFFFF0~0xFFFFF仅16字节,而复位信号恰好会将cs:ip重置为0xFFFF:0x0,待执行的命令为jmp f000:e05b,即跳转到BIOS检测各个硬件是否正常工作指令地址。

加载硬盘引导

BIOS检测硬件都通过之后,将会尝试读取硬盘的0道0扇区(bootloader),将该扇区共计512字节复制到内存0x7c00起始位置(为什么是0x7c00,这个地址最初是IBM的工程师定下的,恐怕也只有IBM知道原因),并检测最后两个字节是否为0x55AA,如果是,则认为是有效的主引导扇区。如果主引导扇区有效,则执行转移指令jmp 0x0000:0x7c00,执行主引导扇区的指令

为什么要有bootloader?BIOS直接将OS加载到内存不行吗?第一,这将会使BIOS变得庞大。第二BIOS固化在ROM中,一般不会修改,bootloader在硬盘中可以修改,如果需要安装不同操作系统甚至安装多操作系统的话,BIOS显然是不能胜任的

//TODO