1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

未経験が読む「コンピュータシステムの理論と実装」#4

Posted at

はじめに

本記事は「コンピュータシステムの理論と実装」の勉強会の記録第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を例に話します。

  1. 編集するのは.asmファイル
    今まで通りprojects>04>multに編集するファイルがあります。
    今回編集するのはmult.asmなので、エディターでmult.asmを編集します。
    私は試しに4.2.1末尾のコードを模写しました。

  2. CPUエミュレータで開き、実行する
    このとき、AnimateオプションをProgram & data flowにしてみてください。
    オプションの位置↓
    スクリーンショット 2022-08-24 10.47.47.png

M,D,Aの動きが極めて分かりやすくなります。
nand2tetris4animate.gif

逆に、テストはNo animationにしなければ膨大な時間がかかりますので、お気をつけて。

4章実装のヒント

作る順序は本書通りMult, Fillにしました。

各プログラムのヒント

※以下に答えは載せていません。あくまでヒントです。
※テストはNo animationにしなければ膨大な時間がかかりますので、お気をつけて。(2回目)

Mult
とにかくM,D,Aの動きを理解すること。それに尽きます。 Animateで動きをよく見て書いていくといいと思います。
Fill
チュートリアルや5章のプログラムを参考にしました。
慣れないwhile文を書くことと、M,D,Aを使いこなすことが鍵です。
"スクリーンの該当位置を真っ黒にするためには、メモリにどんな値を入れれば良いか"を知っておく必要があります。
答え
-1
「黒くなるのにテストは通らない」という方へのヒント
もしかして:ずっと黒のままではないですか?

感想

低水準言語でのプログラミングは非常に時間がかかりました。
「Rubyならすぐなのに!」というもどかしさがありましたが、今自分が作っているコンピュータがどう動くのかを見られたのは非常におもしろかったです。

私事ですが、9月からエンジニアに転職することとなり、更新頻度は下がると思いますが、
どうぞよろしくお願いいたします。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?