首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

模糊不清的0x7c00

2012-07-30 
模糊的0x7c00看《Linux内核完全注释》里面这样讲:PC电源打开后,80x86结构的CPU将自动进入实模式,并从地址0xf

模糊的0x7c00
看《Linux内核完全注释》里面这样讲:
PC电源打开后,80x86结构的CPU将自动进入实模式,并从地址0xffff0开始自动执行代码,这里存放一个跳转代码,直接指向系统初始化的地址,它可将MBR读入绝对内存地址0x7c00处,然后跳转到这个地方开始执行MBR中的程序,求高人解释,这个0x7c00之前的空间为何被保留了,为什么不讲MBR直接装入0x0000处执行。

[解决办法]
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年发布,使用intel 8088(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

前面的中文就是这篇文章的翻译版本
[解决办法]
碉堡了

[解决办法]
收藏了
[解决办法]
1楼V5
[解决办法]
最早的8086电脑只有32KB RAM

热点排行