引导扇区的最终签名是什么?是 0xaa55 还是 0x55aa?
What is the final signature in the boot sector? Is it 0xaa55 or 0x55aa?
我在研究BIOS和引导时发现0xaa55被用作检查512字节引导扇区是否损坏的签名。现在在某些情况下,它被称为 0xaa55 和一些 0x55aa。我很迷惑。我还认为这是因为 CPU 的字节顺序。但是字节顺序不应该是这个词。因此 0000aa55 或 55aa0000(假设是 32 位字)。还是引导扇区本来就有 16 位字?
从历史上看,PC BIOS 的功能早于 32 位 x86 CPU,而我们所知道的启动过程可以追溯到 16 位 8086。有些元素可能比这更早,但那比我的早一点时间。
你说得对,混淆与字节序有关。 512 字节引导扇区的最后一个字节是 aa
,它之前的字节是 55
。因此,通常将签名称为 55aa
,因为这是它在引导扇区中按字节显示的顺序。这也是它作为单个字节出现在内存中的顺序 - 当引导扇区加载到 0000:7c00
时,7dff
处的字节是 aa
.
然而,当在 little-endian x86 上表示为 16 位字时,它是 aa55
。由于该顺序,通常将块结束签名放在这样的程序集文件中:
.word 0xaa55 # this is AT&T syntax
因为它比两个 .byte
指令简单,后者的顺序相反:
.byte 0x55
.byte 0xaa
所以人们有时会以这种方式引用签名。
我在研究BIOS和引导时发现0xaa55被用作检查512字节引导扇区是否损坏的签名。现在在某些情况下,它被称为 0xaa55 和一些 0x55aa。我很迷惑。我还认为这是因为 CPU 的字节顺序。但是字节顺序不应该是这个词。因此 0000aa55 或 55aa0000(假设是 32 位字)。还是引导扇区本来就有 16 位字?
从历史上看,PC BIOS 的功能早于 32 位 x86 CPU,而我们所知道的启动过程可以追溯到 16 位 8086。有些元素可能比这更早,但那比我的早一点时间。
你说得对,混淆与字节序有关。 512 字节引导扇区的最后一个字节是 aa
,它之前的字节是 55
。因此,通常将签名称为 55aa
,因为这是它在引导扇区中按字节显示的顺序。这也是它作为单个字节出现在内存中的顺序 - 当引导扇区加载到 0000:7c00
时,7dff
处的字节是 aa
.
然而,当在 little-endian x86 上表示为 16 位字时,它是 aa55
。由于该顺序,通常将块结束签名放在这样的程序集文件中:
.word 0xaa55 # this is AT&T syntax
因为它比两个 .byte
指令简单,后者的顺序相反:
.byte 0x55
.byte 0xaa
所以人们有时会以这种方式引用签名。