Assembly 按名称在x86程序集中的FAT32文件系统上加载第二阶段引导加载程序需要哪些步骤?

Assembly 按名称在x86程序集中的FAT32文件系统上加载第二阶段引导加载程序需要哪些步骤?,assembly,x86,bootloader,fat32,Assembly,X86,Bootloader,Fat32,我有一个第二阶段的引导加载程序,我需要加载到一个USB闪存驱动器。我有一个引导加载程序,它加载我的操作系统并在软盘驱动器上运行 我可以将此引导代码复制到我的USB闪存驱动器分区,但它在加载第二阶段引导加载程序时崩溃。我当前的代码使用CHS计算从FAT12文件系统加载文件 我读过关于扩展读取函数的文章,但我不确定这是否是最好的选择 按名称在x86程序集中的FAT32文件系统上加载第二阶段引导加载程序需要哪些步骤?什么是好的选择?它与FAT12代码没有太大区别,FAT32文件系统也没有太大变化。BP

我有一个第二阶段的引导加载程序,我需要加载到一个USB闪存驱动器。我有一个引导加载程序,它加载我的操作系统并在软盘驱动器上运行

我可以将此引导代码复制到我的USB闪存驱动器分区,但它在加载第二阶段引导加载程序时崩溃。我当前的代码使用CHS计算从FAT12文件系统加载文件

我读过关于扩展读取函数的文章,但我不确定这是否是最好的选择


按名称在x86程序集中的FAT32文件系统上加载第二阶段引导加载程序需要哪些步骤?什么是好的选择?

它与FAT12代码没有太大区别,FAT32文件系统也没有太大变化。BPB中还有其他字段要考虑,根目录不在固定的位置,目录条目格式发生了变化。您需要使用LBA寻址而不是CHS。有关FAT32的一些详细信息,请参阅第页。CHS函数可能只能访问设备的第一个~512 MiB;而您的操作系统分区可能在该区域之外。最好的方法是检测扩展读取功能是否受支持,如果可以,则使用它,如果必须,则返回CHS。请注意,通过可接受的错误处理/错误消息、分区表解析、“扩展读取”检测以及对CHS和扩展读取的支持;在前512字节中,您将没有空间来存放值得编写的代码。幸运的是,FAT及其BPB有一个“保留扇区”字段,允许您在分区开始时使用任意多个扇区。当然,这些保留扇区可以用于引导加载程序(例如,引导加载程序的第一个扇区加载引导加载程序的其余扇区)和您的第二阶段,以及您喜欢的任何其他内容。最后,如果您使用/保留分区的前“N个扇区”,则可以用于运行文件系统所需的所有内容(例如,启动代码、内核、驱动程序等)您的启动代码都不需要关心文件系统是否胖。这使得以后当您想要使用不同/更好的文件系统时,重用现有启动代码变得容易得多(例如,在设计操作系统的本机文件系统时,您只需在分区的开头保留扇区,并使用完全相同的启动代码);而且,拥有一个完全没有文件系统的小型特殊“启动分区”也很简单。