CPU の話 by maechan@hannan-u.ac.jp

我輩の出来る範囲で、極力簡単に CPU の原理をたとえ話で説明しよ うと試みます。幼稚な部分もありますが、しばしご辛抱を。

実直なCPU君

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君は何せ単純なので、先生が仕事をお願いするときも一度に複雑なことを 言ったのではパニックしてしまいます。なので、逐一単純な仕事に細かくわけ て、それを順々に指示をしないといけないのです。

そこで先生は考えました。引出し付き書棚を用意しておいて、その中に分解し た作業をメモにして順番にいれておき、CPU君には最初(一番上)の引出しから 順々にあけていき、そこに書いてある指示にしたがえばよい、という約束にし ました。

さらに厄介なことに、メモには16進数の数字1桁しか書けな い (ご都合主義で申し訳ないです) ので、CPU 君に はその数と作業の対応関係の表も渡しておきます。

この対応関係をひもとくことこそ、fetch-decode-execute の decode に対応する処理なのです、が、詳細は略します。

先生はとりあえずこのやり方で仕事を頼んでみることにしました。

とある仕事


CPU君は早速お仕事を開始します。0段目を読んでみると8です。これを対照表 で探すと、「次のメモリの数をAレジスタに保存して、さらに PC を2増やす」 か。次の引出し(1段目)は…ふむ、1が入ってるな。ということで、CPU君は 1つ目のメモ(Aレジスタ)に1を書き込みます。それと同時に PC を2増やし ます。「ということは、いま0段目なので、次は2段目から実行するというこ とか。1段目は処理対象の数値として扱ったので、そうしないと駄目だよね」 とCPU君は納得します。
この場合、0段目のような、実際に実行すべき機械語の命令のことを オ ペコード (operation code, opecode) 、1段目のような、その命令の操 作対象(パラメータ)に対応するものを オペランド (operand) 、 と呼ぶことがあります。

さらに、このオペランドは、一般的に、レジスタ番号を持ったり、メモリアド レスを持ったり、直接の数値(今回はこれ)だったり、いろいろな場合がある ことも頭の片隅に置いておいてください。ちなみにこのような直接の数値のこ とを 即値データ (immediate data) と呼びます。


ということで、次に2段目を読んでみます。9なので、「次のメモリの数をAレ ジスタの値に足して、さらに PC を2増やす」とあります。次のメモリ(3段目) には今度は2が入ってるな。ということで、CPU君は先ほど入れた、1つ目のメ モの値である1と2を足した値、すなわち3にメモを書き直します。と同時に 「2段目の引出しは終って2を足すということで、次は4だな」ということで、 PCを4にします。


次は4段目です。1なので「Aレジスタの内容を表示」です。7セグメント LED (Output 7seg.) にAレジスタの内容である3を表示(出力)します。と同 時に「4段目の引出しは終ったので、次は5段目だな」ということで、PC を5 にします。
この場合、レジスタの内容を表示するだけで、オペランドは無かったので、PC は1増える(すぐ次のメモリを実行する)のでよいということです。この CPU の場合、オペランドは0、1、2のパターンがあります。つまり、機械語命令 の長さはひとつに決まってるわけではないということです。


5段目にはFがあります。これは「次の2つのメモリの数をPCに入れる」とあり ます。PCは8ビットなのでメモリ(引き出し)2つ分だ、ということです。こ の内容は0,5です…PC もともと (0)5 だったので、変わらないことになります。 つまり、次も同じ命令を実行するということで無限ループに陥り、もう他の仕 事はしない、ということです。つまり「おしまい」です。
実はこの CPU には終了命令が無いので(ある CPU もある)、処理が終了した ら何もしない無限ループにする、という約束になっています。
おしまいということなので、CPU君は「簡単、簡単」ということで、今回のおし ごとは終了です。

それを見ていた先生は表示されてる数字を見て「ふむ、3か。ちゃんと足し算 できてるな」と納得しました。


次のステップ