Subsections

3 COMET IIのレジスタ

2を見て分かるように,COMET IIはCPUと主記憶装置(メインメモ リー)から構成されている.大雑把に言うと,CPUは制御装置と演算装置,レジスターから 構成される.これらのうち,プログラマが注意を払うべきものは, だけである.今後アセンブラでプログラムを書くと,制御装置や演算装置について,あま り注意を払う必要が無いことが分かるだろう.

主記憶装置は,プログラム(命令とデータ)を記憶する装置でここでは特に説明しない.ア センブラのプログラムを書くと自然に理解できるであろう.レジスターについては,プロ グラムを記述する前にある程度理解する必要がある.COMET IIのレジスタを表 1にまとめる.以降,それぞれのレジスタについて,説明する.

表 1: CASL IIのレジスタ
記号 語源 日本語 機能
GR General Register 汎用レジスタ 計算等に用いる.またGR1〜GR7 は指標レジスタとしても使われる.
SP Stack Pointer スタックポインタ スタック領域の最上段のアドレスを保持する.
PR Program Register プログラムレジスタ 次に実行する命令のアドレスを保持する
FR Flag Register フラグレジスタ 演算結果の状態を保持する

3.1 汎用レジスタ

これは,算術や論理,比較,シフト演算を実行するときに使う.GR0〜GR7 までの8個 用意されている.あとは,教科書の通り.

3.2 プログラムレジスタ

プログラムカウンターと呼ばれることもある.このレジスタの値は,プルグラムが次 に実行する命令語の先頭番地を表す.したがって, となる.

プログラムは,実行前に主記憶装置(メインメモリー)に格納されている.プログラムレジ スタPRの値によって,プログラムを構成する命令を1つずつ取り出して,CPUは処理を行う. このような方式を逐次制御方式,あるいはプログラム内蔵方式(stored program) と言う.

3.3 フラグレジスタ

Flag Regisuterのフラグとは,旗のことである.サッカーの試合では,プレーの状態によ り審判が旗を上げる.あれと同じ働きをする.コンピューターでは演算の結果により旗を 上げる.

COMET IIには,1ビットのフラグレジスタが3個ある.演算結果によって,それらのレ ジスタの値がセットされる.セットされる内容は,教科書P.18の表2.4の通りである.主 に,このレジスタは,実行順序を変更,分岐命令に使われる.

あとは教科書の説明通り.

3.4 スタックポインタ

メインメモリーの一部をCPUが専用の記憶領域として使うことがある.そのときのメインメモリー のアドレスを示す.したがって, となる.

これは,ここでは少し早すぎるので,実際に使うときに説明する.

3.5 指標レジスタ(index register)

これは,特殊なレジスタで,ハードウェアーは汎用レジスタが兼ねる.汎用レジスタのう ちGR1〜GR7を使う.GR0を使わない理由,これはマシン語との関係で,後で述べる.

教科書の図2.5の表現は分かりにくいので,具体例でその動作を示す.例えばクラス40人 分の数学と英語と電子計算機のテストの点数がメモリに格納されているとする.それぞれ の平均点を求める場合,指標レジスタを使うと便利である.このプログラムでは,それぞ れの教科のクラスの合計点を計算するところが,重要である.指標レジスタを使う場合と 使わない場合のフローチャートを図3に示す.

指標レジスタを使わないと,プログラムが大変である.一方,指標レジスタを使うと,基 準点からのアドレスを加算して目的のデータにアクセスできる.加算する値を記憶するの が指標レジスターである.このように,基準アドレスに加算して目的のアドレス求める方 法ををアドレス修飾と言う.

諸君は,これと同じプログラムテクニックをFORTRANの授業で学んでいる.このアドレス 修飾は,FORTRANの配列と同じことを行っている.指標レジスタは,FORTRANの配列の添え 字の役割を果たしているのである.FORTRANでは分かりにくいのですが,C 言語の配列は まさにこれと同じことを行っている(実感できる).

図 3: 指標レジスタを使った場合と使わない場合のプログラム.クラスの数学のテ ストの合計点を計算している.GR1を指標レジスタとして使っている.
\includegraphics[keepaspectratio, scale=0.9]{figure/index_register.eps}

3.6 COMET IIのハードウェアー

これまでの話から,COMET IIのハードウェアーは図4 のようになっていることが分かるだろう.

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。このように、命令 とデータ区別しないで、同じメモリーに格納するコンピューターをノイマンアーキテクチャ ーと言う。

通常のコンピューターは、とてつもないビットの操作をしていることが分かるであろう。 それもひとつも間違えないで行うのは奇跡に等しいと思える。どのようにしているのであ ろうか?。

図 4: COMET IIのハードウェアーとプログラムの状態
\includegraphics[keepaspectratio, scale=0.9]{figure/config_COMETII.eps}

ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
2005-11-18


no counter