【问题标题】:BIOS Parameter Block and disk formattingBIOS 参数块和磁盘格式化
【发布时间】:2012-02-25 14:11:30
【问题描述】:

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

bits   16
org    0x7c00
jmp    main

后面是 FAT 12 和 1.44MB 软盘的 BIOS 参数块,直到偏移字节 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 如何影响格式化和/或分区表。我提到了分区表,因为我得到一个建议,我需要有分区表来解决复制引导扇区后的“磁盘未格式化”问题。

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

此致,

【问题讨论】:

    标签: assembly bootloader bootstrapping


    【解决方案1】:

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

    【讨论】:

    • 感谢 Alex 的明确回答。它只是告诉我我的代码中没有“正确”的 BPB。您知道我可以查找和学习的任何参考/链接吗?搜索“FAT12 BPB”并没有给我太多...
    • 从格式化的软盘中读取 BPB 字节。或者在线查找可启动的 1.44" DOS/Win9x 软盘映像,然后从那里提取 BPB 字节。
    • 你可能想试试这个来自微软的document,它几乎是 FAT 的选择。我知道它说的是 FAT32,但它也包含 FAT12 和 FAT16 的详细信息。
    • @CharlesKeepax:很棒的文档,真的。
    【解决方案2】:

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

    Microsoft 还对 FAT 设备 here 上的引导过程进行了很好的解释,这可能会有所帮助。

    【讨论】:

    • 对于硬盘驱动器,BIOS 加载 Master Boot Record,它是 HDD 的第一个扇区。然后,MBR 根据分区表加载引导扇区。 (感谢您的链接)鉴于这些信息,我是在写“引导加载程序”还是“主引导记录”?我很困惑......
    • 软盘上没有 MBR,它只用于 HDD。
    • 谢谢亚历克斯。然后,我想我的主要问题仍然有效:)
    • 抱歉,FAT12 的内容在我回答后被编辑到问题中,所以当时我不知道这是一张软盘。
    猜你喜欢
    • 2016-11-03
    • 1970-01-01
    • 2015-07-02
    • 2012-06-10
    • 1970-01-01
    • 2013-02-19
    • 2014-07-23
    • 2013-10-01
    • 2014-11-29
    相关资源
    最近更新 更多