はじめに
本記事は「コンピュータシステムの理論と実装」の勉強会の記録第4回となります。
3章まででハードウェアのパーツが完成し、5章でPCを完成させます。
4章ではその前準備として、低水準言語のプログラミングの理解をしていきます。
実装の部分についてはこれまでと同様、私が詰まった部分をヒントとして残していきます。
プロジェクトの準備
今回からアセンブラとCPUエミュレータを使います。
アセンブラチュートリアル
https://www.nand2tetris.org/_files/ugd/44046b_759f4f811ad14e12ac45bc60dd679fa3.pdf
CPUエミュレータチュートリアル
https://www.nand2tetris.org/_files/ugd/44046b_f63aba2611944e82974c9c5d5a3821fe.pdf
アセンブラの起動とCPUエミュレータの起動
~/Desktop/nand2tetris/tools/Assembler.sh
~/Desktop/nand2tetris/tools/CPUEmulator.sh
実装方法とアドバイス
Multを例に話します。
-
編集するのは.asmファイル
今まで通りprojects>04>multに編集するファイルがあります。
今回編集するのはmult.asmなので、エディターでmult.asmを編集します。
私は試しに4.2.1末尾のコードを模写しました。 -
CPUエミュレータで開き、実行する
このとき、AnimateオプションをProgram & data flowにしてみてください。
オプションの位置↓
逆に、テストはNo animationにしなければ膨大な時間がかかりますので、お気をつけて。
4章実装のヒント
作る順序は本書通りMult, Fillにしました。
各プログラムのヒント
※以下に答えは載せていません。あくまでヒントです。
※テストはNo animationにしなければ膨大な時間がかかりますので、お気をつけて。(2回目)
Mult
Fill
慣れないwhile文を書くことと、M,D,Aを使いこなすことが鍵です。
"スクリーンの該当位置を真っ黒にするためには、メモリにどんな値を入れれば良いか"を知っておく必要があります。
答え
「黒くなるのにテストは通らない」という方へのヒント
感想
低水準言語でのプログラミングは非常に時間がかかりました。
「Rubyならすぐなのに!」というもどかしさがありましたが、今自分が作っているコンピュータがどう動くのかを見られたのは非常におもしろかったです。
私事ですが、9月からエンジニアに転職することとなり、更新頻度は下がると思いますが、
どうぞよろしくお願いいたします。