全称 Base Input & Output System,基本输入输出系统
以前Intel 8086只有20条地址线,只可以访问1MB的内存空间(0x00000~0xFFFFF),这1MB的内存空间被分成多个部分,如下:
地址范围 | 功能 |
---|---|
FFFF0~FFFFF,16B | BIOS入口地址,此处的内容是jmp f000: e05b |
F0000~FFFEF,64KB-16B | BIOS范围是F0000~FFFFF共64KB |
C800~EFFFF,160K | |
C0000~C7FFF,32KB | 显示适配器BIOS |
B8000~BFFFF,32KB | 文本模式显示适配器 |
B0000~B7FFF,32KB | 黑白显示适配器 |
A0000~AFFFF,64KB | 彩色显示适配器 |
9FC00~9FFFF | |
7E00~9FBFF | |
7C00~7DFF,512B | MBR被加载到此处,共512字节 |
500~7BFF | |
400~4FF | |
000~3FFF,1KB | Interrupt Vector Table(中断向量表) |
1、为什么是“基本”?
BIOS的主要工作是检测、初始化硬件,硬件提供了一些初始化的功能调用,BIOS直接调用,它还建立了中断向量表,这样就可以通过“int 中断号”来实现相关的硬件调用,由于BIOS只有64KB大小,不可能把所有硬件IO操作实现得面面俱到,而且在实模式下也没有必要实现那么多,所以叫做基本输入输出系统。
2、BIOS是如何被唤醒的?
由硬件ROM唤醒,此ROM被映射在1MB的顶部0xF0000~0xFFFFF,入口地址是0xFFFF0。
3、知道了BIOS在哪里后,CPU如何去执行它?
开机的瞬间,CPU的cs:ip寄存器被强制初始化成0xF000:0xFFF0,(因为在实模式下的段基址要乘以16,即左移4位,所以cs中是0xF000),所以当成地址变为0xFFFF0,此地址便是BIOS的入口地址,该地址处的内容是,jmp f000:e05b,所以推断出BIOS要做事的代码的地址是0xFE05B。
然后BIOS便不停地检测内存、显卡等外设信息,当检测通过,并初始化好硬件后,开始在内存中0x000~0x3FF处建立数据结构,中断向量表IVT并填写中断例程。
最后,BIOS把接力棒交给MBR