データゼネラルNova
すべての算術命令はアキュムレータ間で動作する。 2つのオペランドを必要とする演算では、1つはソース・アキュムレータから、もう1つはディスティネーション・アキュムレータから取り出され、結果はディスティネーション・アキュムレータに格納された。 単一オペランド演算では、オペランドはソース・レジスタから取り出され、結果はデスティネーション・レジスタに置き換わった。 すべての単一オペランド演算では、ソース・アキュムレータとディスティネーション・アキュムレータが同じであることは許容され、演算は期待どおりに機能した。
すべての算術命令には「ノーロード(no-load)」ビットが含まれており、これがセットされると、結果がディスティネーション・レジスタに転送されるのを抑制した。これは、ディスティネーション・レジスタの既存の内容を失うことなくテストを実行するために、テストオプションと組み合わせて使用された。 アセンブリ言語では、オペコードに '#' を追加すると、ノーロード・ビットが設定される。
CPUには、キャリービットと呼ばれる1ビットレジスタがあり、このレジスタは、算術演算の後に最上位ビットのキャリーアウト(桁あふれ)を格納する。 キャリービットは、命令内の2ビットフィールドを使用して演算を実行する前に、必要な値に設定することができる。 ビットは、命令を実行する前にセット、クリア、または補完することができる。 アセンブリ言語では、これらのオプションは、オペコードに文字を追加することによって指定される。 'O' - キャリービットをセット、'Z' - キャリービットをクリア、'C' - キャリービットを補完、何もなし - キャリービットをそのままにする。
スイッチレバーを離すと中立位置に戻った。
Nova 840の写真を参照すると、左から最初の4つのスイッチが4つのアキュムレータのEXAMINEとDEPOSIT機能を実行する。 これらのうちの1つでEXAMINEを押すと、アキュムレータの現在値がデータランプに二進数で表示された。 DEPOSITを押すと、データスイッチに現在設定された二進数値がアキュムレータに転送された。
右に進むと、次のスイッチはRESET/STOPスイッチであった。 STOPを押すと、CPUは現在の命令の完了後に停止する。 RESETを押すと、CPUは直ちに停止し、CPU内部レジスタをいくつかクリアし、接続されているすべてのデバイスにI/Oリセット信号を送信する。 その右側のスイッチがSTART/CONTINUEスイッチである。 CONTINUEを押すと、CPUは現在プログラムカウンタが指し示している命令の実行を再開する。 STARTを押すと、現在データスイッチ1〜15に設定されている値がプログラムカウンタに転送され、そこから実行が開始された。
次の2つのスイッチは、フロントパネルからのメモリの読み出しと書き込みを行う。 EXAMINEを押すと、データスイッチ1〜15に設定されている値がプログラムカウンタに転送され、対応するメモリに値が取り込まれ、その値がデータランプに表示される。 EXAMINE NEXTを押すと、プログラムカウンタの値がインクリメントされ、そのメモリ位置の検査操作が行われ、ユーザーは一連のメモリ位置をステップ実行できる。
ISZ命令とDSZ命令では、読み取られたメモリ位置からライトバックが行われるまでの間にインクリメントまたはデクリメントが行われ、CPUは単に結果がゼロか非ゼロかの通知を待つだけであった。 これらの命令は、アキュムレータを拘束することなくメモリ位置をループカウンタとして使用できるため便利であったが、同等の算術命令よりも処理速度が遅くなった。
メモリ参照命令の例:
LDA 1,COUNT
COUNTというラベルのメモリ・ロケーションの内容をアキュムレータ1に転送する。 COUNTが .NREL 空間にあると仮定すると、この命令は次のようになる: LDA 1,1,(COUNT-(.+1))
ここで、'.' はLDA命令の位置を表す。
JSR@ 0,17
ページ・ゼロ空間のロケーション17の内容で指定されたメモリアドレスに間接的にジャンプし、リターンアドレスをアキュムレータ3に格納する。 これは、初期のNovaモデルでRDOSシステムコールを行うための標準的な方法で、アセンブリ言語のニーモニック ".SYSTM" はこれに変換される。
JMP 0,3
アキュムレータ3にアドレスが格納されているメモリ位置にジャンプする。 JSR命令はリターンアドレスをアキュムレーター3に残しているので、これは関数やサブルーチン呼び出しから戻るための一般的な方法であった。
STA 0,3,-1
アキュムレータ0の内容を、アキュムレータ3に含まれるアドレスより1つ少ない位置に格納する。
DSZ COUNT
COUNTというラベルの場所の値をデクリメントし、結果がゼロの場合は次の命令をスキップする。上記の場合と同様に、COUNTが .NREL 空間にあると仮定すると以下のようになる: DSZ 1,(COUNT-(.+1))