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

2024-04-05 00:58

本文主要是介绍为什么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"にロードされるのか?(完全版)"

 

这篇关于为什么bios将mbr装载到0x7c00地址,0x7c00怎么来的?(翻译)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/877265

相关文章

怎么关闭Ubuntu无人值守升级? Ubuntu禁止自动更新的技巧

《怎么关闭Ubuntu无人值守升级?Ubuntu禁止自动更新的技巧》UbuntuLinux系统禁止自动更新的时候,提示“无人值守升级在关机期间,请不要关闭计算机进程”,该怎么解决这个问题?详细请看... 本教程教你如何处理无人值守的升级,即 Ubuntu linux 的自动系统更新。来源:https://

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

LinuxMint怎么安装? Linux Mint22下载安装图文教程

《LinuxMint怎么安装?LinuxMint22下载安装图文教程》LinuxMint22发布以后,有很多新功能,很多朋友想要下载并安装,该怎么操作呢?下面我们就来看看详细安装指南... linux Mint 是一款基于 Ubuntu 的流行发行版,凭借其现代、精致、易于使用的特性,深受小伙伴们所喜爱。对

macOS怎么轻松更换App图标? Mac电脑图标更换指南

《macOS怎么轻松更换App图标?Mac电脑图标更换指南》想要给你的Mac电脑按照自己的喜好来更换App图标?其实非常简单,只需要两步就能搞定,下面我来详细讲解一下... 虽然 MACOS 的个性化定制选项已经「缩水」,不如早期版本那么丰富,www.chinasem.cn但我们仍然可以按照自己的喜好来更换

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也

Ubuntu 怎么启用 Universe 和 Multiverse 软件源?

《Ubuntu怎么启用Universe和Multiverse软件源?》在Ubuntu中,软件源是用于获取和安装软件的服务器,通过设置和管理软件源,您可以确保系统能够从可靠的来源获取最新的软件... Ubuntu 是一款广受认可且声誉良好的开源操作系统,允许用户通过其庞大的软件包来定制和增强计算体验。这些软件

Ubuntu 24.04 LTS怎么关闭 Ubuntu Pro 更新提示弹窗?

《Ubuntu24.04LTS怎么关闭UbuntuPro更新提示弹窗?》Ubuntu每次开机都会弹窗提示安全更新,设置里最多只能取消自动下载,自动更新,但无法做到直接让自动更新的弹窗不出现,... 如果你正在使用 Ubuntu 24.04 LTS,可能会注意到——在使用「软件更新器」或运行 APT 命令时,

TP-LINK/水星和hasivo交换机怎么选? 三款网管交换机系统功能对比

《TP-LINK/水星和hasivo交换机怎么选?三款网管交换机系统功能对比》今天选了三款都是”8+1″的2.5G网管交换机,分别是TP-LINK水星和hasivo交换机,该怎么选呢?这些交换机功... TP-LINK、水星和hasivo这三台交换机都是”8+1″的2.5G网管交换机,我手里的China编程has

AI绘图怎么变现?想做点副业的小白必看!

在科技飞速发展的今天,AI绘图作为一种新兴技术,不仅改变了艺术创作的方式,也为创作者提供了多种变现途径。本文将详细探讨几种常见的AI绘图变现方式,帮助创作者更好地利用这一技术实现经济收益。 更多实操教程和AI绘画工具,可以扫描下方,免费获取 定制服务:个性化的创意商机 个性化定制 AI绘图技术能够根据用户需求生成个性化的头像、壁纸、插画等作品。例如,姓氏头像在电商平台上非常受欢迎,

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接