QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1637|回复: 11

有关bootsect.s中开头一小部分的问题

[复制链接]
发表于 2004-9-16 16:39:04 | 显示全部楼层 |阅读模式
有bootsect.s中的注释中说:
1.    bootsect.s 被bios启动子程序加载至0x7c00 (31k)处,然后再将自己移到了地址0x90000 (576k)处,并跳转至那里开始执行。
     问题: 为什么不直接加载到0x90000处,而是先加载到0x7c00,然后它自己再把自己移到0x90000处,这是为什么?


2.    然后在0x90200处加载setup.s,。。。。。
     问题:  怎么知道bootsect.s在这个位置已经结束,也即在0x90200处加载setup.s不会覆盖bootsect.s的内容?? bootsect.s有多大??

初次学习,谢谢指教!!!
发表于 2004-9-16 18:26:37 | 显示全部楼层

Re: 有关bootsect.s中开头一小部分的问题

[quote:99ed8b9d68="li8848li"]有bootsect.s中的注释中说:
1.    bootsect.s 被bios启动子程序加载至0x7c00 (31k)处,然后再将自己移到了地址0x90000 (576k)处,并跳转至那里开始执行。
     问题: 为什么不直接加载到0x90000处,而是先加载到0x7c00,然后它自己再把自己移到0x90000处,这是为什么?[/quote]

没记错的话,计算机加电自检以后会给CPU19H中断,CPU将启动扇区的代码加载到内存0x7c00处,然后跳转到0x7c00将控制权交给软件。
到底为啥是0x7c00,历史原因吧

[quote:99ed8b9d68="li8848li"]2.    然后在0x90200处加载setup.s,。。。。。
     问题:  怎么知道bootsect.s在这个位置已经结束,也即在0x90200处加载setup.s不会覆盖bootsect.s的内容?? bootsect.s有多大??
初次学习,谢谢指教!!![/quote]

bootsect.s汇编后是512字节(==0x200)
回复

使用道具 举报

 楼主| 发表于 2004-9-16 18:35:59 | 显示全部楼层
谢谢_Z_!
你的意思 是bootsect.s汇编后的大小是固定的, 都 是512字节(还是总是小于等于512)??而不管其内容是多少吗??
回复

使用道具 举报

发表于 2004-9-16 20:05:12 | 显示全部楼层
bootsect.s文件尾部应该有代码说明的

也是有标志的,好像是0xaa55还是0x55aa,我忘了
回复

使用道具 举报

发表于 2004-9-16 21:11:26 | 显示全部楼层
机器是因为检测到软盘first track, first segment的最后俩个字节是0x55aa才把软盘的第一个track的第一个segment的代码加载到0x7c00。而每个segment的size是512kb。所以bootsect.s只能<=512kb.
回复

使用道具 举报

发表于 2004-9-16 21:17:53 | 显示全部楼层
[quote:3799c877e6="sujunjie"]机器是因为检测到软盘first track, first segment的最后俩个字节是0x55aa才把软盘的第一个track的第一个segment的代码加载到0x7c00。而每个segment的size是512kb。所以bootsect.s只能<=512kb.[/quote]

512b 好不好  
回复

使用道具 举报

 楼主| 发表于 2004-9-17 08:39:01 | 显示全部楼层
机器是因为检测到软盘first track, first segment的最后俩个字节是0x55aa才把软盘的第一个track的第一个segment的代码加载到0x7c00。而每个segment的size是512kb。所以bootsect.s只能<=512kb.


我想问一下,为什么是软盘的第一个磁道,第一个段(还是第一个扇区?)?
如果我没有软盘呢?不是很理解这句话,希望再给解释一下。谢谢了!!!
回复

使用道具 举报

发表于 2004-9-17 15:52:32 | 显示全部楼层
对不起,弄了些错误。因我一向学的是英文。所以翻译错了。
_z_说的对。磁盘每个扇区是512b。
应该知道bios里的启动设计吧。你可以选择启动的顺序:软盘-〉硬盘-〉光盘。。。
当然也可以硬盘-〉软盘。。。
如果是硬盘第一位的话,那么机器就会先扫描硬盘的第一个cylinder的第一个sector.如果first sector的最后俩个字节是0x55aa的话,就把这个sector的代码copy到0x7c00.

至于为什么先扫描第一个cylinder第一个sector, 我想应该是机器被设计成这样的。如果机器被设计成仙扫描最后cylinder的最后一个sector的话。那么自有一个新的系统。
回复

使用道具 举报

 楼主| 发表于 2004-9-17 17:19:02 | 显示全部楼层
谢谢sujunjie!

那如果我启动顺序是 : 软盘--- 硬盘---。。。
我的bootsect.s是在硬盘上,那么到底是 把软盘的第一个sector, 还是硬盘的第一个sector的代码copy到0x7c00处??
回复

使用道具 举报

发表于 2004-9-17 23:19:54 | 显示全部楼层
那么机器就会先去找软盘驱动器。
1。如果没有软盘的话,就会去找硬盘。硬盘在的话,就看硬盘的第一个sector的最后俩个是不是55aa,如果是的话,就加载。不是就找下一个启动源,一般是光盘了。
2。如果软盘在的话,就check第一个sector的最后俩个字节是否55aa,如果是就加载软盘上的bootsector.s. 硬盘上的bootsect则被不用了。如果不是则找硬盘了。
回复

使用道具 举报

 楼主| 发表于 2004-9-20 10:22:45 | 显示全部楼层
哦,原来是这样的,谢谢你了。
回复

使用道具 举报

发表于 2004-10-17 20:08:54 | 显示全部楼层
好象bootsect.s 是专门为软盘启动而设计的。

硬盘启动的话就用加载器的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 08:28 , Processed in 0.061630 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表