主記憶装置は,プログラム(命令とデータ)を記憶する装置でここでは特に説明しない.ア
センブラのプログラムを書くと自然に理解できるであろう.レジスターについては,プロ
グラムを記述する前にある程度理解する必要がある.COMET IIのレジスタを表
1にまとめる.以降,それぞれのレジスタについて,説明する.
プログラムは,実行前に主記憶装置(メインメモリー)に格納されている.プログラムレジ スタPRの値によって,プログラムを構成する命令を1つずつ取り出して,CPUは処理を行う. このような方式を逐次制御方式,あるいはプログラム内蔵方式(stored program) と言う.
COMET IIには,1ビットのフラグレジスタが3個ある.演算結果によって,それらのレ ジスタの値がセットされる.セットされる内容は,教科書P.18の表2.4の通りである.主 に,このレジスタは,実行順序を変更,分岐命令に使われる.
あとは教科書の説明通り.
これは,ここでは少し早すぎるので,実際に使うときに説明する.
教科書の図2.5の表現は分かりにくいので,具体例でその動作を示す.例えばクラス40人 分の数学と英語と電子計算機のテストの点数がメモリに格納されているとする.それぞれ の平均点を求める場合,指標レジスタを使うと便利である.このプログラムでは,それぞ れの教科のクラスの合計点を計算するところが,重要である.指標レジスタを使う場合と 使わない場合のフローチャートを図3に示す.
指標レジスタを使わないと,プログラムが大変である.一方,指標レジスタを使うと,基 準点からのアドレスを加算して目的のデータにアクセスできる.加算する値を記憶するの が指標レジスターである.このように,基準アドレスに加算して目的のアドレス求める方 法ををアドレス修飾と言う.
諸君は,これと同じプログラムテクニックをFORTRANの授業で学んでいる.このアドレス 修飾は,FORTRANの配列と同じことを行っている.指標レジスタは,FORTRANの配列の添え 字の役割を果たしているのである.FORTRANでは分かりにくいのですが,C 言語の配列は まさにこれと同じことを行っている(実感できる).
CPUの役割は、命令に従いデータの加工(演算)を行うことである。その命令は、単純であ る。単純なことしかできないが、その処理速度は、信じられないくらい高速3である。CPUの回路は、2年生の時に学習した論理回路(組み合わせ回路、順序回路 4)で構成されている。そこで、論理回路はどん なの入出力の論理でも可能であることを学習したはずである。それも、たった3つ(and, or,not)の回路の組み合わせで、できるから驚きである。このことから、どのような処理 でも可能な回路ができることが分かる。
2年生の時、or(論理和)とand(論理積)、not(否定)の回路がトランジスターで出来ること を学習した。ブール代数というソフトウェアーがトランジスターというハードウェアーで 実現できるのである。コンピューターはまさにこれである。すなわち、トランジスターが ビットパターン(命令とデータ)応じた電圧を制御することにより、論理演算を行っている。 要するに、いままで学習したビットパターンは、コンピューター内部では電圧のパターン に変換されて、トランジスターにより論理演算を行うのである。論理演算を行う装置は、 以前学習した加算器のようなものである。
主記憶装置に格納されているデータは、16ビットのただのビットパターンである。16個の 0と1の集まりにすぎない。16進数で書くと、4桁の数字である。その4桁の16進数の数字が、 整数や文字、あるいは命令を表したりする。CPUは、それらをどのように区別しているの であろうか?。そのからくりは?。それらを全く区別していないというのが答えである。た だ単に、プログラムレジスタPR が示すアドレスの内容は命令と解釈するだけである。す ごーく、単純である。後は、その命令に従い、主記憶装置の内容が命令になったり、整数 になったり、文字になったりしているだけである。メモリーの内容を見ただけでは、それ が示すものは、文字なのか整数なのか、命令なのかは分からないのである。
COMET IIでは、命令と処理すべきデータ(整数や文字)が同じところに、区別無く格納され ている。世界中にある普通のコンピューターも同じようになっている5。このように、命令 とデータ区別しないで、同じメモリーに格納するコンピューターをノイマンアーキテクチャ ーと言う。
通常のコンピューターは、とてつもないビットの操作をしていることが分かるであろう。 それもひとつも間違えないで行うのは奇跡に等しいと思える。どのようにしているのであ ろうか?。