从 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.
这些零字节是有原因的还是只是货物崇拜的一个例子?