Assembly BIOS参数块和磁盘格式化

Assembly BIOS参数块和磁盘格式化,assembly,bootloader,bootstrapping,Assembly,Bootloader,Bootstrapping,我自己写了一个简单的引导程序。一、 首先,有3行典型的初始代码 bits 16 org 0x7c00 jmp main 然后是FAT 12和1.44MB软盘的BIOS参数块,最大偏移量为字节0x003D。假设主引导加载程序为简单起见正在打印“Hello World” 当我使用 PARTCOPY 0 200 -f0 0 PARTCOPY 0 3 -f0 0 PARTCOPY 3E 1C2 -f0 3E ; Do not copy BIOS Parameter

我自己写了一个简单的引导程序。一、 首先,有3行典型的初始代码

bits   16
org    0x7c00
jmp    main
然后是FAT 12和1.44MB软盘的BIOS参数块,最大偏移量为字节0x003D。假设主引导加载程序为简单起见正在打印“Hello World”

当我使用

PARTCOPY 0 200 -f0 0
PARTCOPY  0  3  -f0  0
PARTCOPY 3E 1C2 -f0 3E       ; Do not copy BIOS Parameter Block
它使我的磁盘失去其格式,在Windows上触发“磁盘未格式化”消息

另一方面,如果我使用

PARTCOPY 0 200 -f0 0
PARTCOPY  0  3  -f0  0
PARTCOPY 3E 1C2 -f0 3E       ; Do not copy BIOS Parameter Block
Windows不会抱怨格式问题

有了这些不同的结果,我想知道BPB是如何影响格式化和/或分区表的。我提到了分区表,因为我得到一个建议,在复制引导扇区后,我需要分区表来解决“磁盘未格式化”问题

如有任何帮助或意见,将不胜感激


诚恳地说,

听起来您可能缺少一个,这应该放在设备的第一个物理扇区中,并由bios执行,它应该将控制权转移到引导加载程序。虽然为了公平起见,如果您将引导加载程序放在FAT分区中,您可能只需离开将通过格式化驱动器创建的MBR,并将代码直接复制到活动FAT分区的位置,而不是直接复制到驱动器的开头


微软对FAT设备上的引导过程也有很好的解释,这可能会有所帮助。

Windows对引导扇区进行了大量检查,并且对它认为有效的引导扇区过于挑剔。如果您保留FAT12格式软盘的前62(0x3E)字节,并且没有损坏FAT,Windows不会抱怨。它不关心偏移量0x3E到0x1FD处的字节数。您也可以更改
OEM名称
卷标名称
条目。剩下的,保持原样。您的代码可以使用BPB中的值从FAT读取文件。

对于硬盘驱动器,BIOS加载主引导记录,这是硬盘驱动器的第一个扇区。然后,MBR根据分区表加载引导扇区。(感谢你的链接)鉴于这些信息,我是在写“引导加载程序”还是“主引导记录”?我很困惑…软盘上没有MBR,它只用于HDD。谢谢Alex。然后,我的主要问题仍然有效,我想:)抱歉FAT12的内容在我回答后被编辑到问题中,所以我当时不知道这是一张软盘。谢谢Alex给出的明确答案。它只是告诉我代码中没有“正确”的BPB。你知道我可以查找和学习的参考/链接吗?搜索“FAT12BPB”并没有给我太多…从格式化的软盘读取BPB字节。或者在线查找一个可启动的1.44英寸DOS/Win9x软盘映像,并从中提取BPB字节。您可能想从Microsoft尝试这一点。这几乎是FAT的目标。我知道上面写着FAT32,但也包括FAT12和FAT16的详细信息。@CharlesKeepax:great doc,true。