有关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有多大??
初次学习,谢谢指教!!!
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) 谢谢_Z_!
你的意思 是bootsect.s汇编后的大小是固定的, 都 是512字节(还是总是小于等于512)??而不管其内容是多少吗?? bootsect.s文件尾部应该有代码说明的
也是有标志的,好像是0xaa55还是0x55aa,我忘了 :oops: 机器是因为检测到软盘first track, first segment的最后俩个字节是0x55aa才把软盘的第一个track的第一个segment的代码加载到0x7c00。而每个segment的size是512kb。所以bootsect.s只能<=512kb. 机器是因为检测到软盘first track, first segment的最后俩个字节是0x55aa才把软盘的第一个track的第一个segment的代码加载到0x7c00。而每个segment的size是512kb。所以bootsect.s只能<=512kb.
512b 好不好:mrgreen:
机器是因为检测到软盘first track, first segment的最后俩个字节是0x55aa才把软盘的第一个track的第一个segment的代码加载到0x7c00。而每个segment的size是512kb。所以bootsect.s只能<=512kb.
我想问一下,为什么是软盘的第一个磁道,第一个段(还是第一个扇区?)?
如果我没有软盘呢?不是很理解这句话,希望再给解释一下。谢谢了!!! 对不起,弄了些错误。因我一向学的是英文。所以翻译错了。
_z_说的对。磁盘每个扇区是512b。
应该知道bios里的启动设计吧。你可以选择启动的顺序:软盘-〉硬盘-〉光盘。。。
当然也可以硬盘-〉软盘。。。
如果是硬盘第一位的话,那么机器就会先扫描硬盘的第一个cylinder的第一个sector.如果first sector的最后俩个字节是0x55aa的话,就把这个sector的代码copy到0x7c00.
至于为什么先扫描第一个cylinder第一个sector, 我想应该是机器被设计成这样的。如果机器被设计成仙扫描最后cylinder的最后一个sector的话。那么自有一个新的系统。 谢谢sujunjie!
那如果我启动顺序是 : 软盘--- 硬盘---。。。
我的bootsect.s是在硬盘上,那么到底是 把软盘的第一个sector, 还是硬盘的第一个sector的代码copy到0x7c00处?? 那么机器就会先去找软盘驱动器。
1。如果没有软盘的话,就会去找硬盘。硬盘在的话,就看硬盘的第一个sector的最后俩个是不是55aa,如果是的话,就加载。不是就找下一个启动源,一般是光盘了。
2。如果软盘在的话,就check第一个sector的最后俩个字节是否55aa,如果是就加载软盘上的bootsector.s. 硬盘上的bootsect则被不用了。如果不是则找硬盘了。 哦,原来是这样的,谢谢你了。 好象bootsect.s 是专门为软盘启动而设计的。
硬盘启动的话就用加载器的。
页:
[1]