社区
汇编语言
帖子详情
计算机启动时为什么将MBR加载到的内存地址是0x7c00?
leewez
2007-12-09 09:49:32
我的意思是0x7c00 是一个偶然还是有什么必然的原因吗? 为什么不加载到别的地址如 0x7000 或者ox9000等等 谢谢回答
...全文
797
21
打赏
收藏
计算机启动时为什么将MBR加载到的内存地址是0x7c00?
我的意思是0x7c00 是一个偶然还是有什么必然的原因吗? 为什么不加载到别的地址如 0x7000 或者ox9000等等 谢谢回答
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Hou_Rj
2009-02-23
打赏
举报
回复
[Quote=引用 14 楼 nosachow 的回复:]
系统启动过程主要由一下几步组成(以硬盘启动为例):
1. 开机 :-)
2. BIOS 加电自检 ( Power On Self Test -- POST )
内存地址为 0ffff:0000
3. 将硬盘第一个扇区 (0头0道1扇区, 也就是Boot Sector)
读入内存地址 0000:7c00 处.
4. 检查 (WORD) 0000:7dfe 是否等于 0xaa55, 若不等于
则转去尝试其他启动介质, 如果没有其他启动介质则显示
"No ROM BASIC" 然后死机.…
[/Quote]
顶上楼,但也不是完全乱选的区域,CPU被家电时,最初的1M内存空间的每一个字节都由BIOS安排好了:
0x00000-0x003ff:中断向量表
0x00400-0x004ff:BIOS数据区
0x00500-0x07bff:自由内存区
0x07c00-0x07dff:引导程序加载区
0x07e00-0x9ffff:自由内存区
0xa0000-0xbffff:显示内存区
0xc0000-0xfffff:BIOS中断处理程序区
希望这样可以更清楚一点。
当然,如果要问为什么这样安排,保证一定有深层的道理,只是汗颜我还没有参悟到。
xiston
2009-02-09
打赏
举报
回复
因为0x7c00以下的地址还有从BIOS加载进来的中断向量表,启动程序一般都要用到这个中断向量表,所以便规定从0x7c00开始,以免覆盖掉0x7c00以下的数据
wangxy200696
2008-04-02
打赏
举报
回复
顶一下
zmwgreenrain
2008-01-18
打赏
举报
回复
就是一个约定,不知道为什么。
就好像0x000b8000地址被用作显存地址映射一样,一个既定事实
zmwgreenrain
2008-01-18
打赏
举报
回复
就是一个约定,不知道为什么。
就好像0x000b8000地址被用作显存地址映射一样,一个既定事实
alan001
2008-01-17
打赏
举报
回复
学习楼上
xiao2003ran
2008-01-17
打赏
举报
回复
约定而已
其实BIOS将MBR调入内存7C00后交出系统控制权后,MBR又将自己写到600处,再将DBR写到7C00处。
nosachow
2008-01-16
打赏
举报
回复
系统启动过程主要由一下几步组成(以硬盘启动为例):
1. 开机 :-)
2. BIOS 加电自检 ( Power On Self Test -- POST )
内存地址为 0ffff:0000
3. 将硬盘第一个扇区 (0头0道1扇区, 也就是Boot Sector)
读入内存地址 0000:7c00 处.
4. 检查 (WORD) 0000:7dfe 是否等于 0xaa55, 若不等于
则转去尝试其他启动介质, 如果没有其他启动介质则显示
"No ROM BASIC" 然后死机.
5. 跳转到 0000:7c00 处执行 MBR 中的程序.
6. MBR 首先将自己复制到 0000:0600 处, 然后继续执行.
7. 在主分区表中搜索标志为活动的分区. 如果发现没有活动
分区或有不止一个活动分区, 则转停止.
8. 将活动分区的第一个扇区读入内存地址 0000:7c00 处.
9. 检查 (WORD) 0000:7dfe 是否等于 0xaa55, 若不等于则
显示 "Missing Operating System" 然后停止, 或尝试
软盘启动.
10. 跳转到 0000:7c00 处继续执行特定系统的启动程序.
11. 启动系统 ...
以上步骤中 2,3,4,5 步是由 BIOS 的引导程序完成. 6,7,8,9,10
步由MBR中的引导程序完成.
至于为什么计算机启动时为什么将MBR加载到的内存地址是0x7c00,这个没有必要去深究了,好多的东西都是约定好的,正如楼上的兄弟所说,IBM在当初制定好多规范,一直沿用下来,足见他的强大。
你想了解这一块的内容,可以看看int13,和int19的调用规则。
pig_xp
2008-01-16
打赏
举报
回复
当初IBM在设计PC时加载到7c00h,后来bios厂商为了兼容就约定了,再也没有改过
leewez
2008-01-10
打赏
举报
回复
楼上的能不能说得详细点? 我想了解这一块的内容 该看那些的资料? 谢谢
nosachow
2007-12-18
打赏
举报
回复
这是协议呀,在启动OS时是调用INT19的,Read O/S boot block in at 0000:7C00h and jumps to it.
robotom
2007-12-18
打赏
举报
回复
这是机器人自动发贴吗?
zhgwbzhd
2007-12-14
打赏
举报
回复
同意2楼
ShardowM
2007-12-14
打赏
举报
回复
标准
EFIBIOS
2007-12-14
打赏
举报
回复
觉得buaawr说的很正确
agaric
2007-12-12
打赏
举报
回复
约定。 标准。
fhb13
2007-12-12
打赏
举报
回复
必然
buaawr
2007-12-11
打赏
举报
回复
应该是约定,至少微软的系统我看到的都是这样,你想啊,一开机的时候,跑的BIOS由BIOS公司来写,之后运行的操作系统则是由微软等公司来写,这两个软件系统如何交接对CPU的控制权呢,当然就是通过7C00h了,MBR是操作系统写的,而从硬盘读取MBR以及拷贝到内存7C00H的动作由BIOS来完成,之后BIOS讲CPU的IP指针跳到7C00H(far jump 7c00h)来执行就完成了交接工作。就是这样
m60a1
2007-12-11
打赏
举报
回复
我在书里面没有看到过有这方面答案,也可能是我书看得比较少。
可能是楼上所说的那样吧,LZ可以跟踪一下,看看是否系统加载
前每次都到寻那个地址!
flypig_007
2007-12-09
打赏
举报
回复
是约定
grub源代码0.95
从
计算机
启动到GRUB启动操作系统 (1) BIOS执行INT 0x19,
加载
MBR
至
0x7c00
并跳转执行。如果你安装GRUB到
MBR
,GRUB的安装程序会把Stage1(512B)拷贝到
MBR
。视stage2的大小,安装程序会在Stage1中嵌入Stage1_5或者Stage2的磁盘位置信息。 (2) Stage1开始执行,它在进行直接
加载
Stage1_5或者Stage2并跳转执行。不论是哪种情况,这一步的结果都是Stage2开始运行了。 (3) Stage2这个小型的操作系统终于开始正式运行了!它会把系统切入保护模式,设置好C运行环境(主要是BSS)。他会先找Config文件(就是我们的Menulist),如果没有的话就执行一个Shell,等待我们输入命令。然后Grub的工作就是输入命令-解析命令-执行命令的循环,当然Stage2本身是为
加载
其他操作系统而存在的,所以如果情况允许,在他执行Boot命令以后就会把控制权转交出去。
为什么启动引导
加载
到内存时在
0x7c00
x86 架构 bios 引导
加载
程序中围绕“
0x7C00
”的奥秘 你知道 x86 汇编程序编程中的“
0x7C00
”,一个神奇的数字吗? “
0x7C00
”是BIOS
加载
MBR
(主引导记录,hdd/fdd的第一个扇区)的
内存地址
。操作系统或引导
加载
程序开发人员必须假设他们的汇编代码已
加载
并从
0x7C00
开始。 但是...1st,你可能想知道。 “我阅读了所有英特尔 x86(32 位)程序员手册,但没有找到魔数
0x7C00
。” 是的。
0x7C00
与 x86 CPU 无关。很自然,您无法在英.
为什么BIOS要将主引导扇区(
MBR
)
加载
到
0x7c00
这个地址?
0x7c00
是BIOS将主引导扇区
加载
到内存的地址。0x7c = 32KB - 1KB,为什么是这个数? 从头开始讲:
计算机
是这样启动的: 上电 读取ROM里面的BIOS,用来检查硬件(Power On Self Test) 硬件检查通过 BIOS根据指定的顺序,检查引导设备的第一个扇区(即主引导记录),将这个扇区
加载
在
内存地址
0x7c00
处 主引导记录把操作权交给操作系统 ...
为什么主引导记录的
内存地址
是
0x7C00
?
《
计算机
原理》课本说,
启动时
,主引导记录会存入
内存地址
0x7C00
。 这个奇怪的地址,是怎么来的,课本就不解释了。我一直有疑问,为什么不存入内存的头部、尾部、或者其他位置,而偏偏存入这个比 32KB 小1024字节的地方? 昨天,我读到一篇文章,终于解开了这个谜。 首先,如果你不知道,主引导记录(Master boot record,缩写为
MBR
)是什么,可以先读《
计算机
为什么主引导记录的
内存地址
是
0x7C00
为什么主引导记录的
内存地址
是
0x7C00
?《
计算机
原理》课本说,
启动时
,主引导记录会存入
内存地址
0x7C00
。这个奇怪的地址,是怎么来的,课本就不解释了。我一直有疑问,为什么不存入内存的头部、尾部、或者其他位置,而偏偏存入这个比 32KB 小1024字节的地方?昨天,我读到一篇文章,终于解开了这个谜。首先,如果你不知道,主引导记录(Master boot record,缩写为
MBR
)是什么,可以先...
汇编语言
21,458
社区成员
41,603
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章