まつたろうの歩み

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

コンピュータシステムの理論と実装。第6章プロジェクトを手作業で機械語に直しました。

 ここまできたら、コンピューターは0と1で動いてる。いや、0と1でいろんなことができるんだ!ということが実感できました。これまで作ってきたものは、著者がHackコンピューターと名付けています。それは16ビットコンピュータです。Hackアセンブリでは、1行目でデータかアドレスを与えます。2行目で、それをどうするか命令を出します。DならDレジスターに、AならAレジスターに、MならRAMにデータを格納します。その計算も(D+A、A+1、D+Mなど28の計算)が0と1の組み合わせで指定ができます。ALUを設計するときにそれを決めておけば、そういう計算をさせられるようになります。ある0と1の16個の並びで、何をするかを決めています。32ビット機でしたら、1行でそれを行えるようになります。

 第6章は好きなプログラミング言語を使って、アセンブラプログラムを開発することが課題です。どのように変換をすると良いのかわかりません。まずは手作業で機械語を作成してみました。下は(ハンドアセンブラ)手作業で、作成中の画像です。エディターは何でも良いのですが、以前インストールしていたさくらエディターです。黒字が元になるアセンブリです。(このアセンブリだけでも動きますよ)そのデータや命令を0と1に書き直していきます。変換が終わったら、アセンブリの行は削除します。

アセンブリの下に、機械語を記入していきます。

 機械語に変換が終わりました。付属のアセンブラーで変換したコードと比較して、確認ができます。

手書きの機械語アセンブラーの出力を比較

 機械語のプログラムは、ROMに読み込みます。Add(2数の加算)は行数も少なく、簡単にできました。

2+3=5です

 シンボル・ラベルの処理がわかりにくいです。何回もいろいろやってみました。2数のうち、大きい数を表示するプログラムです。

Max

 シンボル・ラベルのところには、0行からの行数を入れるようです。1からR0に入力した数までの合計を計算するSumができました。

1から入力した数までの合計を求めるプログラム

次に、スクリーンを使うプログラムです。長方形を描画します。

Rectangle

 

 この他に、ポングという壁当てゲームのようなプログラムがあります。それは2万行ほどのプログラムですから、手作業ではかなり大変です。課題はアセンブラーを作成することですので、「退屈なことはPythonにやらせよう」と思います。

 これまで、一通り基本的な勉強ができているのはPythonだけです。ソースのアセンブリが表す0と1の16個の並びに変換する。それを命令数にあわせて準備して、その中からその命令を選択するようなプログラムを作成すれば良い。構想はわかりましたので、Pythonで少しやってみました。readlineというのはすぐに思い出しました。しかし、1年以上も前に学習したので忘れてしまっています。最初のコメント行などの取り除き方で、つまづきました。本やwebで調べ書いてみましたが、何をやっているのか混乱してしまいました。しかたないので時間はかかりますが、Pythonの勉強のやり直しからする事にしました。いつできあがるのかな~。

 この本では、まだ半分程度しか進んでいません。著者はまだたくさんのメニューを用意してくれています。この章はこれで切り上げ、先にそれらのごちそうを頂くようにするかも知れません。Pythonしだいです。

入門Python

ヘビが気持ち悪いです。普段は表紙を裏返し、白い面で包んで使っています。

 

今日の日記

 ウクライナへの侵攻が止まりません。日本らしく柔道を通じて平和を訴えるとか、森氏やその他親交のある人を派遣するとかどうにか手立てはないのでしょうか。

 先日、対基地攻撃能力を検討していることが報道されました。ロシア大使館員を返して、ロシアとの窓口もなくなってしまいました。対基地攻撃能力とか刺激するようなことは、今は口にするべきでは無いと思います。私が死ぬまでに戦争になるとか考えられませんが、孫の代その後も日本が平和であり続けますように願います。