Nand2Tetrisもくもく昨日の続き。3章まででALUやRAMが揃ったので、一気にコンピュータを組み上げたいところですが、一旦作業は中断して、完成形のサンプルを見ていきます。
コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方
そもそもどんなものを作りたいのか、イメージしないとダメですよね。
用語のメモ
機械語
ハードウェアが直接解釈できる言葉。どのピンに1/0を送るか、をまとめたもの。
機械語はハードウェアが解釈してくれるものなので、逆にハードウェアからすれば、この機械語の仕様を決定して、それを満たすように作ればいい、ということになります。
アセンブリ言語
機械語は人間の目には読みにくいので、1対1で意味のわかりやすい単語(ニーモニック)に置き換えて書きます。これをアセンブリ言語(Assembly)といいます。 ハードウェアの用意した機械語によってアセンブリ言語は異なります。 Nand2Tetrisでは"Hack言語"という独自仕様のアセンブリを使います。
アセンブラ
アセンブリ言語を解釈して、機械語を生成するソフトウェアのこと。コンパイラの一種ということでいいのかな。
実習
これから作るマシンが解釈できるHack言語の仕様を理解し、適当なお題に合わせてアセンブリでプログラムを書いていきます。
本来であればまだアセンブラやそれを解釈できるコンピュータは存在しない(これから作ろうとしてる)のですが、この章では予め用意されているアセンブラやCPUエミュレータを使って良いことになっています。
ループ文もif文もないので、ひたすらGOTO相当のジャンプ命令でロジックを作っていく形になります。しかも変数も好き勝手に作れなくて、計算に使いたかったら特定のレジスタに値を格納しないといけない。
めっちゃつらい。でも頑張って完成したよ。
nand2tetris-memo/04 at master ・ hirak/nand2tetris-memo
「原始的なアセンブリでは変数に型がない」という話は前に聞いたことがありましたが、本当になかったよ。。
この言語でテトリスを作るのは相当大変そうです。目次を見た感じだと、高級言語も作るようですが、いつになることやら。
これまでのまとめ
5章でハードウェアが完成して、一区切りになるんですが、ちょっとシルバーウィークでは間に合いませんでした。
続きはじわじわ進めていきたいです。