データと手続き

パソコンではなく、機械一般を考えてみます。普通はなんらかのデータを与えてなんらかのデータを返す何かを想像するのでは無いでしょうか。例えば、切符の発券機はお金と値段や購入数などを入力すると切符を出してくれます。また、飲み物の自動販売機はお金をいれると、その対価として飲み物を提供してくれますね。私たちが日頃から慣れ親しんでいる「機械」とはそういうものなのです。

しかし、パソコンやマイコンなどのいわゆる「プログラマブル」な機械では、その考え方を一歩進めて「データとそのデータを扱うための手続き」を与えることにしました。レジスタといわれるデータを一時的に保存するための記憶領域と、命令セットと呼ばれるそのデータを加工するためのいくつかの原始的な命令を定義したのです。そうすると、あら不思議、マイコンは発券機にも自動販売機にも電子ジャーにも使われることとなりました。パソコンもGPUも基本的にはそういった進化の過程を踏んでいます。

ではその、より原始的な命令を集めた命令セットはいったい誰がどうやって決めたのでしょうか?  実はこれは大変難しい問題で、PC系でよく使われるIntelのCPUでさえ未だに完全には固定されていません。新規命令が追加され続けているのです。ただし、一般的な話をすると、PCは基本的には数学を基盤にしているため、数学的な命令(加算や乗算など)が命令セットに含まれることが多いです。もちろん数学とは関係ない、全く新しい体系を元に命令セットを作ってもなんら問題はありません。