私は2つのシナリオで0x55AAが発生した:0x55AAの特典は何ですか?
- ブートセクタの最後の2バイトレガシーブートプロセスでは
0x55AA
が含まれています。 - Option ROMの最初の2つのバイトは
0x55AA
でなければならないので、何が0x55AA
について特別なの?
0x55AA
のバイナリバージョンは0101010110101010
です。それは0と1が均等にインターリーブされているからですか?しかし、私はそれが強い基準であるとは思わない。
私は2つのシナリオで0x55AAが発生した:0x55AAの特典は何ですか?
0x55AA
が含まれています。0x55AA
でなければならないので、何が0x55AA
について特別なの?
0x55AA
のバイナリバージョンは0101010110101010
です。それは0と1が均等にインターリーブされているからですか?しかし、私はそれが強い基準であるとは思わない。
この組み合わせについては、魔法も神秘もありません。実装者は、デバイスの最初のセクタがブート可能(ブートシグネチャ)であるかどうかを判断する手段が必要であり、セクタの最後の2バイトに発生する組み合わせがそう簡単でない理由が選択された理由です。
同様に、このようなセグメント境界上にある必要がある_SM_
署名のBIOSをスキャンするとSMBIOSエントリポイントが見つかります。
Find_SMBIOS:
push ds
push bx ; Preserve essential
push si
; Establish DS:BX to point to base of BIOS code
mov ax, 0xf000
mov ds, ax ; Segment where table lives
xor bx, bx ; Initial pointer
mov eax, '_SM_' ; Scan buffer for this signature
; Loop has maximum of 4096 interations. As table is probably at top of buffer, cycling
; though it backwards saves time. In my test bed, BOCH's 2.6.5 BIOS-bochs-latest it was
; 1,451 interations.
.L0: sub bx, 16 ; Bump pointer to previous segment
jnz .J0
; Return NULL in AX and set CF. Either AX or flag can be tested on return.
mov ax, bx
stc
jmp .Done
; Did we find signature at this page
.J0: cmp [bx], eax
jnz .L0 ; NZ, keep looking
; Calculate checksum to verify position
mov cx, 15
mov ax, cx
mov si, bx ; DS:SI = Table entry point
; Compute checksum on next 15 bytes
.L1: lodsb
add ah, al
loop .L1
or ah, ah
jnz .L0 ; Invalid, try to find another occurence
; As entry point is page aligned, we can do this to determine segment.
shr bx, 4
mov ax, ds
add ax, bx
clc ; NC, found signature
.Done:
pop si
pop bx ; Restore essential
pop ds
ret
このシグネチャは、16進ダンプで容易に識別でき、16ビットレジスタに収まります。これらの2つの基準が要因を沈静化させる場合、わかりませんが、0x5f4d535fの確率は16バイトの偶数境界に現れる可能性はほとんどありません。
0x55AAは「署名語」です。これは、512バイトのブートレコードの最後の2バイトの "end of sector"マーカーとして使用されます。これにはMBRとその拡張ブートレコードが含まれ、新しいGPTでは保護MBRが含まれます。
参考文献:Master Boot Record - microsoft.comから
画像。
シグネチャが実際に0xAA55であるか、2バイトであることを指摘する必要があります。0x55 0xAA –
[IBM PCでブートシグネチャとして55 AAが使用されるのはなぜですか?](http://stackoverflow.com/questions/11075003/why-55-aa-is-used-as-the-boot- signature-on-ibm-pcs) – Downvoter
実際には、リトルエンディアンシステムではバイト0x55 0xAAとして格納される16ビットワードとして0xAA55です。 –
これは、真実の値を返すために必要な、CPAN上にある多くのperlモジュールの戻り値としても使用されます。 http://returnvalues.userperl.at/values.htmlを参照してください。 – Aaron