素朴なコンピュータの設計: 論理回路入門 9

この章では、次章で作る素朴なコンピュータの設計仕様書を考えます。

素朴コンピュータの要件

どういう機能をコンピュータに実装するかを考えましょう。

レジスタ

ハードウェアに直接組み込まれている記憶領域をレジスタといいます。これは通常メインメモリよりは小規模で、計算の途中結果を格納するのに使われます。現代的な CPU であれば 64 ビットのレジスタが数十個あるのですが、今回は 8 ビットのレジスタを 2 個としましょう。これらをレジスタ A、レジスタ B とよびます。それぞれ 8 ビットの記憶ができます。

命令セット

コンピュータが実行すべき命令について考えましょう。これまで作ったパーツだけで構成しなければならないので、そこまで多くの命令を実装することは期待できません。今回は以下の 3 つの命令を考えましょう。

即値代入

コンピュータに movi n と命令すると、レジスタ A に 数 n が格納されるようにします。たとえば、movi 3 と命令すると、レジスタ A の値は次のクロックで 3 に変わるとします。

加算


コンピュータに add と命令すると、レジスタ B に A + B の値が格納されるようにします。たとえば、レジスタ A の値が 12、レジスタ B の値が 5 の状況で add と命令すると、次のクロックでレジスタ B の値が 17 に変わるとします。

スワップ

コンピュータに swap と命令すると、レジスタ A と B の値が交換されるようにします。たとえば、レジスタ A の値が 12、レジスタ B の値が 5 の状況で add と命令すると、次のクロックでレジスタ A の値が 5、レジスタ B の値が 12 に変わるとします。

出力

出力はレジスタ B の値がそのまま LED に常に表示され続けるとします。

プログラム

以上の命令だけで一体何ができるのだという感じですが、組み合わせることで色んな計算が実現できます。実例をいくつか見てみましょう。

フィボナッチ数の計算

フィボナッチ数は \(F_0 = 0, F_1 = 1, F_{n+2} = F_{n+1} + F_n\) で定義される数列です。

以下は movi, add, swap 命令だけで作ったフィボナッチ数 \(F_5\) の計算プログラムです。右二列は補助的に、命令を実行した後の各レジスタの値を示しています。

命令レジスタ A の値レジスタ B の値
movi 110
add11
swap11
add12
swap21
add23
swap32
add35
swap53
add58
swap85
add813

累乗

以下は movi, add, swap 命令だけで作った 3^4 の計算プログラムです。

命令レジスタ A の値レジスタ B の値
movi 330
add33
add36
add39
movi 009
swap90
add99
add918
add927
movi 0027
swap270
add2727
add2754
add2781

まとめ

  • 次章で作るコンピュータのスペックを考えた

次章ではいよいよこのスペックのコンピュータを実装します。

前章へもどる 第一章へもどる 次章へすすむ