-1

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

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

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

4

1 回答 1

0

readsectors的坏了。call reset开头(第 270 行)会破坏寄存器,例如其中AX包含重要信息的寄存器。然后对LBAtoCHS(第 282 行)的调用为时已晚,因为它AX已经被前两行准备 BIOS 中断的行破坏了。您应该将call LBAtoCHS向上移动到第 278 行。

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

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

最后,一条建议:学习使用调试器,这样您就可以解决自己的问题。

于 2013-05-27T17:02:37.700 回答