x86 マシンでブートローダーに取り組んでいます。
BIOS が MBR の内容を 0x7c00 にコピーし、そのアドレスにジャンプする場合、レジスタの内容に標準的な意味はありますか? レジスターには標準値がありますか?
セグメント レジスタは通常 0 に設定されていますが、0x7c0 になることもあります。他のハードウェアレジスタはどうですか?
この初期実行環境は高度に実装定義されています。つまり、特定の BIOS の実装です。レジスタの内容については、絶対に仮定しないでください。それらは 0 に初期化される場合がありますが、同様にランダムな値が含まれる場合もあります。
おもちゃの OS で遊んでいるときに情報を入手できるOS dev Wikiから
明確に定義されていることがわかっている唯一のことは、リセット直後のプロセッサの状態です。
記録としては、インテルのソフトウェア開発者マニュアルVol 3 の第 8 章「プロセッサーの管理と初期化」の「電源投入、リセット、または INIT 後の IA-32 プロセッサーの状態」というタイトルの表に記載されています。
常に未定義であると想定してください。そうしないと、アーキテクチャを移植しようとすると、悪い問題が発生します。
初期化されていないものはすべてゼロに設定されると想定するコードの移植の苦痛に勝るものはありません。
最善の選択肢は、何も仮定しないことです。それらに意味がある場合、それらが提供する情報が必要なときに、反対側からそれを見つけることができます。
未定義だと思いますか?それはメインボードと CPU に依存すると思います。
いつでも自分で初期化して、既知の状態から開始できます。
最も安全な方法は、未定義と仮定することです。