2016-10-11 3 views
1

私は2つのシナリオで0x55AAが発生した:0x55AAの特典は何ですか?

  • ブートセクタの最後の2バイトレガシーブートプロセスでは0x55AAが含まれています。
  • Option ROMの最初の2つのバイトは0x55AA

でなければならないので、何が0x55AAについて特別なの?

0x55AAのバイナリバージョンは0101010110101010です。それは0と1が均等にインターリーブされているからですか?しかし、私はそれが強い基準であるとは思わない。

+1

[IBM PCでブートシグネチャとして55 AAが使用されるのはなぜですか?](http://stackoverflow.com/questions/11075003/why-55-aa-is-used-as-the-boot- signature-on-ibm-pcs) – Downvoter

+0

実際には、リトルエンディアンシステムではバイト0x55 0xAAとして格納される16ビットワードとして0xAA55です。 –

+0

これは、真実の値を返すために必要な、CPAN上にある多くのperlモジュールの戻り値としても使用されます。 http://returnvalues.userperl.at/values.htmlを参照してください。 – Aaron

答えて

0

この組み合わせについては、魔法も神秘もありません。実装者は、デバイスの最初のセクタがブート可能(ブートシグネチャ)であるかどうかを判断する手段が必要であり、セクタの最後の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バイトの偶数境界に現れる可能性はほとんどありません。

1

0x55AAは「署名語」です。これは、512バイトのブートレコードの最後の2バイトの "end of sector"マーカーとして使用されます。これにはMBRとその拡張ブートレコードが含まれ、新しいGPTでは保護MBRが含まれます。

参考文献:Master Boot Record - microsoft.comから

Starting and Ending Cylinder, Head, and Sector Fields

画像。

How Basic Disks and Volumes Work - microsoft.com

+1

シグネチャが実際に0xAA55であるか、2バイトであることを指摘する必要があります。0x55 0xAA –

関連する問題