在研究BIOS和引导时,我发现使用0xaa55作为签名来检查512字节的引导扇区是否损坏。现在,在某些情况下,它被提到为0xaa55,在一些情况下是0x55aa。我很困惑。我也认为这是因为CPU的字节顺序。但是字符顺序不应该是单词的吗?因此,0000aa55或55aa0000 (假设是32位字)。或者是因为引导扇区本身就有16位字?
发布于 2021-09-27 04:46:43
从历史上看,PC的功能早于32位x86 CPU,而我们所知的引导过程可以追溯到16位8086。有些元素可能比这更老,但那比我的时代早了一点。
您说得对,这种混淆与endian相关。512字节引导扇区的最后一个字节是aa,它之前的字节是55。因此,通常将签名称为55aa,因为这是它在引导扇区中按字节显示的顺序。这也是它在内存中作为单个字节出现的顺序-当在0000:7c00加载引导扇区时,7dff处的字节是aa。
但是,当在小端x86上表示为16位字时,它就是aa55。由于这种顺序,通常会将块结束签名放在汇编文件中,如下所示:
.word 0xaa55 # this is AT&T syntax因为它比两个.byte指令简单,这两个指令的顺序是相反的:
.byte 0x55
.byte 0xaa所以人们有时会以这种方式提到签名。
https://stackoverflow.com/questions/69333080
复制相似问题