イカなる時も

なんか色々垂れ流してます

2023/07/30

ちょこちょこ時間を見つけて自作エミュレータで学ぶx86アーキテクチャという本を読んだ。可愛い女の子の絵が表紙に書いているやつ。 最初は本を読みつつコードをRustで実装していた。が、一旦知識を頭に入れたい欲求が湧き、一通り読んだ。インタプリタ的に頭から一行ずつ読んだわけではなくて、わからないところは適宜ググったり、頭の中で整理しづらいところは何回か読み直した。文章が読みづらいとかそういう話ではなく、単に自分のCS知識不足。解説は非常に丁寧で、プログラムが動くまでなんとなく知りたいけど何から手をつけて良いかわからない人にはおすすめしたい本だと思った。ただ、全くプログラミング初心者の人はちょっとハードル高いかもしれない。C言語で簡単なプログラムを書いてコンパイル、実行できる人じゃないと難しいかもしれない。

あと、自分がこの本を読んで完全に理解したかと言うとそうではないので以下の感想は全然間違っている気がする。後半の部分は、リアルモードで動作するx64命令セットの仕様の話が結構出てきて適当に読み飛ばした。 この本がカバーしているところは、実行ファイルを読み込みCPUの動作を仮想的に模倣してプログラムを実行するところまで。仮想的に模倣っていうところがわかりにくいが、要はCPUの基本動作?である機械語のフェッチ、デコード、エグゼクをC言語で実装するということ。なんかぱっと見難しそうに感じるが、難しいところは良い感じに省いてくれているので知識がなくても理解できると思う。例えば命令のパイプライン化とかCPUの高速化技術とかはこの本には出てこない。あと、数値の加算などはC言語の+をそのまま使う、つまり自分でその部分を実装しない。この本には出てこない部分は適宜文献や本を示してくれているので興味がある人はそれを見れば良いと思う。特にCPUがどうやって動いているかみたいな部分は、CPUの創り方というこれまた美少女が表紙の本が載せられている。ちなみに自分はこの本を読む前にCPUの創り方は読んでいた。CPU以外にも電子工作、電気回路についてかなりページを割いていてそこにも興味がある人はすごく良いんじゃないかと思う。

あとは、自分はI/O処理についてエミュレータでどうするのか非常に興味があったのだが、そこもちゃんと説明されていてよかった。実装自体は標準出力に文字列を出力する程度だが、他に色々自分でやりたかったら自力で調べられる程度の知識を得られた。ここら辺はあまり理解していないが、どうやらレガシーっぽいのだがまあ面白いのでヨシ! あと、ブートローダもわかりやすく解説されていて非常に良かった。エミュレータの実装としてはそこまで本筋の話ではないのかなと感じたが、普通に面白かった。MBRとか知っていたけど動作イメージが全くわからなかったが、読んである程度理解できた気がする。

前の記事から1週間も空いていてびっくりした。