`
tianshi_kco
  • 浏览: 21395 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

为什么bios将mbr装载到0x7c00地址,0x7c00怎么来的?(翻译)

 
阅读更多

以下内容纯属于个人翻译,因本人英语有限,必然存在一下错误,望海涵!

你知道0x7c00吗?对于x86汇编编程来说,这个是一个神奇的数字.

0x7c00h是BIOS用于加载MBR(主引导记录,硬盘/软件的第一个扇区)到操作系统或者的内存地址.因此系统开发人员必须确保他们的汇编程序必须从0x7c00开始加载.

但是,...第一,你也许很疑惑

“我读inter X86(32位)的所以编程手册,但我却不能找到,但是我却不能从inter的CPU规格书中找到它.”这时,你就会疑惑”是谁决定这个地址呢?”

第二,你也许会这么想

“0x7c00在十进制中刚好等于32KB – 1024 B”,那么这个数有什么意思呢?

是谁定义这个数,为什么他/她要决定如此一个在中途的地址?

现在有这么两个问题围绕着这个神奇的数字---0x7c00.

1,谁定义0x7c00

2,为什么 x7c00 = 32KB – 1024B,它有什么含义?

Ok,现在让我们回过头看看x86(32位)PC机的祖先—IBM PC 5150.

0x7c00最先出现是在IBM PC 5150 BIOS的19h(即25)号中断的句柄.

追踪到IBM x86系列的PC机的历史,你发现它们的祖先是IBM PC 5150 PC机,这么一台PC是在1981年八月份发布的,带有intel的8088(16位)和16K的RAM(迷你内存模式)BIOS和微软基础指令存放在ROM中.

但开机是,BIOS会执行POST(开机自检)程序,之后就会调用 19h号中断,在19h号中断句柄,BIOS会检查pc是否有软盘,硬盘或者可用设备.如果pc拥有可有的设备.BIOS就会从0x7c00这个地址开始加载第一个扇区(512字节)

现在,你已经明白为什么你不能从x86的手册中找到这个神奇的数字,因为这个数字是属于BIOS的规范.

0x7c00的起源

围绕着IBM PC dos,微软和SCP的86-doc有着很著名的故事,你可以去看” A Short

History of MS-DOS”

SCP的 86-dos(1980年)是引用IBM PC DOS 1.0的,86-dos(早期叫做QDOS)是兼容8086/8088CPU的CP/M操作系统.在1979年, 数字研究公司还没有在8086/8088 CPU上发展CP/M出售两套S-100总线板,一个基于是8686CPU,一个是基于CPU监控板(CPU Monitor), CPU Monitor程序提供引导程序和调式功能.这个引导程序是从0x200加载MBR的,并非从0x7c00 在1981年,IBM PC DOS出了一款新的8086/8088的CP/M操作系统.所以,我告诉你这个数字第一次出现于PC 5150 ROM 的BIOS中.

之前,SCP的CPU监控引导程序是从0x200开始引导的,而不是0x7c00.为什么它要从0先0x200引导MBR呢?这里有三个原因.

1,8086的中断向量使用0x0到0x3ff

2,86-dos从0x400加载

3,86-dos不使用0x200-0x3ff的中断向量

这些原因就意味着0x200-0x3ff是必须保留的而且在操作系统是是不碍事的,无论是被86-dos或者用户程序加载.

所以,Tim Paterson(86-dos开发者)选择从0x200开始加载MBR

Q:谁决定0x7c00

A:IBM PC 5150 BIOS开发团队,0x7c00是被IBM 5150 BIOS开发团队决定的.

综上所述,这一神奇的数字是出生于1981年, IBM PC / AT COMPAT “ PC / BIOS供应商没有更改BIOS的规范,为了使操作系统的向后兼容。而不是intel或者微软决定的.

q:0x7x00=32KB - 1024B有什么含义?

A:受操作系统和CPU的内存布局的影响.IBM PC 5150秘密内存模式仅仅只有16K的RAM,所以,你可能有一个问题"这个迷你内存模式能从diskette加载操作系统吗?BIOS加载的地址是32K-1024的地址,实际内存不够啊?"不,这个并没有问题.一个IBM PC 5150ROM BIOS开发团队的一个成员--Dr. David Bradley说过:"DOS 1.0要求最低为32KB ,因此我们不关心尝试16KB的引导。"

(注:这个迷你内存模式是要求16位还是32位,我现在也无法考证.)但是,至少,在1981年之前的BIOS开发,他们就已经在dos迷你版支持32KB.

BIOS开发团队定义0x7c00的原因:

1,他们要尽可能留足够的空间给操作系统在32K内加载自己.

2,8086/8088使用0x0-0x3ff作为中断向量,并且之后就是BIOS的数据空间.

3,开机扇区是512字节,开机程序需要的堆栈和数据空间至少要512字节.

4,因此,0x7c00,在32K的最后1024字节就被选择了.

一旦OS加载和启动,引导扇区是从来没有使用过,直到上电复位。

之后操作系统加载后,内存布局将会是

0x0:中断向量

0x400,BIOS数据

0x5?? 操作系统引导空间

0x7c00 开机引导

0x7e00 开机数据/堆栈

0x7fff 没有使用

这就是使用0x7c00的缘由和原因.在PC / AT COMPAT BIOS的INT 19H处理,存活约三十年的神奇的数字。

86-DOS related:

? "8086 Monitor Instruction Manual"(MON 86 - V1.4)

? "86-DOS(TM) User's Manual Version 0.3"

? "86-DOS(TM) Programmer's Manual Version 0.3"

? "86-DOS(TM) Instruction Manual Version ??"

IBM PC 5150 related:

? "IBM Personal Computer Hardware Reference Library", "Technical Reference" (IBM Personal Computer Technical Reference manual)

? "IBM Personal Computer XT Hardware Reference Library", "Technical Reference" (IBM Personal Computer XT Technical Reference manual)

Intel 8086/8088 data sheets:

? "8086 16-BIT HMOS MICROPROCESSOR"

? "M80C86/M80C86-2 16-BIT CHMOS MICROPROCESSOR"

? "8088 8-BIT HMOS MICROPROCESSOR"

CP/M related:

? The Unofficial CP/M Web Site

o http://www.cpm.z80.de/

? CP/M Internals : Oscar Vermeulen Personal Web Site

o http://www.dcast.vbox.co.uk/cpm.html

? Digital Research - CP/M

o http://www.digitalresearch.biz/CPM.HTM

? CP/M Main Page

o http://www.seasip.demon.co.uk/Cpm/

86-DOS related:

? Origins of DOS - Paterson Technology

o http://www.patersontech.com/dos/

? 86-DOS Resource Website

o http://www.86dos.org/index.htm

? DosMan Drivel

o http://dosmandrivel.blogspot.com/

And all related Wikipedia pages.

Special Thanks To...

Special Thanks To:

? Tim Peterson

? David Bradley

for japanese article, see:

"Assembler/なぜx86ではMBRが"0x7C00"にロードされるのか?(完全版)"

分享到:
评论

相关推荐

    操作系统高级教程.docx

    对于bios来说,"约定"在接到启动操作系统的命令后,"定位识别"只从启动扇区把代码加载到0x7c00这个位置。后续扇区则由bootsect代码加载,这些代码由编写系统的用户负责,与bios无关。这样构建的好处就是站在整个...

    MBR引导代码分析

    下面这段代码实现把0000:7c1b处MBR代码复制485个字节到0000:061b处,为什么不从0000:7c00开始复制512个到0000:06cc处,因为前面1b 个字节为复制代码,所以忽略.空出的0000:7c00 开始的空间将读入活动分区的操作系统的...

    BIOS、MBR、PBR、分区等基础知识.txt

    BIOS、MBR、PBR、分区等基础知识

    BIOS+MBR硬盘,一步一步教你怎么用clover装黑苹果.doc

    BIOS+MBR硬盘,一步一步教你怎么用clover装黑苹果,教程采用的格式是MBR硬盘格式安装的,采用的电脑是笔记本G510,关闭独显采用核显为HD4600,配置如下:

    MBR病毒分析

    3、 将硬盘第一个扇区(0头0道1扇区,也就是Boot Sector)读入内存地址0000:7c00处; 4、 检查(WORD)0000:7dfe是否等于0xaa55.若不等于则转去尝试其他介质;如果没有其他启动介质,则显示 ”No ROM BASIC” ,然后死机; 5、...

    BIOS、MBR、PBR等基础知识

    BIOS、MBR、PBR等基础知识,兼谈U盘、移动硬盘以及操作系统的安装与启动基本原理.txt

    准系统W650KK/KJ 神舟k670 炫龙dd八代I3bios

    bios by 百度贴吧dsanke 本人闲鱼付费购买,不支持八代i5,仅支持八代奔腾i3 ; ; These settings are not part recommendations, nor are they an ; indication these parts are supported on Intel platforms. ; ...

    BIOS界面英文翻译

    BIOS界面英文翻译BIOS界面英文BIOS界面英文翻译翻译

    下面是一系列蓝屏中可能出现的代码

    1017 0x000003F9 系统尝试将档案加载系统登录或将档案还原到系统登录中,但是,指定档案的格式不是系统登录文件的格式。 1018 0x000003FA 尝试在标示为删除的系统登录机码,执行不合法的操作。 1018 0x000003FA ...

    grub源代码0.95

    (1) BIOS执行INT 0x19,加载MBR至0x7c00并跳转执行。如果你安装GRUB到MBR,GRUB的安装程序会把Stage1(512B)拷贝到MBR。视stage2的大小,安装程序会在Stage1中嵌入Stage1_5或者Stage2的磁盘位置信息。 (2) Stage1...

    操作系统 自己写 详细实现步骤

    然后BIOS跳到地址0x7C00并开始执行相应的程序。正是这个程序负责将操作系统(operating system)读入内存并初始化。 首先来看看引导记录(Boot Record)中有些什么。DOS中的DEBUG是察看内存或磁盘内容的绝好工具。...

    计算机启动过程(1)-BIOS+MBR部分.pdf

    计算机启动过程(1)-BIOS+MBR部分.pdf

    linux操作系统.txt

    1.为什么开始启动计算机的时候,执行的是BIOS代码而不是操作系统自身的代码? 因为CPU的逻辑电路被设计为只能运行内存中的程序,没有能力直接从软盘运行操作系统。...为什么BIOS把bootsect加载到0x07c00,而不是0

    win98硬盘主引导代码反汇编分析.rar_BIOS_bios 反汇编_mbr_rom bios_硬盘引导

    WIN98SE硬盘主引导记录代码反汇编分析硬盘引导记录MBR(Master Boot Record)是指硬盘之0面0道1扇区之内容,PC及其兼容机之ROM BIOS约定在上电及POST自检成功后,将其从硬盘读出,放置在内存0:7C00处,然后转去该...

    系统更新出现代码0x80070002

    一个问题阻止windows正确检查此机器的许可证。错误代码0x80070002

    Linux-0.11 [内核源代码带中文注释]

    bootsect.s 被bios-启动子程序加载至0x7c00 (31k)处,并将自己 ! 移到了地址0x90000 (576k)处,并跳转至那里。 ! ! 它然后使用BIOS 中断将'setup'直接加载到自己的后面(0x90200)(576.5k), ! 并将system 加载到地址...

    bootice安装grub2-00 mbr所需要的boot文件夹

    修正: 1.编码问题 2.颜色问题 添加: 1.添加win8pe的菜单到第一项。 使用方法: 用bootice安装grub2到mbr。...pauly兄的bootice最新...step2,将本资源的boot文件夹拷贝到硬盘fat,exfat,ext分区(例如X:),解压到根目录。

    什么是BIOS?如何进入BIOS,恢复BIOS原始设置的快捷方法参考.pdf

    什么是BIOS?如何进入BIOS,恢复BIOS原始设置的快捷方法参考.pdf

    XP+0x80070002一个问题阻止WINDOWS正确检查机器许可证.doc

    错误代码:0x80070002,然后重返用户登陆,不能再进入系统。多是打上升级补丁后出现该问题,(一般是你安装了ghost精简系统,然后再安装微软正版升级补丁会出现这样的...xp的正版验证文件是:oembios.bin(路径X:\WI

Global site tag (gtag.js) - Google Analytics