8

インターネットのどこかで、0x7c00にジャンプする前に、BIOSが起動したデバイスの「ドライブ番号」を%dlにロードすることを読みました。しかし、この「ドライブ番号」は何ですか?コンピュータに接続されている各デバイスには、BIOSによって番号が割り当てられていますか?もしそうなら、どの番号が特定のデバイスに割り当てられているかをどのように知ることができますか?

%dlにビット0x80と0x70が設定されているときに見つけたGRUBのソースコードを読み取ると、レジスタ全体が0x80で上書きされます。何故ですか?コードは次のとおりです。

jmp 3f      /* grub-setup may overwrite this jump */
testb $0x80, %dl
jz 2f
3:
/* Ignore %dl different from 0-0x0f and 0x80-0x8f.  */
testb $0x70, %dl
jz 1f
2:     
movb $0x80, %dl
1:

ところで。WebでのPCの起動プロセスに関する詳細なリソースはありますか?特に、ブートローダーに制御を与える前にBIOSが行うことと、BIOSとの通信に使用される標準コード(「ドライブ番号」など)について。私は自分のブートローダーを作成したいと思っていましたが、見つけたものはすべて少し曖昧すぎて、ブートローダーが実行を開始したときにコンピューターの正確な状態を通知するほど技術的ではありません。

4

1 に答える 1

3

BIOS int 13h 関数はドライブ番号を受け入れます。それは、BIOS が理解できる のようなドライブ番号であるはずですDL。これは、それ自体が int 13h を使用してブート セクタをロードするためです。

于 2012-06-24T03:11:58.413 に答える