ぐらめぬ・ぜぷつぇんのはてダ(2007 to 2011)

2007年~2011年ごろまで はてなダイアリー に書いてた記事を引っ越してきました。

なぜx86ではMBRが"0x7C00"にロードされるのか?

MBR(Master Boot Record)からのOSロードを解説する書籍やWeb上の記事の殆どでは、「BIOSはPOST後に、MBRを0x7C00にロードしてそこにJMPする」と書いてあります。

しかし、「なぜ0x7C00なのか?0x7C00はどういう意味で、あるいは経緯で、どういう意図で、誰が決定したのか?」については(msakamoto-sf自身が調べた範囲では)誰も語ってくれません。

0x7C00は "32KB - 1024B" という「いかにも何かありげ」な場所に位置します。一方、初期のIBM PC 5150の最小メモリモデルは16KBのRAMしか搭載していません。そのため、「最小メモリモデルではMBRをロード出来ないのでは?」という疑問も出てきます。

MS-DOSのベースとなった 86-DOS(QDOS) の開発者 Tim Paterson, IBM PC 5150 の ROM BIOS を開発した David Bradley 両氏に直接メールで質問した結果、これらの謎が解明されました。

ということで、「なぜx86ではMBRが"0x7C00"にロードされるのか?」、0x7C00の持つ意味、出自、起源について以下のURLにまとめました。もし「0x7C00」について喉に刺さった魚の骨のような感触を抱いているのであれば、ぜひご一読をお奨めします。

Assembler/なぜx86ではMBRが"0x7C00"にロードされるのか?(完全版) - Glamenv-Septzen.net

English Version:Glamenv Septzen: Why BIOS loads MBR into 0x7C00 in x86 ?