从2012年开始实现自己的引导扇区加载程序时,我确保将偏移508和509处的字节归零。这些是标准512字节大小扇区的倒数第四个字节和倒数第三个字节。这就是我放在那里的:
_fill 508,38,start
dw 0
; 2-byte magic bootsector signature
dw 0AA55h
我现在不记得有任何具体的来源,但我相信我添加了两个零字节是为了增加与某些或其他操作系统驱动程序的兼容性。在某种程度上,我一定了解到这可能是必要的。
在文档中分页";微软可扩展固件倡议-FAT32文件系统规范-FAT:磁盘格式概述-版本1.032000年12月6日";没有产生任何关于字节508和509的信息。在第13页,它指出:
还有一个关于FAT卷的扇区0的重要注意事项。如果我们考虑扇区作为字节数组,扇区[510]等于0x55,扇区[511]等于0xAA必须是真的。
注意:许多FAT文件错误地说这个0xAA55签名占用了";最后2个字节"引导扇区的";。当且仅当BPB_BytsPerSec为512时,此语句才正确。如果BPB_BytsPerSec大于512,则这些签名字节的偏移量不会改变(尽管引导扇区末尾的最后两个字节也包含此签名(。
最接近于谈论字节508和509的是在第22页上对FAT32的FSINFO结构的描述:
FSI_TrailSig 508 4
值0xAA550000。该跟踪签名用于验证这实际上是一个FSInfo扇区。请注意,此的高2字节值(进入偏移510和511处的字节(与在扇区0中以相同偏移量使用的签名字节。
但它没有指定整个双字应与引导扇区中的此签名匹配。
现代的FreeDOS引导扇区加载程序也将这两个字节作为零提供:
times 0x01f1-$+$$ db 0
filename db "KERNEL SYS",0,0
sign dw 0xAA55
页面";对MSWIN4.1 OS引导记录";将MS Windows 4.x引导扇区描述为两个字节也为零。在标题为";数据位置和存储器中的错误消息";最后一行包含这些零:
7DF0 00 57 49 4E 42 4F 4F 54 20 53 59 53 00 00 55 AA .WINBOOT SYS..U.
这些零字节是有原因的吗?还是这都是货运狂热的一个例子?
在查看所有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.
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错误的极端。。。