li8848li 发表于 2004-9-16 16:39:04

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

有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有多大??

初次学习,谢谢指教!!!

_z_ 发表于 2004-9-16 18:26:37

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

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

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

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

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

li8848li 发表于 2004-9-16 18:35:59

谢谢_Z_!
你的意思 是bootsect.s汇编后的大小是固定的, 都 是512字节(还是总是小于等于512)??而不管其内容是多少吗??

_z_ 发表于 2004-9-16 20:05:12

bootsect.s文件尾部应该有代码说明的

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

sujunjie 发表于 2004-9-16 21:11:26

机器是因为检测到软盘first track, first segment的最后俩个字节是0x55aa才把软盘的第一个track的第一个segment的代码加载到0x7c00。而每个segment的size是512kb。所以bootsect.s只能<=512kb.

_z_ 发表于 2004-9-16 21:17:53

机器是因为检测到软盘first track, first segment的最后俩个字节是0x55aa才把软盘的第一个track的第一个segment的代码加载到0x7c00。而每个segment的size是512kb。所以bootsect.s只能<=512kb.

512b 好不好:mrgreen:

li8848li 发表于 2004-9-17 08:39:01


机器是因为检测到软盘first track, first segment的最后俩个字节是0x55aa才把软盘的第一个track的第一个segment的代码加载到0x7c00。而每个segment的size是512kb。所以bootsect.s只能<=512kb.


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

sujunjie 发表于 2004-9-17 15:52:32

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

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

li8848li 发表于 2004-9-17 17:19:02

谢谢sujunjie!

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

sujunjie 发表于 2004-9-17 23:19:54

那么机器就会先去找软盘驱动器。
1。如果没有软盘的话,就会去找硬盘。硬盘在的话,就看硬盘的第一个sector的最后俩个是不是55aa,如果是的话,就加载。不是就找下一个启动源,一般是光盘了。
2。如果软盘在的话,就check第一个sector的最后俩个字节是否55aa,如果是就加载软盘上的bootsector.s. 硬盘上的bootsect则被不用了。如果不是则找硬盘了。

li8848li 发表于 2004-9-20 10:22:45

哦,原来是这样的,谢谢你了。

sd_2001 发表于 2004-10-17 20:08:54

好象bootsect.s 是专门为软盘启动而设计的。

硬盘启动的话就用加载器的。
页: [1]
查看完整版本: 有关bootsect.s中开头一小部分的问题