まつたろうの歩み

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

コンピュータシステムの理論と実装。第7章 SimpleAdd ができました。

 第7章は、バーチャルマシンとHackコンピュータをつなぐトランスレーターの作成が課題です。バックエンドとか呼ばれるようです。具体的には、○○○.vm 疑似コードを機械語の ○○○.asm ファイルに変換する内容です。前章のアセンブラーは抽象構文木などは使わず、Pythonの re など文字列操作に関するメソッド等を用い作成しました。この章も、できればそのやり方で進めようと考えています。まずはどのようなコードを記述すれば良いのか、資料の中から、わずかな具体的な例を探し試してみました。スライド46に一つありました。

スライド46

 スライドの中の RAM や数値を見ながらどのように動作をしているか考えます。

その通りに動作させる ○○○.asm のコードを考えます。数日あれこれとかなり苦戦して、それなりのコードが手書きでかけました。下の画像です。

スライド46のコードがかけた...?

 CPUエミュレータで動作確認をしてみます。何をするコードなのか、// でコメントを入れておかないとわからなくなります。もう一つ例があったので、手書きでコードを書きました。

手書きでトランレートしました

 機械語は、1行で一つの動作指示です。30行足らずの疑似コードは、手書きでかくと300行の .asm コードになりました。正解例などありません。数値等は同じ内容になったので、不安をかかえながらも次に進みます。今度は、プロジェクトの課題 SimpleAdd.vm (足し算の計算)をやりました。これも数日かかりましたが、何とかできました。

手書きの SimpleAdd 成功

 手書きでかけたので、次は Python を使って上のように変換するプログラムをかきます。課題の SimpleAdd からです。前章で作成したアセンブラーを使って始めてみました。データをどう扱うか、リストや数次元リスト辞書などの勉強を繰り返しました。なかなかできません。

--------- 気分転換 ---------

 行き詰まりました。気分転換に、前からやろうと思っていた LTspice を始めました。

LTspice 始めました

 2週間ほどして、気分転換の成果か「そうだ、小さくして考えるべきだった。」と気がつきました。小さなコードで動作を確認しながらすすめた結果、ようやく少しだけ読み込むようになりました。

素材が取り出せた。

 素材がとりだせたので、後は調理です。小さな単位のコードで考え実行し、うまくいったら少し大きくします。それを繰り返しながら、ようやく少し進みました。しかし、3行しかないコードのうち、1行分しか読み込みできていません。

1行目はトランスレートできそうだ

 あれこれ調べて考えてはやってみる、の繰り返しです。その後も、いろんなことにぶつかります。

出力が違う

 なぜか?わからないけど、いろいろやってみて print 文を使って出力したらできました。successfully が表示されないので良いのか疑問もありますが、結果の数値等は同じです。エラー表示は出ていないので、良しとしてすすめることにしました。SimpleAdd はできました。

SimpleAdd 完成したようだ

ーーー 今日の日記 ーーー

 サッカー日本代表、よくやった!

あきらめなければ、何とかなる。思いを強くさせてくれました。

 今日は、高校の同窓会の日です。最近第8波の波が高くなってきました。7月の会は参加したので、今回はキャンセルしました。飲み会が一番リスクが高いです。これまで3年間ほとんど引きこもり、コロナにかからないように気をつけてきました。生きていれば、また参加できるので今度にします。