30日でできる!OS自作入門 1日目
- 作者: 川合秀実
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2006/03/01
- メディア: 単行本
- 購入: 36人 クリック: 735回
- この商品を含むブログ (299件) を見る
環境
windows 10 home 64ビットオペレーティングシステム一日目のやること
フロッピーディスクからOSを起動させるプログラムをバイナリーエディタ(BZ)や筆者作アセンブラ言語(nask)で書く。この起動させるプログラムはコンピュータがブートセクターを読んだ時に出力される部分だけである。フロッピーは一つのセクター(512バイト)ごとに読まれ、ブートセクターとはフロッピーが最初に読まれるセクターで、最後の部分に55AAと書く決まりがある。本来ブートセクターには容量のためにOSを読み込ませるプログラムを格納できないので、IPLというOS本体を読み込むプログラムが書かれている。一日目はosを起動させたときに"hello world"を出力するプログラムをブートセクターに作成する。機械語について
フロッピーディスクサイズ分(1440KB)機械語を書く勇気がなかったので筆者のサンプルを利用した。下の写真はフロッピーのフォーマットや起動したときに出力されるプログラムが書かれていて、表示されている機械語は16進数である。
下の写真55AAと書かれている1F0(16進数)行目がブートセクターの終わりである。
下の写真はqemuで先ほど書いた機械語をエミュレートした結果である。"hello,world"と出力できた。2004年って14年前か・・・
アセンブラについて
サンプルで出てくる命令のメモについて書く。- DB(data byte)命令は機械語の命令を一バイトずつ書くのや文字列を書くことができる。
- RESB(reserve byte)命令は領域を予約する命令で0x00を連続して沢山書く場合に省略して書くのができる。
- DW(data word)命令はDB命令の仲間でwordは2バイトを表している。何を2バイト書くのか分からないが
- DD(data double-word)命令はDB命令の仲間でdouble-wordは4バイトを表している。
DB命令のところをいじってhello worldを変えてqemuでエミュレートした。