AOBA's Information Processing Education
1998/01/11
注意1:このページは、回線を切断した後でゆっくりご覧になってください(テキストを印刷する場合は、その取り扱いに注意してくださるようお願いします)。
注意2:背景が白地の画面を長時間見つめていると頭が痛くなってしまいますので、ここは背景をグレーにしています。
前々回(第8回目)の講座で、コンピュータの動作原理について説明したのを覚えてますか?。これをもう一度以下に記します。
”あらかじめコンピュータの中にコンピュータがどのように動作するかを示す命令が記憶されていて、その命令をコンピュータが一つづつ読取り、解釈し、実行する”
今回はこの点について、もう少し詳しく見てみましょう。
まず、”あらかじめコンピュータの中にコンピュータがどのように動作するかを示す命令が記憶されていて・・・”とありますが、ここで言っている「コンピュータの中」とは、主記憶装置を指します。そして、「コンピュータがどのように動作するかを示す命令」とは、プログラムのことです。
つまりコンピュータを動作させるには、主記憶装置の中にプログラムが入ってなければなりません。そしてそのプログラムは、前回(第9回目)説明した機械語のプログラムですね(ここまでは復習です)。皆さんは、プログラムと言えばコンピュータを動作させるための命令(つまり機械語になったプログラム)を考えることでしょう。だけど、通常は命令だけでは処理を進めることはできません。処理を進めるにはデータも必要です。
例えば、キーボードから任意の2つの数字を入力し、その加算結果をディスプレイに出力する処理を考えると、実際に加算する命令の他に、入力した2つの数字が必要です。この場合、入力した数字がデータに当たります。
このデータも入力装置を経由して主記憶装置に格納されますので、主記憶装置内には命令とデータが一緒に存在することになります。(注)ここで説明したように、一口にプログラムと言った場合、大きくは命令部分とデータ部分に分けることができます。ただし、命令部分を指して”プログラム”と呼ぶ場合もあるのですが、ここでは、命令部分とデータ部分を包含して、”プログラム”とします。
主記憶装置のイメージ図を以下に示します。
![]()
上図に、絶対番地(絶対アドレス)と相対番地(相対アドレス)とありますが、これら番地(アドレス)でもって主記憶装置上の位置を表します(番地は0から順に振られます)。
絶対番地とは、主記憶装置で予め固定されている番地で、相対番地とは、ある番地を基準としたとき、そこからの変位を相対的に表した番地です。上図は、プログラムの先頭を基準番地としたときの相対番地を記しました。ここでもう一度コンピュータの動作原理を思い出してください。
”・・・その命令をコンピュータが一つづつ読取り、解釈し、実行する”とありますね。CPUが読取る(そして解釈&実行)する順番は、基本的には番地の若い順番に行われます。
だから上図の例で言えば、絶対番地で124200番地の命令が最初で、次が124201番地の命令、そして順に番地が増加する方向に向かって読取り(そして解釈&実行)が行われます。(注)必ずしも1番地内に1つの機械語命令が入るとは限りません。例えばCASLは2つの番地内に1つの機械語命令が入りますが、ここではそれを意識する必要はありません。
さて、主記憶装置に命令部分とデータ部分が一緒に存在するならば、CPU(制御装置+演算装置)はどうやってそれを区別しているのでしょうか?。
その答えは簡単です。なんと、CPUはこれらを区別なんかしていないのです。何せ、どちらも同じ2進数ですからね。
だから、もし命令部分の最後に該当プログラムの終了を意味する命令がなければ、CPUは最初のデータ部分の読取り(そして解釈&実行)を行います。多くの場合は、ここでエラーとなるでしょうが、偶然にも読取ったデータが機械語にマッチするものであった場合は、それを読取って実行してしまいます。新年1回目ということで、今週は軽くここまでにしておきましょう(今週も演習はありません。なかなか、演習が出題できるほと進まないのですよ。トホホ...)。
ではまた来週。