白いパソコン

プログラミングをもらったパソコンでがんばります。

アセンブラ編 入替えプログラムの作成

入替えプログラムの作成

"コンピュータのしくみを理解するための10章"の3章に、足し算の例が書かれているので、これを参考にすすめたいと思います。
まずは、"program"と"margorp"の対応表を作ります。

p r o g r a m
m a r g o r p


次に、"program"を2進数で表します。図5.29の文字コードと照らし合わせると、

p 0111 0000
r 0111 0010
o 0110 1111
g 0110 0111
r 0111 0010
a 0110 0001
m 0110 1101

になります。

次に、真理値表を作るのですが、'r'の入替え先が'a'と'o'の2つあって真理値表ができません。
しかたないので、2つめの'r'は大文字にすることにしました。Rの文字コードは、

R 0101 0010

です。
真理値表は、

入力 出力
p 01110000 01101101 m
r 01110010 01100001 a
o 01101111 01110010 R
g 01100111 01100111 g
R 01110010 01101111 o
a 01100001 01110010 r
m 01101101 01110000 p

になります。

真理値表をよく見ると、入力も出力も始めは"011"で変化していません。なので、省略することにします。
さらに、入力の各ビットにA0~A4、出力の各ビットにZ0~Z4と名前を付けます。
新しい真理値表は、

A0 A1 A2 A3 A4 Z0 Z1 Z2 Z3 Z4
1 0 0 0 0 0 1 1 0 1
1 0 0 1 0 0 0 0 0 1
0 1 1 1 1 1 0 0 1 0
0 0 1 1 1 0 0 1 1 1
1 0 0 1 0 0 1 1 1 1
0 0 0 0 1 1 0 0 1 0
0 1 1 0 1 1 0 0 0 0

です。

この真理値表から論理式を作ります。ですが、また問題です。和+と積・の記号はありましたが、否定の上線の記号がありません。
しかたがないので、否定にしました。これで論理式は、
Z0 = A0・A1・A2・A3・A4+A0A1A2A3・A4+A0・A1・A2・A3・A4
Z1 = A0・A1A2A3A4+A0・A1A2・A3・A4
Z2 = A0・A1A2A3A4+A0A1A2・A3・A4+A0・A1A2・A3・A4
Z3 = A0・A1・A2・A3・A4+A0A1・A2・A3・A4+A0・A1A2・A3・A4+A0A1A2A3・A4
Z4 = A0・A1A2A3A4+A0・A1A2・A3・A4+A0A1・A2・A3・A4+A0・A1A2・A3・A4
となります。

この論理式を論理回路にします。入力も出力も5つなので線が多くて大変です。

論理回路をブログに載せる方法がわかりません。
できました!論理回路の完成です。

お披露目

さっそく、細山田さんに見せましたが、
「えっ?これってプログラムじゃないですよね」とのお答え。
曽根も「この絵でコンピュータ動かせるんか?」と生意気です。
動作を説明してみましたが、どうもしっくりこない様子でした。
いわれてみれば、プログラミングなのに「回路ができました!」ではおかしいかもしれません。

反省

"コンピュータのしくみを理解するための10章"を読み返してみました。
全加算器を元に作りましたが、よく読むと全加算器は4章ではALUになり、足し算を命令ADDで実行していました。
ということは、プログラムにするためには"progRam->maRgrop"回路に対応する命令を見つければよいことが分かりました。
分かりましたが、どうやって見つけるのか分かりません。
そこで、アセンブラ言語は諦めて、schemeを始めることにしました。