SSEC のプログラム方法

目次

全体構造

データ表現

周辺機器番号(r)バスの指定(b)そのほかの設定(s)四つ組

実行ユニット

非対称命令フィールド

命令

NOP加減算条件判断乗算除算

ふたつのシフト

half correctionシフト

次回につづく


バスの指定(b)

先に書きましたが、バスが8本あり、必ずバスに接続されたレジスタに受け取らないと、データは使えませんでした。

この指定が1桁。


レジスタは1~8の番号で示し、必ず指定する必要がありました。

周辺機器番号が 000 の場合(テープに穴が無い状態)は、レジスタをそのまま使用します。


書き込み時は、レジスタに書き込むだけで、周辺機器にはデータを送りません。

読み込み時は、レジスタに書いてある値をそのまま使い、周辺機器からデータを受け取りません。


SSEC はクロック同期式ではなく、各種準備が整えば動く、という形式でした。

そのため、真空管で作られているレジスタを活用すれば、高速に動作することができます。


そのほかの設定(s)

残る1桁は、データの扱いを示します。


まず、そのデータが「書き込み」なのか「読み込み」なのかを決める必要がありました。


現代の CPU では、命令の中のデータの指定位置で、読み込みと書き込みが決定します。


たとえば、Z80 で LD A,B と書くと、「B の内容を A に入れる」という意味です。決して逆にはなりません。

CPU ごとに位置の持つ意味合いは異なりますが、データを示す位置は重要なのです。


しかし、SSEC では指定位置には大きな意味はなく、別の数値で扱いを決める必要がありました。


読み取りの際は、その符号の扱いを決定します。


0) 符号を強制的に正に

1) 符号を逆に

2) 符号はそのまま

3) 符号を強制的に負に


SSEC では、加算命令はありますが、減算命令がありません。

しかし、符号を逆にして加算すれば、減算したことになります。


書き込みの際は、数値の桁をシフトしてから書き込みができます。


4) 0~ 9の範囲で右シフト

5) 0~ 9の範囲で左シフト

6) 10~19の範囲で右シフト

7) 10~19の範囲で左シフト

8) 20~29の範囲で右シフト

9) 20~29の範囲で左シフト


シフトの「1の位」は、別途指定します。

SSEC が 19桁までしか扱えないのに、20以上の数が指定可能な理由は、後で書きます。


データの扱いの1桁を、0~3にすれば読み込み、4~9 にすれば書き込みを意味します。


四つ組

SSEC の命令は四つ組になっています。

SSEC の前身(?)であるハーバード・マーク1は、歯車計算機でした。そのため、データを「格納する」という概念がありません。

データの転送は、常に足し算になります。単に転送したい場合、先に 0 にクリアしてから足し算します。


実はこの考え方は現代の CPU にも名残が残っていて、たとえば Z80 で ADD A,B は「足し算する」命令…ではありません

B の値の分だけ A を増加させる、歯車計算機のように A を変化させる命令です。結果として足し算になるだけです。


現在 Windows でも Mac でも使われている、Intel x86 系プロセッサでは、基本的にこの形式で演算を行います。

命令と2つのデータ、3つの要素が組み合わされるので、「三つ組」と呼びます。




SSEC の内部、IBM 603 は集計機なのでまさに「累積」していくのですが、それは周辺機器のアクセスとは無関係です。

1命令ごとにアキュムレータをクリアし、外から得た2つのデータをアキュムレータに送り(これで加算になる)、結果を外に送り出す、というのが基本動作でした。


そのため、入力データ2つと出力データ置場の指定、そして命令の4つの要素を指定しなくてはなりません。「四つ組」と呼ばれる形式です。


実は、近代的な CPU では、四つ組の方が一般的です。入力に指定したデータが勝手に書き変わるなどの動作が無く、コンパイラが作りやすいためです。

逆に言えば、四つ組の CPU はコンパイラが前提であり、アセンブラをいじる人が減ったため、あまり馴染みがないのですが…。


実行ユニット

さて、全体構造と、その全体構造を使いこなすためのデータ構造を知ってもらったところで、プログラム方法です。


まず、SSEC は同時に2命令を読み込み、順次実行します。

最初に見てもらった「全体構造図」で、命令記憶回路に A B と書いてあったのを覚えてますでしょうか?


これは、2命令が同時に格納されることを意味していたのです。

プログラムが紙テープという「低速な」機器に保存されているため、少しでも高速化する工夫です。


以下、命令を S1 / S2 に分けて区別します。

2命令のうち、先に実行されるのが S1 命令、後に実行されるのが S2 命令です。

(特許では、「左」「右」という名称も使われていますが、ここでは S1 / S2 に統一します)


S1 / S2 命令が順次実行されるのは、演算部分である IBM 603 が1つしかないためです。

しかし、S1 命令が実行している間に、S2 命令のデータが準備されるようになっています。

S1 命令の結果が書き込まれる間には、S2 命令が実行されます。


並行して動作を行うことで、高速化する工夫があるのです。


非対称

さて、並行動作のために、「命令」は異なる回路を通ります。

この回路の…おそらくは技術上の制約からくる差により、S1 / S2 命令は少し動作が異なるのです。


先に、データの並べ方は自由で、そのため入出力の別を指定する必要がある、と書きました。

しかし、S1 命令には読み取り専用のデータ位置が1か所あります。

同様に、S2 命令には書き込み専用のデータ位置が1か所あります。


これにより、データの並べ方は事実上1つの方法に制限されました。


次ページ: 命令フィールド


前ページ 1 2 3 4 次ページ

(ページ作成 2015-06-11)

前記事:高速化のために     戻る     次記事:SSECの周辺装置
トップページへ

-- share --

2000

-- follow --




- Reverse Link -