我正在撰写关于编写自己的操作系统的指南。它首先编写一个2阶段的引导加载程序,第一个引导加载程序在第2阶段加载。在我关注的指南中,他们让我使用FAT12文件系统作为软盘映像,所以我从根目录表中读取以查看是否文件存在,然后转到FAT以获取文件集群....等等。
我的问题是我的代码没有在根目录表中找到该文件,但我无法弄清楚原因。有人可以指点我在正确的方向吗?
这是我的引导加载程序的代码:https://friendpaste.com/FkSFfxLz17LUwdyvK3ONX
答案 0 :(得分:0)
您的readsectors
已损坏。开头的call reset
(第270行)会破坏AX
等寄存器,并在其中包含重要信息。然后对LBAtoCHS
(第282行)的调用过于“迟”,在AX
已经被准备BIOS中断的前两行销毁之后。您应该将call LBAtoCHS
移至第278行。
修复此问题,您将看到正在加载最终会覆盖您已设置为0x9000
的堆栈区域的扇区。你必须解决这个冲突。
我发现的另一个问题是第102行:它应该是repe
而不是rep
。
最后,提出一条建议:学会使用调试器,以便解决自己的问题。