BIOS
内存
无论什么汇编寻址都无外乎3中,立即数,寄存器和内存。最复杂的当属于内存。因为程序都是存储于内存中的,所以在将第一个运行的程序(BIOS)时先介绍内存。
容量
8086的内存有1MB的容量,但是这1MB分别映射到不同的器件上。
组成
内存由三部分组成:
- ROM
- 外围板卡
- 内存条
映射范围及用途
器件 | 范围 | 用途 |
---|---|---|
ROM | 0xf0000-0xfffff | BIOS固件 |
外围板卡 | 0xa0000-0xeffff | 外围器件的数据 |
内存条 | 0x00000-0x9ffff | 存储数据 |
计算机架构
- 硬件层
- BIOS
- 操作系统
- 软件层
BIOS功能
计算机上电后***第一个运行的程序***,执行完后把控制权交给***主引导程序***
- 检测硬件状态,检测通过后进行硬件初始化
- 在内存建立中断向量表(提供了硬件访问方法)
为什么BIOS是第一个运行的程序
处理器中有一个reset的引脚,每当这个引脚被触发时,处理器都会执行一次硬件的初始化,并且会将内部所有的寄存器初始化到一个阈置的状态(电路设计)。
8086在上电后,CS段寄存器会被初始化为0xffff,其他所有寄存器都会初始化为0。那么第一条指令的物理地址是0xffff0,这个位置会有一个跳转指令。跳转到BIOS程序的位置。
后续的x86没有延续这个方案,但是思路都是一致的。
BIOS控制权转移
- 安装设置扫描存储介质
- 发现主引导区后,将主引导程序加载到内存
- 主引导程序的入口地址是0x7c00
- 调用主引导程序
总结
BIOS是一种固件,直接固化在内存中,这段内存分配给ROM,所以掉电不会丢失。电路设计使的上电后程序首先执行BIOS程序,BIOS检查硬件,寻找主引导程序,并将主引导程序加载到内存中起始地址为0x7c00的位置。跳转到该位置开始执行主引导程序。
关于作者
大四学生一枚,分享数据结构,面试题,golang,C语言等知识。QQ交流群:521625004。微信公众号:后台技术栈。