0x7c00引导地址详解

来源:互联网 发布:网络作家沙漠作品 编辑:程序博客网 时间:2024/06/06 15:29
0x7C00是BIOS加载MBR到内存时的起始地址,操作系统或者引导程序必须假设它们的汇编代码从内存的0x7C00地址开始。

这时 你可能会想:

1.我阅读了intel x86(32位机)程序手册,但是却并没有看到任何关于0x7C00的信息。

0x7C00 与x86的cpu没有关系,自然你不能再intel的程序手册中找到其相关信息。

2.0x7C00=31KB,这个地址的意思或者说这个 地址容量的大小表示什么意思?

任何人都可以决定它,但是他为什么要用过一个半字节的地址(32KB-1KB)呢?

对于 0x7C00来说,有另个问题是需要回答的。

1.谁决定了0x7C00?

2.0x7C00本身代表了什么意思?

0x7C00 第一次出现的地方是在IBM PC 5150的BIOS处理int 19(19号中断)的时候。

IBM PC 5150是x86(32位)IBM PC/AT系列的祖先,这款PC于1981年发布,使用intel8088(16位)的处理器和16KB的RAM内存,BIOS和微软的基本指令均放在该内存当中。

当打开电脑电源,BIOS开始自检,然后触发19号中断。在处理19号中断时,BIOS检测电脑是否具有软盘/硬盘/固定磁盘,如果电脑具有任何可以的磁盘,BIOS就把磁盘的第一个扇区(512B)加载到内存的0x7C00地址处。

现在你知道为什么在x86的文档中找不到0x7C00的相关信息了,因为它是与BIOS相 关的。

其他的0x7C00的问题,现在的问题是0×0000—0x7c00地址呢?

在原文中具有这样的一个表:

+——————— 0×0
| Interrupts vectors(中断向量表)
+——————— 0×400
| BIOS data area(BIOS的数据区域)
+——————— 0×5??
| OS load area(操作系统加载区域)
+——————— 0x7C00
| Boot sector(引导区域)
+——————— 0x7E00
| Boot data/stack(引导数据/堆栈)
+——————— 0x7FFF
| (not used)
+——————— (…)

关 于这个问题,广为流传的一片文章:
http://www.glamenv-septzen.net/en/view/6
0 0
原创粉丝点击