無限遠まで突撃中

ネット日記書きの徒然。

「30日でできる!OS自作入門」を今更ながらやってみる - 1日目

やるぞやるぞOSやるぞ

github.com

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

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

メモ書きなので読みにくいかも…

まずは環境構築

ArchLinuxで行いました。Linuxユーザーならば読み替え可能です。

hikalium氏のツールを用います。以下リンク

https://hikalium.com/pages/note/20161202.html

次のようにディレクトリを配置します。

haribote/
|
|--z_tools/
|
|--mihon_harib27f/
|
|--01_day/
|
|--02_day/
|
|--...

詳細は上のリポジトリを見てほしいのですが、

  • z_toolsz_tools_linux をリネームしたもの
  • mihon_harib27f は見本用の完成ディレクト

です。

1日目

1 - とにかくやるのだぁ

バイナリエディタでがんばります…が自分はカット。以前Windows環境で挑戦したときにがんばったのでね。ゆるして

2 - 結局何をやったのだろうか?

CPUはONとOFF、つまり0と1しか認識できません。なのでCPUに読み込ませるデータも0か1でなくてはいけません。バイナリエディタは2進数編集機と訳されるわけで、前の章では直接0と1を書いてたわけなんですね。

ちなみに

  • 頭に 0x は16進数
  • 頭に 0b は2進数

であることが多いです。

3 - アセンブラ初体験

バイナリでOSを書くのはいくらなんでも大変なので、アセンブリ言語でOSを書きましょう。Wikipediaによると、アセンブリ言語とは、

アセンブリ言語アセンブリげんご、英: assembly language)とは、コンピュータ、マイクロコントローラ、その他のプログラム可能な機器を動作させるための機械語を人間にわかりやすい形で記述する、代表的な低水準言語である。なお、英語の assembly とは「組立」という意味である。

と解説がされています。
わかりやすく言うと機械語(バイナリ)と一対一対応する言語です。

さてNASKの命令が出てきたので解説です。といっても本に書いてあることをまとめただけですが…

  1. DB : ファイルの内容を1バイトだけ直接書く命令
  2. RESB : RESB 10 で10バイト分 0x00 で埋める命令

helloos.nasアセンブルの仕方ですが、 z_tools/ 内に nask というアセンブラがあるので、 01_day/ ディレクトリから

$ ../z_tools/nask helloos.nas helloos.img

アセンブルできます。

4 - もうちょっと書き直してみる

新たな命令と文法です。

  1. DW : ファイルの内容を2バイトだけ直接書く命令
  2. DD : ファイルの内容を4バイトだけ直接書く命令
  3. $ : 先頭から何バイトか示す変数

あとは本を読んでくれれば大丈夫だと思います。

今日はここまで

お疲れ様でした、明日もがんばりましょう。
2日目は こちら