3

从 2012 年开始实现我自己的引导扇区加载程序时,我确保将偏移量 508 和 509 处的字节归零。这些是标准 512 字节大小扇区的倒数第四和倒数第三个字节。这是我放在那里的:

    _fill 508,38,start 

    dw 0
; 2-byte magic bootsector signature
    dw 0AA55h

我现在不记得任何具体的来源,但我相信我添加了两个零字节是为了增加对某些或其他操作系统驱动程序的兼容性。在某些时候,我一定知道这可能是必要的。

翻阅文档“Microsoft Extensible Firmware Initiative - FAT32 File System Specification - FAT: General Overview of On-Disk Format - 1.03 版,2000 年 12 月 6 日”并没有得到关于字节 508 和 509 的任何信息。它在第 13 页上指出:

还有一个关于 FAT 卷的扇区 0 的重要说明。如果我们将扇区的内容视为一个字节数组,那么扇区[510] 等于 0x55,扇区[511] 等于 0xAA 一定是真的。

注意:许多 FAT 文档错误地说这个 0xAA55 签名占据了“引导扇区的最后 2 个字节”。当且仅当 BPB_BytsPerSec 为 512 时,此语句是正确的。如果 BPB_BytsPerSec 大于 512,则这些签名字节的偏移量不会改变(尽管引导扇区末尾的最后两个字节也完全可以包含此签名)。

最接近谈论字节 508 和 509 的是 FAT32 的 FSINFO 结构的描述,第 22 页:

FSI_TrailSig 508 4

值 0xAA550000。此跟踪签名用于验证这实际上是一个 FSInfo 扇区。请注意,此值的高 2 个字节(进入偏移量 510 和 511 的字节)与扇区 0 中相同偏移量处使用的签名字节匹配。

但是它没有指定整个双字应该与引导扇区中的这个签名相匹配。

现代的 FreeDOS 引导扇区加载器也确实提供了这两个字节作为零

       times   0x01f1-$+$$ db 0

filename        db      "KERNEL  SYS",0,0

sign            dw      0xAA55

“An Examining of the MSWIN4.1 OS Boot Record”页面将 MS Windows 4.x 引导扇区描述为两个字节也为零。在标题为“内存中数据和错误消息的位置”的十六进制转储中,最后一行包含这些零:

7DF0  00 57 49 4E 42 4F 4F 54 20 53 59 53 00 00 55 AA   .WINBOOT SYS..U.

这些零字节是有原因的还是只是货物崇拜的一个例子?

4

2 回答 2

2

只是查看所有 FreeDOS 内核的引导扇区加载程序的状态,我在他们的另一个文件中发现了一个特定的声明。这是在LBA FAT32 加载器中:

       times 0x01ee-$+$$ db 0

msg_BootError   db "No "
        ; currently, only "kernel.sys not found" gives a message,
        ; but read errors in data or root or fat sectors do not.

filename    db "KERNEL  SYS"

sign        dw 0, 0xAA55
        ; Win9x uses all 4 bytes as magic value here.
于 2020-09-30T21:25:52.003 回答
2

V2 引导扇区:

01F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA   ..............U.

MS-DOS 3.2 引导扇区:

01F0  00 00 00 00 00 00 00 00 00 00 00 00 00 80 55 AA   ..............U.

IBM 4.01 引导扇区:

01F0  4D 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA   M.............U.

在多年前修复该标准后,任何声称支持 FAT 的操作系统都无法更改规则。即使 Win9x 有这些额外的零,您自己开发的引导加载程序也不应该需要这些相同的零才能在任何条件下正常工作。

关于 FreeDOS 的奇特案例。他们努力成为大家的朋友,未来和过去。复制DOS错误的极端......

于 2020-10-04T21:45:05.037 回答