コンピュータの仕組み(基本論理回路〜機械語)

コンピュータの仕組み(電気回路〜基本論理回路) - yokkunsの日記の続き。
基本論理回路の組み合わせで、以下のような演算回路を作成出来ます。
回路図をきれいに描くソフトがインストールされていなかったため、図はきたないです、ごめんなさい。

比較回路(comparator)

二数の大小関係を求める論理回路。具体的には以下のような出力が出る回路。

  • X = Yのとき出力Q = 1X \not= Yのとき、Q=0
  • X > Yのとき出力L=1、その他の場合L=0
  • X < Yのとき出力S=1、その他の場合S=0

これを、前回やった、AND、OR回路を使って組むと下図のようになる。


半加算器(HA)

1桁の2進数XYを入力とし、和Sと上位への桁上げCを出力する論理回路

X Y S C
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1


全加算器(FA)

2進数の1桁の加算は、上の半加算器(HA)の入力部に、下位の桁からの桁上げC_iを加えることにより行うことが出来る。
このように、XYC_iの3入力をもつ加算回路を全加算器という。

X Y C_i S C_0
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1

加減算回路

加減算回路は、XORという論理回路を使います。XORは、入力値が異なる場合に"1"、同じ場合には"0"を出力する回路です。AND、OR、NOTで組めるので興味のある方はチャレンジしてみてください。


制御信号Pが0の時は、加算で、Pが1の時には、Yは反転され、さらにC_0が1になるため2の補数となり、減算になる。

デコーダ

符号化された情報を解読し、実際の動作を引き起こす信号を作り出す回路で、一般に入力数は出力数よりすくない。
以下のようなことに使用される。

  • 制御装置において、各命令を示す符号化された記号を解読し、各部に送り出す制御信号を作る。
  • メモリにおいて、符号化されたアドレス信号を解読して、メモリ選択信号を作る。

メモリの例

上の図では、0〜3番地までの4つのメモリから、1つ選択して取り出している。
番地は、0〜3なので、2桁の二進数で表現出来ます。この2桁の二進数から、4つの制御信号を作るのがデコーダの役割です。
んで、下のD0〜D7は、データバスと呼ばれるデータを転送するバスで、すべてのメモリと接続されてます。
制御信号が、1の番地のみ電流が流れるため、該当する番地のデータだけ転送出来るわけです。

機械語

演算装置とは、算術演算、論理演算を実行する装置で、ALU(Aarithmetic and logical unit)と呼ばれます。
さて、このALUも、メモリと同じように、演算回路も制御信号により選択されます。そして、この制御信号は、機械語のオペレーションコードから作られます。
あ、その前に、機械語の構成ですね。
機械語は、オペレーションコード部と、アドレス部で構成されており、オペレーションコードには、演算や制御などの命令が入り、アドレス部には、その命令で処理されてるデータ(オペランド)が格納されてる場所(またはデータ自身)が入っています。
コンピュータが演算を行うには、2つの入力が必要なんですが、入力は一度に一個しか出来ないため、アキュムレータと呼ばれる一時記憶装置に保存します。

例えば、オペレーションコードが以下の仕様だった場合、

オペレーションコード 命令の種類
00000000 加算
00000001 減算
00000010 AND
00000011 OR
00000100
00000101 メモリからACCへ
00000110 ACCからメモリへ

次の機械語は、2番地のデータと3番地のデータを加算して、結果を4番地に保存するプログラムになります。

00000101 00000010
00000000 00000011
00000110 00000100
  • 00000101から、メモリの内容をACCにコピーする回路を選択、00000010番地の内容をその回路に転送
  • 00000000から、加算回路を選択、00000011番地の内容を回路に転送。加算された結果がACCに格納される。
  • 00000110から、ACCをメモリにコピーする回路を選択、ACCの内容を00000100番地にコピー

さて、これで、回路と機械語がつながりました。
もっと詳しく解説したかったのですが、果てしなく長くなってしまうため、いろいろ中途半端になったところがありますが、とっかかりになれば幸いです。
次回は、機械語からアセンブリ言語、そしてC言語へって感じで進めたいと思います。

参考

以下の書籍を参考にしました.

電子計算機基礎論

電子計算機基礎論

アセンブリ言語スタートブック

アセンブリ言語スタートブック