OS自作 1日目


はじめに

「作って理解するOS」を進める際の自分用のメモ。
本書の前半の内容はプログラムを作りながら適宜参照する。

環境設定

本にあるようにディレクトリの設定とqemuのダウンロード、バッチファイルの生成を行った。
とりあえずqemuが起動した。

アセンブラの復習

アセンブリ言語で関数の呼び出し、メモリのコピーと比較を行うプログラムを作成した。
・関数を呼び出す前に引数がスタックにpushされる
・引数や定数へのアクセスはbpからの差分で行う

何もしないブートプログラムの作成

無限ループするだけのブートプログラムを作成する
・ブートプログラムとは
 ・起動時にBIOSによって読み込まれるプログラム
 ・必要なプログラムをROMからメモリに順次ロードする
 ・指定されたROMの先頭512バイトがメモリの0x7C00番地にロードされる
・ブートプログラムは末尾の2バイトが0x55,0xAAである必要がある

BIOSパラメータブロックの領域を確保

・512バイトの中には外部記憶の属性などのデータを保持する領域(BPB)がある
 ・プログラム(IPL)はBPBの後ろにあるのでブートプログラムの一行目はIPLへのジャンプ
・今回は90バイトをBPB用に確保する
 ・90バイト分はNOP(何もしない命令:0x90)で埋める

boot.s
entry:
    jmp ipl
    times 90 - ($- $$) db 0x90

ipl:
    jmp $     ;無限ループ