回顾一下电脑启动的过程
首先回顾一下电脑启动的过程:
1.通电
2.读取ROM里面里面的BIOS(在1M内存的顶部),用来检测硬件
3.BIOS根据指定的顺序,寻找第一个扇区(主引导程序),加载内存地址0x7c00
4.主引导记录把操作权限交给操作系统
众所周知,电脑启动时,主引导程序(Master boot record,MBR)会从硬盘到内存地址0x7c00处。为什么不是其他地址,为什么偏偏存入这个比32k小1024字节的地方,它有什么特殊?许多书籍或博客都是一笔 带过说Intel规定的。
0x7c00这个地址来自Intel的第一代个人电脑芯片8088,以后的cpu为了保持兼容,一直使用这个地址。
当时搭配操作系统的86_DOS,这个操作系统需要的最少内存是32k,那么内存地址就是0x0000~0x7FFF.
由于操作系统是中断驱动,所以需要存储各种中断处理程序的位置,因此8088用0x 000~0x03FF存储,所以只剩下0x400~0x7FFF可用, 为了尽可能多的连续内训留给系统,主引导程序就被放到内存地址的尾部,由于主引导程序占512字节,同时考虑到主引导程序还要产生数据,需要另外留出512字节保留数据,因此它的预留位置就变成了:
0x7FFF - 512 - 512 + 1 = 0x7C00
0x7C00就是这样来的。
计算机启动后,32KB内存的使用情况如下:
+--------------------- 0x0
| Interrupts vectors
+--------------------- 0x400
| BIOS data area
+--------------------- 0x5??
| OS load area
+--------------------- 0x7C00
| Boot sector
+--------------------- 0x7E00
| Boot data/stack
+--------------------- 0x7FFF
| (not used)
+--------------------- (...)