まつたろうの歩み

PythonやCの勉強中に「指し示す」いう表現がありました。それを知りたくて今はコンピュータシステムを勉強しています。

コンピュータシステムの理論と実装。第6章アセンブラー Lタイプがやっとできました。

 4ヶ月かかって、やっと L タイプの asmファイルを hack ファイルにアセンブリするプログラムができました。初学者の私はパイソンの入門書の勉強程度で、まとまったプログラムを考えて書いたりしたことはありませんでした。遠い道のりでした。その歩みを振り返ります。下が完成した PongL プログラムを実行しているところです。

PongL がやっと動いた!

 3日前、他の Add ・ MaxL ・ RectL はできていました。

RectL 実行中

 最後の課題、PongL に取りかかりましたがすぐにはできません。PongL は2万7千行くらいあるので、C命令を探すだけでも4時間くらいかかりました。一旦は読み込みが終わったかのように見えましたが、確認すると6千行くらいのところで止まっていました。(下の画像)C命令の ( AD=A+1 )を事前定義の辞書にいれていませんでした。付け加えて再挑戦すると、今度はすべての行を読み込み変換しました。それでもシミュレーターで実行してみると、すぐにエラーが出て止まります。

 Excel(久しぶりに使いました) にテキストファイルを読み込んで、ソースファイルと作ったプログラムを比較検討しました。フィルターを使い絞り込み10進数と2進数に置き換え、1つずつ確認しました。

エクセルで検討中

 今朝はすべての命令コードを見直し、1カ所の数字の誤り(C命令の M=D&M の変換ミス)を見つけました。修正したら、最初の画像の通り動作しました。「やったー!」と一人ガッツポーズをとりました。4ヶ月の苦労が結実しました。

 壁当てゲームのようなものですが、3万行近くのコードからなっています。良くこんなの作れたなあ、と感心します。

どこが悪いのだろう?

 すでに紹介していますが、5月からPythonの復習、様々なインタープリターやアセンブラーの研究をしました。グーグル翻訳さんにはお世話になりっぱなしです。下はEdge で音声読み上げをしながら、グーグル翻訳で確認しているところです。

翻訳作業中

 下は Lex を使ってトークン化できたところです。

Lexを使ってトークン化。

 Lex の他にも、 PLY やパイソンライブラリーのトークナイザーを試してみました。それらを実行してみると、トークンを作成するだけで5分ほどかかりました。その後、それらを抽象構文木にするようなプログラムを追加すると相当な時間がかかりそうです。それらの勉強もさらにしなければいけません。

 そこで、これまで学習してきた事を軸にプログラムを自己流で作成することにしました。著者が参考までに説明してくれていたものをザックリ削って、自分で考えられる最小限のプログラムにしました。たくさんのwebページで、先達の皆さんに教えていただきました。ありがとうございました。こんな難しいことを本だけで、一人で乗り越えるのは無理です。インターネットの有り難さを感じます。

 下はシンボルテーブルです。私が記述したようなものをシンボルテーブルと呼ぶのかどうかはっきりしませんが、リストのリストで作りました。

我流の(シンボルテーブル?)ができた。

 著者は2回のパースと書いておられましたが、コメントや空白を削除するだけでも1回 for 文ループを行います。それからROMのための行番号を入れたりなど、何回もループさせています。これ以上減らすことは、できませんでした。それでも全体で5分程度で終わるようになりました。

PongL 出力中

 ウインドウズのシェルスクリプトでも実行できました。愛用の Thonny よりかなり早く、1~2分くらいで終わりました。

シェルスクリプトで実行

 次は、1段階上がって ( シンボル ) 付のプログラムです。この ( シンボル ) のところで、RAMアドレスが足踏みし @ シンボルのアドレスに飛ぶようになります。これはL型を仕上げる前からやっていたのですが、難易度が高いです。そもそもこの本・ Nand2Tetris は大学のコンピュータサイエンス科で学習している人たちが、学ぶような内容のようです。できないかも知れません。諦めず、頑張るだけです。

 興味がある方は下のリンクをご覧下さい。英語で本の内容も書いてあります。

www.nand2tetris.org

---今日の日記---

 今日は孫の3歳の誕生日です。近所に住んでいるので、明日我が家で誕生祝いをします。絵本のようなものを描いてプレゼントしようと思っています。アセンブラーの一歩が完成した日が孫の誕生日で、思い出に残りそうです。

 それにあわせて、注文していたトランジスタ技術2016年4月号(中古440円)が届きました。LTSpice を特集したものです。これも早く遊びたいものの一つです。

 楽しい毎日をすごしています。