7

x86 マシンでブートローダーに取り組んでいます。

BIOS が MBR の内容を 0x7c00 にコピーし、そのアドレスにジャンプする場合、レジスタの内容に標準的な意味はありますか? レジスターには標準値がありますか?

セグメント レジスタは通常 0 に設定されていますが、0x7c0 になることもあります。他のハードウェアレジスタはどうですか?

4

7 に答える 7

8

この初期実行環境は高度に実装定義されています。つまり、特定の BIOS の実装です。レジスタの内容については、絶対に仮定しないでください。それらは 0 に初期化される場合がありますが、同様にランダムな値が含まれる場合もあります。

おもちゃの OS で遊んでいるときに情報を入手できるOS dev Wikiから

于 2008-08-21T16:06:07.857 に答える
1

明確に定義されていることがわかっている唯一のことは、リセット直後のプロセッサの状態です。

記録としては、インテルのソフトウェア開発者マニュアルVol 3 の第 8 章「プロセッサーの管理と初期化」の「電源投入、リセット、または INIT 後の IA-32 プロセッサーの状態」というタイトルの表に記載されています。

于 2008-08-21T17:36:57.747 に答える
1

常に未定義であると想定してください。そうしないと、アーキテクチャを移植しようとすると、悪い問題が発生します。

初期化されていないものはすべてゼロに設定されると想定するコードの移植の苦痛に勝るものはありません。

于 2008-08-21T17:40:59.563 に答える
1

最善の選択肢は、何も仮定しないことです。それらに意味がある場合、それらが提供する情報が必要なときに、反対側からそれを見つけることができます。

于 2008-08-21T15:59:22.070 に答える
1

未定義だと思いますか?それはメインボードと CPU に依存すると思います。

于 2008-08-21T15:59:25.877 に答える
1

いつでも自分で初期化して、既知の状態から開始できます。

于 2008-08-21T16:09:18.037 に答える
1

最も安全な方法は、未定義と仮定することです。

于 2008-08-21T16:14:34.840 に答える