30日でできる!OS自作入門 1日目

30日でできる! OS自作入門

30日でできる! OS自作入門

OS自作入門というタイトルに引かれて読み始めました。三日坊主の僕には続くか分からないですがやってみようかと思います。だいぶ前の本でフロッピーからOSを起動させるのですが、qemuというエミュレータを用いて起動させる事もしているので今のwindows機でも学習していけるのじゃないかと思います。

環境

windows 10 home 64ビットオペレーティングシステム

一日目のやること

フロッピーディスクからOSを起動させるプログラムをバイナリーエディタ(BZ)や筆者作アセンブラ言語(nask)で書く。この起動させるプログラムはコンピュータがブートセクターを読んだ時に出力される部分だけである。フロッピーは一つのセクター(512バイト)ごとに読まれ、ブートセクターとはフロッピーが最初に読まれるセクターで、最後の部分に55AAと書く決まりがある。本来ブートセクターには容量のためにOSを読み込ませるプログラムを格納できないので、IPLというOS本体を読み込むプログラムが書かれている。一日目はosを起動させたときに"hello world"を出力するプログラムをブートセクターに作成する。


機械語について

フロッピーディスクサイズ分(1440KB)機械語を書く勇気がなかったので筆者のサンプルを利用した。
下の写真はフロッピーのフォーマットや起動したときに出力されるプログラムが書かれていて、表示されている機械語は16進数である。

f:id:achax0511:20180808173534p:plain


下の写真55AAと書かれている1F0(16進数)行目がブートセクターの終わりである。
f:id:achax0511:20180808175159p:plain


下の写真はqemuで先ほど書いた機械語をエミュレートした結果である。"hello,world"と出力できた。2004年って14年前か・・・
f:id:achax0511:20180808182659p:plain


アセンブラについて

サンプルで出てくる命令のメモについて書く。

  • 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でエミュレートした。
f:id:achax0511:20180808185815j:plain

感想

機械語で書くのは大変だからアセンブラで書くと楽だよということが分かった。よくわからない状態だがなんとか一日目が終わった、続けたいな。