接続したいレジスタをアドレス入力端子を使って選択し、接続されたレジスタ回路に対して情報の書き込み、または読み込みを行うというのが基本的なメモリ回路の使い方になります。例としてメモリ回路をプログラムの保管先として使う場合について考えてみましょう。
まずコンピュータのプログラム(作業手順書)をメモリ回路の0番地から順番に書き込んでおきます。アドレス入力端子には次に実行すべき命令が保存されているアドレス(番地)を記憶しておく専用のレジスタ回路が接続されています。(このレジスタの事をプログラムカウンタと言います。)このレジスタ回路に記憶されている「アドレス」を足し算回路を使って+1ずつカウントアップしていくことで、メモリ回路に書き込まれた1つ1つの作業命令が、小さいアドレスの方から順番に出力されてくるようになります。次々に出力されてくる作業命令に従って、コンピュータ内部の信号経路が切り替わったり特定の信号が記憶されたりすることでプログラムの内容が実行されていきます。
メモリ回路に書き込まれたプログラムが実際にどのようにして実行されていくのかを知ることで、自然とコンピュータプログラムの実体についてのイメージが湧いてくると思います。コンピュータ内部の情報は全て「0」と「1」の組合せで表現されているという話を前のページでもしましたが、メモリ回路に書き込まれている「作業命令」というのも「0」と「1」の組合せから成る識別番号で表されています。
例えば「接続される経路を足し算回路へ切り替える」という作業命令は識別番号「00000111」、「演算結果をレジスタ回路に接続して記憶する」という作業命令は識別番号「00000100」、といったような感じです。
作業命令の1つ1つは非常に単純な意味しか持っておらず、コンピュータの実際の動作はただ流れてくる作業命令の識別番号に従って、決められた経路へと回路の接続を切り替えたり特定のレジスタへ信号を送って内容を記憶したりすることだけです。(これぐらいの動作なら電気回路の機械的な動作として実現できそうな気がしてきませんか?)そしてこの「作業命令の識別番号をメモリ回路の上から順番に書き込んでいくこと」が実際にプログラミング時にコンピュータ内部で行われていることです。
こんな単純な作業命令の組合せだけで、普段私たちが接するようなプログラムの機能を本当に実現できるのか?といった疑問は当然出てくると思いますが、これらのことも「アセンブリ言語」によるプログラミングを経験すると理解できるようになります。(「アセンブリ言語」によるプログラミングについてはまた別のページで紹介します。)