无法从FAT12根目录中找到我的stage 2 bootloader

时间:2013-05-26 21:00:30

标签: assembly osdev

我正在撰写关于编写自己的操作系统的指南。它首先编写一个2阶段的引导加载程序,第一个引导加载程序在第2阶段加载。在我关注的指南中,他们让我使用FAT12文件系统作为软盘映像,所以我从根目录表中读取以查看是否文件存在,然后转到FAT以获取文件集群....等等。

我的问题是我的代码没有在根目录表中找到该文件,但我无法弄清楚原因。有人可以指点我在正确的方向吗?

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

1 个答案:

答案 0 :(得分:0)

您的readsectors已损坏。开头的call reset(第270行)会破坏AX等寄存器,并在其中包含重要信息。然后对LBAtoCHS(第282行)的调用过于“迟”,在AX已经被准备BIOS中断的前两行销毁之后。您应该将call LBAtoCHS移至第278行。

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

我发现的另一个问题是第102行:它应该是repe而不是rep

最后,提出一条建议:学会使用调试器,以便解决自己的问题。