在实施的同时我自己的引导扇区加载程序从 2012 年开始 https://hg.ulukai.org/ecm/ldosboot/rev/17884e6352e6#l1.255我确保将偏移量 508 和 509 处的字节清零。这些是标准 512 字节大小扇区的倒数第四个和倒数第三个字节。这就是我放在那里的内容:
_fill 508,38,start
dw 0
; 2-byte magic bootsector signature
dw 0AA55h
我现在不记得任何具体的来源,但我相信我添加了两个零字节是为了提高对某些或另一个操作系统驱动程序的兼容性。在某些时候我一定知道这可能是需要的。
翻阅文档“Microsoft 可扩展固件计划 - FAT32 文件系统规范 - FAT:磁盘格式概述 - 版本 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 引导扇区加载程序确实将这两个字节提供为零 https://github.com/FDOS/kernel/blob/977023f85c701d740260ccffea373d333cce676e/boot/boot.asm#L508 too:
times 0x01f1-$+$$ db 0
filename db "KERNEL SYS",0,0
sign dw 0xAA55
这一页“一项检查
MSWIN4.1操作系统启动记录》 https://thestarman.pcministry.com/asm/mbr/MSWIN41.htm描述了 MS Windows 4.x 引导扇区的两个字节也为零。在标题为“数据位置和
内存中的错误消息”最后一行包含这些零:
7DF0 00 57 49 4E 42 4F 4F 54 20 53 59 53 00 00 55 AA .WINBOOT SYS..U.
这些零字节是否有原因,或者这都是货物崇拜的一个实例?