BIOS参数块和磁盘格式化

时间:2012-02-02 21:50:21

标签: assembly bootloader bootstrapping

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

bits   16
org    0x7c00
jmp    main

然后是FAT 12的BIOS参数块和1.44MB软盘,最多为偏移字节0x003D。假设主要的引导加载程序是为了简单起见打印“Hello World”。

使用

复制启动加载程序时
PARTCOPY 0 200 -f0 0

它使我的磁盘丢失其格式,在Windows上触发“磁盘未格式化”消息。

另一方面,如果我使用

复制我的引导加载程序
PARTCOPY  0  3  -f0  0
PARTCOPY 3E 1C2 -f0 3E       ; Do not copy BIOS Parameter Block

Windows不会抱怨格式化。

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

任何帮助或评论都将不胜感激。

此致

2 个答案:

答案 0 :(得分:2)

Windows对引导扇区执行了大量检查,并且在它认为有效的引导扇区中有点过于挑剔。如果您保留FAT12格式化软盘的前62个(0x3E)字节并且不破坏FAT,Windows将不会抱怨。它不关心偏移量0x3E到0x1FD的字节数。您也可以更改OEM namevolume label name条目。其余的,只是保持原样。您的代码可以使用BPB中的值从FAT中读取文件。

答案 1 :(得分:0)

听起来你可能错过了Master Boot Record,这应该放在设备的第一个物理扇区中并由BIOS执行,它应该将控制转移到你的引导加载程序。虽然如果你将引导装载程序放在FAT分区中,你可以放弃通过格式化驱动器创建的MBR并将代码直接复制到活动FAT分区的位置,而不是直接将其复制到开始驱动。

微软还对FAT设备here上的启动过程进行了很好的解释,这可能有所帮助。