我輩の出来る範囲で、極力簡単に CPU の原理をたとえ話で説明しよ うと試みます。幼稚な部分もありますが、しばしご辛抱を。
このCPUは処理単位が4ビットなので、(アドレスを除く)ほと んどの情報が4ビット単位、つまり16進数1桁である、ということになって います。言われたことはその通りにしますが、何せ物覚えが悪いので、いつもすぐにメ モできるように身の回りに書いたり消したりできるメモを何枚か持っています。
それを レジスタ (register, reg. とも表記) と呼び、 取り敢えずAとBの2つがある(メモ用紙2枚に対応)とします。このCPU君は、 処理単位はに従ってレジスタも4ビット単位です。さらに、いま何段目までやったか忘れないように[今実行している指示は何段 目のもの]か、もメモっておくことにします。一番最初は1ではなく0から始 まることになっています。
このメモは 4 ビットではなく8ビットの情報を持てるものとし、 それを16進数2桁で「00」番と表示することにします。この特別なメモのこと を "PC" (Program Counter) と呼びます。
そこで先生は考えました。引出し付き書棚を用意しておいて、その中に分解し た作業をメモにして順番にいれておき、CPU君には最初(一番上)の引出しから 順々にあけていき、そこに書いてある指示にしたがえばよい、という約束にし ました。
さらに厄介なことに、メモには16進数の数字1桁しか書けな い (ご都合主義で申し訳ないです) ので、CPU 君に はその数と作業の対応関係の表も渡しておきます。
この対応関係をひもとくことこそ、fetch-decode-execute の decode に対応する処理なのです、が、詳細は略します。
先生はとりあえずこのやり方で仕事を頼んでみることにしました。
この場合、0段目のような、実際に実行すべき機械語の命令のことを オ ペコード (operation code, opecode) 、1段目のような、その命令の操 作対象(パラメータ)に対応するものを オペランド (operand) 、 と呼ぶことがあります。さらに、このオペランドは、一般的に、レジスタ番号を持ったり、メモリアド レスを持ったり、直接の数値(今回はこれ)だったり、いろいろな場合がある ことも頭の片隅に置いておいてください。ちなみにこのような直接の数値のこ とを 即値データ (immediate data) と呼びます。
この場合、レジスタの内容を表示するだけで、オペランドは無かったので、PC は1増える(すぐ次のメモリを実行する)のでよいということです。この CPU の場合、オペランドは0、1、2のパターンがあります。つまり、機械語命令 の長さはひとつに決まってるわけではないということです。
実はこの CPU には終了命令が無いので(ある CPU もある)、処理が終了した ら何もしない無限ループにする、という約束になっています。おしまいということなので、CPU君は「簡単、簡単」ということで、今回のおし ごとは終了です。
それを見ていた先生は表示されてる数字を見て「ふむ、3か。ちゃんと足し算 できてるな」と納得しました。