Bug*_*219 5 linux operating-system
当我研究 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。
然而,当在小端 x86 上表示为 16 位字时,它是aa55. 由于这种顺序,通常将块结束签名放入汇编文件中,如下所示:
.word 0xaa55 # this is AT&T syntax
Run Code Online (Sandbox Code Playgroud)
因为它比两个.byte指令更简单,这两个指令的顺序相反:
.byte 0x55
.byte 0xaa
Run Code Online (Sandbox Code Playgroud)
所以人们有时会以这种方式引用签名。