Assembly Can';无法从FAT12根目录中找到我的第2阶段引导加载程序

Assembly Can';无法从FAT12根目录中找到我的第2阶段引导加载程序,assembly,osdev,Assembly,Osdev,我正在遵循一个关于编写自己的操作系统的指南。它首先编写一个2阶段引导加载程序,第一个引导加载程序在第2阶段加载。在我下面的指南中,他们让我使用FAT12文件系统处理软盘映像,所以我从根目录表中读取文件,查看文件是否存在,然后转到FAT获取文件集群。。。。等等等等 我的问题是,我的代码在根目录表中找不到该文件,但我不知道为什么。有人能给我指一下这里的正确方向吗 这是我的引导加载程序的代码:您的readsectors已损坏。开始时的调用重置(第270行)会销毁包含重要信息的寄存器,如AX。然后对LB

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

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


这是我的引导加载程序的代码:

您的
readsectors
已损坏。开始时的
调用重置
(第270行)会销毁包含重要信息的寄存器,如
AX
。然后对
LBAtoCHS
(第282行)的调用太“晚”,这是在
AX
已经被前两行为BIOS中断做准备而破坏之后。您应该将
调用LBAtoCHS
移动到第278行

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

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


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

谢谢您的帮助。在这些更改之后,它仍然没有加载第2阶段,但我没有同样的问题,所以我认为这些更改确实有帮助。如何使用调试器调试虚拟机中的加载程序?取决于虚拟机和调试器。bochs有内置的调试器,但您也可以附加gdb。qemu还与gdb合作。