戻る コンピュータのしくみ  1.手動計算機



基本論理回路を使って 加算回路記憶回路 を作ることができる、 ということは理解できたと思います。

しかし、 演算と記憶はコンピュータの基本的な要素とはいえ、 本当にこんなのでコンピュータ (計算機) ができるのか、 心配です。
そこでまず、演算回路と記憶回路とスイッチを使って、手動の計算機を作ることを考えてみます。

下図はこのページ中程の Java アプレットの一部ですが、 "FULL ADDER" と書かれている四角形は演算回路です。
最初は 「加算回路」 がセットされていますが、 下にある "ADD"、"AND"、"NOT" などのボタンで演算内容を切り替えられます。 8 ビットの計算ができるように、 全加算器が 8 個並んでいます。


縦長の長方形にはアキュムレータやレジスタ、 メモリといった名前がついていますが、 すべて記憶回路で、 これも 8 個が一組になって 8 ビットのデータを記憶できるようになっています。 上部の左側が入力信号、 右が出力信号で、 下のスイッチを ON にすると入力信号のデータが記憶され、 出力側に現れます。
同じ記憶回路なのに名前が違うのは、 多少機能や役割等が違うためで、 データを一時的に記憶する、 いわば 「メモ用紙」 です。 中でもアキュムレータは最も頻繁に使われるレジスタ、 いちばん使い易いメモ用紙です。

図のいちばん上、横に走っている線をバス (データバス) といいます。 各種のレジスタやメモリがこの線を共用して、まるで乗り合いバスのように信号を伝送するからです。

レジスタ類やメモリの出力のスイッチを ON にすると、 データをバスに乗せることができます。 どの信号をバスに乗せるかを決めることになるので、 ここではこれを 「〜を」 のスイッチと呼ぶことにします。
また、下にあるスイッチを ON にすると、バスのデータを記憶します。 これを、 どのレジスタやメモリに記憶させるかを決める、 「〜に」 のスイッチと呼ぶことにします。





下図も Java アプレットの一部です。 0 が並んでいる枠は、レジスタ類やメモリのデータを表示しています。
枠内をマウスでクリックすると (下のアプレットで)、 0 は 1 に、 1 は 0 に変わります。 データが目で見えるように、 また、 必要に応じてデータを編集できるようになっています。


これをクリックしても動きません


3 番地のメモリの枠内をクリックして (下のアプレットで)、 値を "01101011" に変えてみてください。
次に、 3 番地のメモリの出力にある 「3 を」 のスイッチをクリックします。 これで 3 番地のデータがバスにのります。
このデータをアキュムレータに記憶させるには、 「A に」 のスイッチをクリックします。 アキュムレータが 3 番地のメモリと同じ値、 "01101011" になります。

ついでに加算を試してみましょう。
今度は 0 番地を "00101110" にして、 「0 を」 のスイッチをクリックします。 次に、 「R に」のスイッチをクリックすると、 レジスタの値が "10011001" に変わります。
10011001 を 10 進数にすると 153、 01101011 と 00101110 は 107、46 です。 107 + 46 = 153 という計算ができたわけです。





しかし、 実はこれは反則です。
なぜなら、 実際にはメモリのデータを 1 ビットずつ直接書き換えることはできないからです。 ヒトは下図左端の入力ポートからしかコンピュータにデータを入れることできません。
入力ポートはデータを外部からコンピュータに入力するための入り口です。
一般的にはキーボードなどが接続されますが、 ここでは入力ポートの枠内をマウスでクリックして、 1 ビットずつ 0 と 1 を切り替えることにします。

さて正式 (?) に 107 + 46 を計算するには、 まず入力ポートのデータを "01101011" にしておいて、 「I を」 と 「0 に」 のスイッチをクリックして、 0 番地に "01101011" を書き込みます。
次に入力ポートを "00101110" に変えて、 「I を」、 「A に」、 でアキュムレータに "00101110" を書き込みます。
最後に 「0 を」 と 「R に」 をクリックすれば完了、 "10011001" がレジスタに入りました。
(少し慣れてくれば、 「〜を」 や 「〜に」 のスイッチではなく、 レジスタやメモリの図形 (四角形) をクリックしてもスイッチが動きます。)
こういう風に、 演算回路と記憶回路とスイッチがあれば、 どうやら計算はできそうです。





「〜 に」 のスイッチをクリックしている間はデータが伝送される経路が表示され、 離すと消えます。
 なお、 右下の "mode" をチェックすると、 「〜 を」 スイッチを ON にしたときの表示モードが変わります。



さて、下に並んでいる 5 つのボタン、 "IN" "OUT" "READ" "WRITE" "CALC" は、 この手動の計算機を、 もう少し 「コンピュータ」 に近づけるための工夫です。

入力ポートのデータをアキュムレータに読み込む 「I を」 と 「A に」 というスイッチ操作を "IN" と呼ぶことにして、 "IN" ボタンをクリックすると 「I を」 と 「A に」 のスイッチが順に自動的に動くようにします。

アキュムレータのデータを右端の出力ポートに接続されているレジスタに書き込むのは "OUT"、 このボタンをクリックすると 「A を」 と 「O に」 のスイッチが動きます。
(出力ポートは計算機の中のデータを外部に出力するための、データの出口です。)

"READ" はメモリのデータをアキュムレータに読み込み、 "WRITE" は逆にアキュムレータのデータをメモリに書き込みます。
メモリの番地は 0 番地 〜 3 番地 の前にあるラジオボタンで変えることができます。

"CALC" はアキュムレータとメモリのデータを演算 (ここでは加算や AND、NOT などの論理演算) します。
"CALC" の処理では、 "CALC" ボタンを 2 度クリックして下さい。
最初は演算処理を行うためで、 演算の結果がレジスタに書き込まれます。 2 度目はこれをアキュムレータに転送するためで、 こうして演算結果を常にアキュムレータに残します。

"IN" 〜 "CALC" のボタンをクリックすると、 まず 「〜を」 のスイッチが ON になり、 しばらくして 「〜に」 のスイッチが ON になります。
(「〜に」 のスイッチが ON になるまでの時間は "<<"、 ">>" ボタンで調節できます。)
クリックを離すとデータ経路の表示が消えます。

このボタンを使って先程と同じ計算をするには、 入力ポートを "01101011" にして "IN" をクリックしてデータをアキュムレータに書き込んでおいて、 次に "WRITE" をクリックします。
入力ポートのデータを "00101110" に変えてもう一度 "IN" をクリックし、 今度は "CALC" で計算を実行し、 再度 "CALC" をクリックして結果をアキュムレータに転送します。
最後に "OUT" をクリックすると、 計算結果が出力ポートに転送されます。 これで、 ディスプレイに表示させたりプリンタで打ち出したり、 何らかの形でヒトが結果を見ることができるようになります。





このようにして、 たとえば家族の体重、 お父さんは 67kg、お母さんは 53kg、私は 48kg、弟は 45kg、 この合計を計算してみてください。
メモリに 01000011、 00110101、 00110000、 00101101 と書き込んでおいて、 順に加算しいけばいいのですが、
… それにしても面倒ですね。
ややこしいボタンを何度も繰り返さなくてはなりません。 人が操作したのでは時間もかかるし間違いも起こります。

それならいっそのこと、 "IN" や "OUT" と名付けた処理も 2 進数のコードにして、 こうした処理の手順もメモリに記憶させておいて、 計算機はそれを一つずつ読み出しながら自動的に処理を進めるようなしくみを付け加えてみたらどうでしょう。
なんだかとても素敵なものができそうです。

そうです。
上のような 「手動式計算機」 に、 自動的にスイッチを動かすしくみを付け加えたものが 「コンピュータ」 で、 それを動かすために 2 進数でコード化された一連の操作の手順が 「プログラム」 です。




情報処理概論 に戻る   目次 に戻る  戻る  

Java applet 圧縮アーカイブファイル    自由利用マーク
update: 2012.10.09  address