なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

アセンブラを再実装してOS自作入門を3日目まで進めた

すでに3日目どころか42人日ぐらいかかってるので成果報告をしておきたい。

OS自作入門とは

Windows環境で、最終的にはフロッピーディスクから起動できるOSを再実装するまでの手順とソースコードが書かれた分厚い本

なぜアセンブラを再実装?

OS自作入門ではNASM/MASMベースの独自のアセンブラが使われており、これベースでOS作成が進められている。
しかしLinux環境ではどうにもビルドできず、古いコンパイラ(gcc-3.x)でしか使えないソースが中心だったので勉強と趣味を兼ねて再実装したら面白いと思いやり始めた。

進捗


2016/06/08時点では、書籍の3日目までのアセンブラ(harib00bまで)はバイナリに変換できるようになった。
使用できるオペコード(部分的に実装しているものも含む)は以下の通り:

  • ADD
  • CMP
  • DB
  • DD
  • DW
  • HLT
  • INT
  • JAE
  • JBE
  • JC
  • JE
  • JMP
  • JNC
  • MOV
  • ORG
  • RESB
ソースコード上の工夫

std::function を積極的に使い、オペコードごとに関数オブジェクト的なものを作れるようにした
Parasol - 実行時文法定義のできる構文解析ライブラリ - を使って構文解析してみた

今後の展望 - 2016/06/08
  • 早く4日目に到達したい(切実)
  • 普通に途中でやめるかも
  • C言語の連携はintel2gasを使ってやる予定
  • FAT12を一緒に出力する処理をfatlib, dosfstoolsを使ってやるかも
  • 唐突にリフレクションが使いたくなった時のためにreflcppというライブラリを一緒にビルドしているがまだ使われる気配はない*1
進捗 - 2016/08/15
  • 早く4日目に到達したい(進捗なし)
  • intel2gasは動いてる
  • reflcppはいらないので削除
  • アセンブラ中の数値計算処理でちょっと詰まっている
  • というか時間がない
進捗 - 2016/08/30
進捗 - 2016/10/28

*1:C++はリフレクションがないのがやーねー