スポンサーリンク

どんな作業や仕事にも手順があるように、コンピュータを働かせる場合にも作業の手順書が必要になります。作業の手順書にはコンピュータにやってほしい作業が上から順番に記録されています。この手順書のことを「プログラム」と言い、このプログラムを作成する作業のことを「プログラミング」と言います。

プログラムはメモリ回路という部品に書き込まれています。メモリ回路というのは記憶回路の1種であり、その基本的な動作は前のページで紹介した「レジスタ回路」と「マルチプレクサ回路」の応用回路として理解することができます。

同じ記憶回路である「フリップフロップ回路」や「レジスタ回路」に対し、メモリ回路の特徴は記憶できる情報の量が非常に多いという点にあります。基本的にはレジスタ回路が大量に並べられた情報の保管庫のようなものであるとイメージしてください。

メモリ回路の中にある特定のレジスタ回路へ情報の書き込みや読み込みを行う時には、メモリ回路の入出力端子が目的のレジスタ回路へつながるように接続回路が切り替わるようになっています。メモリ回路内部の全てのレジスタには個別の識別番号が割り振られていて、この識別番号をメモリ回路の「アドレス入力端子」という端子へ入力することで目的のレジスタ回路が選択され、入出力端子へと接続される仕組みになっています。個々のレジスタ回路が持つ識別番号のことを「アドレス」(番地とも言う)と言います。

 

メモリ回路

図64.メモリ回路

 

スポンサーリンク

接続したいレジスタをアドレス入力端子を使って選択し、接続されたレジスタ回路に対して情報の書き込み、または読み込みを行うというのが基本的なメモリ回路の使い方になります。例としてメモリ回路をプログラムの保管先として使う場合について考えてみましょう。

まずコンピュータのプログラム(作業手順書)をメモリ回路の0番地から順番に書き込んでおきます。アドレス入力端子には次に実行すべき命令が保存されているアドレス(番地)を記憶しておく専用のレジスタ回路が接続されています。(このレジスタの事をプログラムカウンタと言います。)このレジスタ回路に記憶されている「アドレス」を足し算回路を使って+1ずつカウントアップしていくことで、メモリ回路に書き込まれた1つ1つの作業命令が、小さいアドレスの方から順番に出力されてくるようになります。次々に出力されてくる作業命令に従って、コンピュータ内部の信号経路が切り替わったり特定の信号が記憶されたりすることでプログラムの内容が実行されていきます。

メモリ回路に書き込まれたプログラムが実際にどのようにして実行されていくのかを知ることで、自然とコンピュータプログラムの実体についてのイメージが湧いてくると思います。コンピュータ内部の情報は全て「0」と「1」の組合せで表現されているという話を前のページでもしましたが、メモリ回路に書き込まれている「作業命令」というのも「0」と「1」の組合せから成る識別番号で表されています。

例えば「接続される経路を足し算回路へ切り替える」という作業命令は識別番号「00000111」、「演算結果をレジスタ回路に接続して記憶する」という作業命令は識別番号「00000100」、といったような感じです。

作業命令の1つ1つは非常に単純な意味しか持っておらず、コンピュータの実際の動作はただ流れてくる作業命令の識別番号に従って、決められた経路へと回路の接続を切り替えたり特定のレジスタへ信号を送って内容を記憶したりすることだけです。(これぐらいの動作なら電気回路の機械的な動作として実現できそうな気がしてきませんか?)そしてこの「作業命令の識別番号をメモリ回路の上から順番に書き込んでいくこと」が実際にプログラミング時にコンピュータ内部で行われていることです。

こんな単純な作業命令の組合せだけで、普段私たちが接するようなプログラムの機能を本当に実現できるのか?といった疑問は当然出てくると思いますが、これらのことも「アセンブリ言語」によるプログラミングを経験すると理解できるようになります。(「アセンブリ言語」によるプログラミングについてはまた別のページで紹介します。)

 

<戻る       次へ>

 

スポンサーリンク