質問

私は x86 マシンでブートローダーを開発しています。

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

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

役に立ちましたか?

解決

この初期の実行環境は高度に実装定義されており、特定の BIOS の実装を意味します。レジスタの内容については決して推測しないでください。0 に初期化される場合もありますが、ランダムな値が含まれる場合もあります。

から OS開発Wiki, 、おもちゃの OS で遊んでいるときに情報を得る場所です。

他のヒント

最善の選択肢は、何も想定しないことです。それらに意味があるのであれば、それらが提供する情報が必要なときに、反対側からそれがわかるでしょう。

未定義ですよね?それはメインボードとCPUに依存するので、自分自身のためにランダムとして扱うべきだと思います。

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

常に未定義であることを想定してください。そうしないと、アーキテクチャを移植しようとしたときに深刻な問題に遭遇することになります。

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

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

記録のために、あなたは見つけることができます それインテルのソフトウェア開発者マニュアル 第 3 巻第 8 章:「電源投入、リセット、または初期化後の IA-32 プロセッサの状態」という表の「プロセッサの管理と初期化」

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top