2011-07-22 9 views
3

もう一度私は簡単にgooglableではない質問があります。 BIOSが指定されたデバイスからブートローダーをロードしたと仮定しましょう。どのデバイスを使用しているのかを今どのように調べて、残りのOSをRAMにロードできますか?起動デバイスを特定する方法

答えて

2

それはMBR bootstrapなら(そうでない場合も、おそらく、私は100%わからない?)あなたはこの(ように独自のメモリレイアウトを代用して)のような何かを行うことができます。すなわちDLが ドライブ番号が含まれています:

EntryPoint: 
    xor ax, ax 
    mov ss, ax 
    mov ds, ax 
    mov sp, 0x7c00 
.DiskReset: 
    mov ah, 0 
    int 0x13 
    jc .DiskReset 
    mov ax, 0x50 ; load to 0x500 linear address. It has unused space up to 0x7bff 
    mov es, ax 
    xor bx, bx 
    mov ax, 0x023B ; count = 0x3b = 59, the maximum.. 
    mov cx, 0x0002 
    xor dh, dh ; leave (dl = drive number) intact 
    int 0x13 
    jnc .ReadDone 
    mov si, ReadError 
    call PrintString16 
    jmp .DiskReset 
.ReadDone: 
    ; ...... 
+0

thx私は決してそれがDLの価値が何を意味しているのか分からなかった。 – Pyjong

0

There's actually a whole protocol between the firmware and the bootstrap program in sector #0.しかし、わかりますように、ほとんどのドキュメントは標準ドキュメントのページにのみ存在し、実際には存在しません。実際には、古いPC/ATおよびPC98の方法でブートするときには、ファームウェアドライブ番号にDLを使用し、BIOS Parameter Blockの「隠されたセクタ」フィールドを使用する(または、あまり好ましくはないが、ドライブ内のボリュームの位置を特定するために使用します。

新しい(x86 PCの世界に)少なくとも、ブートストラップがあれば、もちろんthings are a lot differentです。オペレーティングシステムのブートローダは、ブートマネージャメニューのエントリであり、ブートマネージャのメニューエントリにはパラメータシステムがあり、実行時にブートマネージャによってローダプログラムに渡されます。パラメータの1つは、オペレーティングシステムのブートローダがオペレーティングシステムファイルを見つけるために使用するブートボリュームの場所です。これは、Windows NTが長い間実績を上げてきた理由です。

関連する問題