2013-05-26 25 views
-1

我正在遵循编写您自己的操作系统的指南。它从编写一个2阶段引导程序开始,第一个引导加载程序在第二阶段加载。在我指南中,他们让我使用FAT12文件系统作为软盘映像,所以我从根目录表读取以查看是否该文件存在,然后去到FAT来获取文件簇....等等,等等无法从FAT12根目录中找到我的stage 2 bootloader

我的问题是,我的代码是没有找到根目录表中的文件,但我不能找出原因。有人可以在这里指出我正确的方向吗?

这是我的引导程序代码:https://friendpaste.com/FkSFfxLz17LUwdyvK3ONX

回答

0

你​​3210坏了。开头的call reset(行270)销毁寄存器,例如AX,其中包含重要信息。然后对LBAtoCHS(第282行)的调用太“迟”了,之前AX已被前两行准备BIOS中断所破坏。您应该将call LBAtoCHS上移至第278行。

修复此问题,您将看到您正在加载的扇区最终会覆盖您已设置为0x9000的堆栈区域。你将不得不解决这个冲突。

我发现的另一个问题是线102:它应该是repe不是普通的rep

最后一个忠告:学会使用调试器,所以你可以解决你自己的问题。

+0

感谢您的帮助。这些变化后仍然没有加载第2阶段,但我没有同样的问题,所以我认为这些变化确实有帮助。如何使用调试器在虚拟机中调试加载程序? – Gogeta70

+0

取决于虚拟机和调试器。 bochs有内置的调试器,但你也可以附加gdb。 qemu也适用于gdb。 – Jester