WWIの命令と画面

目次

使用可能レジスタ

演算命令

加減算命令乗算命令除算命令シフト命令呼び出し命令ストア命令

完成後の追加命令群

周辺機器制御命令I/O 命令Flip-Flop reset 命令チェック命令ビット演算命令謎の命令

完成時の27命令って?

オシロスコープ

初期のもの中期のもの後期のもの


シフト命令

アキュムレータとBレジスタの内容を、右または左にビットシフトします。

この命令だけが、アドレスを必要としません。代わりに、アドレス部分に入った数値の下位4bitを「シフトする数」として使用します。

N ビットシフトは、左シフトの場合 2Nを掛けたのと同じ意味を持ち、右シフトの場合 2Nで割ったのと同じ意味を持ちます。

アキュムレータが左、Bレジスタが右に位置し、つながっているものとみなされます。


1952年時点では、シフト命令は機能拡張されています。

まず、アドレス部分の数値は「下位4bit」ではなく「下位5bit」がとられるようになっていました。

これは、16bit のアキュムレータに対して、下位4bit では 15bit までしかシフトできず、Bレジスタと接続しているとみなしたときに「Bレジスタのすべてをアキュムレータに移動」ができないためだと思われます。


そして、その「Bレジスタに接続しているとみなす」機能が選択できるようになっています。

本来予定されていた動作をさせるためには、アドレス部分の最上位ビットを 1 にする必要があります。


ここが 0 だと、B レジスタが存在しておらず、そこには「0」しかないようにふるまいます。

(実際には、B レジスタが 0 クリアされます)


ニーモニックでは、レジスタの最上位ビットを 1 にする命令を sr* sl* のように、* を付けて表現しました。


1952年の末時点では、さらに「左サイクル」命令が追加されています。(1952年頭に書かれたサブルーチン集に登場しない、というだけで、追加時期は確定できません)

左シフトを行い、アキュムレータの左から「追い出された」ビットを、Bレジスタの右端に入れます。これにより、消えてしまうビットはなくなります。

これは、現在でいう「ローテート」命令です。シフトとは微妙に異なりますが、同じグループに入れておきます。


さらに、1952 年末の時点で、ニーモニックが変更になっています。* を付けるわかりにくい表記ではなく、Bレジスタクリアの有無が「別の命令」としてニーモニックが割り振られました。

sl sl*11011Shift Left左シフト
sr sr*11100Shift Right右シフト
cl cl*11110Cycle Left左サイクル
slr110110Shift Left and Round切り捨て左シフト
slh110111Shift Left and Hold内容保持左シフト
srr111000Shift Right and Round切り捨て右シフト
srh111001Shift Right and Hold内容保持右シフト
clc111100Cycle Left and Clearクリアして左サイクル
clh111101Cycle Left and Hold内容保持左サイクル

呼び出し命令

呼び出し…というと、なんだかサブルーチンを呼び出すみたいです。

たしかにその目的で作られた命令なのですが、現代的な意味でのサブルーチンコールではなく、単にジャンプ命令です。

まだスタック構造は発明されておらず、return に相当する命令はありません。自己書き換えによって、サブルーチン最後のジャンプ命令のアドレスを書き換え、適切に戻れるようにする必要がありました。


無条件呼び出しは、指定されたアドレスにジャンプします。

条件呼び出しは、設計段階の記述では、アキュムレータが正の数(0を含まない)の場合のみ、指定アドレスにジャンプします。

しかし、実際の完成時には条件が逆になっており、アキュムレータが負の値を示している場合…つまり、最上位ビットが立っていれば指定アドレスにジャンプするようになっていたようです。


これらの呼出し命令は、実行時にプログラムカウンタをAレジスタにコピーします。この動作は計画当初のタイミングチャートには載っていないもので、1952年初頭までに追加された動作だと思われます。

普段は演算に使われるAレジスタですが、この動作の追加の意味については次の節で解説します。

sp01110SubProgram無条件呼び出し
cp01111Conditional Program条件呼び出し

ストア命令

アキュムレータの内容を、メモリに書き込みます。

16bit すべてを書き込むこともできますし、アドレス部分の 11bit のみを書き込むこともできます。

11bit 書き込みの場合、命令部分 5bit は、以前のメモリ内容が保持されます。プログラムの自己書き換えテクニックが使用する際、アドレス部分のみの書き換えは非常に多く使われるため、重要な命令です。


1947年の計画当初では、メモリの書き込みと同時に、内容を CRT に出力する命令もありました。しかし、具体的にどのように表示を行うか、などは一切考えられていなかった様子がうかがわれます。

結局、この命令は完成時点ですでに実装されていません。当然、命令コードもありません。


1952年頭時点で、二つの命令が追加されているのが確認できます。

アキュムレータとメモリを1命令で交換する、ex 命令が追加されています。この命令は、当初別のニーモニックが割り振られていたようですが、このことは後述します。

ta 命令は、全命令の中で唯一の、Aレジスタを対象とする命令です。Aレジスタのアドレス部 11bit を、指定メモリに転送します。

「呼び出し命令」の節に書いた通り、呼び出し時にはAレジスタにプログラムカウンタがコピーされます。プログラムカウンタは、命令実行時にはすでにインクリメントされているので、この時点でAレジスタは「呼出し命令の次のアドレス」を格納しています。

このアドレス部分のみをメモリに書きだせる、ということは、命令の自己書き換えによってサブルーチンからの「復帰」命令を作り出せる、ということになります。

ts01000Transfer to Storageメモリ書き込み
td01001Transfer to Digitsアドレス部分 11bit 書き込み
sd-----Store and Displayメモリと表示デバイスに書き込み
ex01101EXchangeアキュムレータとメモリの交換
ta01010Transfer Address復帰アドレス(11bit)を書き込み

計画当初に想定されていた15命令を含む命令群は、以上です。

これ以降、完成時までに追加された 27命令、もしくはその後追加された 33命令、ということになります。


次ページ: 完成後の追加命令群


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

(ページ作成 2013-02-09)
(最終更新 2013-02-15)

前記事:WWI 初の現代的コンピュータ     戻る     次記事:Whirlwindのアセンブラ
トップページへ

-- share --

1000

-- follow --




- Reverse Link -