データゼネラルNova
SEZ - キャリーまたは結果のどちらか、または両方がゼロの場合はスキップ
SKP - 常にスキップ
何もなし - 決してスキップしない
実際の算術命令は次のようなものである:
MOV - ソース・アキュムレータの内容をディスティネーション・アキュムレータに移動
COM - ソース・アキュムレータのビット単位の補数をディスティネーション・アキュムレータに移動
ADD - ソース・アキュムレータをディスティネーション・アキュムレータに加算
ADC - ソース・アキュムレータのビット単位の補数を取り、デスティネーション・アキュムレータに加算
NEG - ソース・アキュムレータの負値をディスティネーション・アキュムレータに移動
SUB - デスティネーション・アキュムレータからコンテンツ・ソース・アキュムレータを減算
INC - ソース・アキュムレータの内容に1を加算し、デスティネーション・アキュムレータに移動
AND - 2つのアキュムレータのビットごとのANDを実行し、結果をディスティネーション・アキュムレータに配置
すべてのオプションを利用した算術命令の例は次のとおり:
ADDZR# 0,2,SNC
これは次のようにデコードされている。キャリービットをクリアし、 AC2(アキュムレータ2)の内容をAC0 に追加し、結果を1ビット右に循環シフトし、結果をテストしてキャリービットが設定されているかどうかを確認し、設定されている場合は次の命令をスキップする。 テストを実行した後、結果を破棄する。 実際には、これは2つの数値を加算し、結果が奇数か偶数かをテストする。
DEPOSITを押すと、データスイッチに含まれている値がプログラムカウンタが指すメモリ位置に書き込まれる。 DEPOSIT NEXTを押すと、最初にプログラムカウンタがインクリメントされ、次にポイントされたメモリ位置に書き込まれた。
INST STEP機能により、CPUは現在のプログラムカウンタの位置で1つの命令を実行した後、停止した。 プログラムカウンタは命令実行の一部としてインクリメントされるため、これにより、ユーザはプログラムをシングルステップで実行することができた。 MEMORY STEPは誤記で、CPUは1クロックサイクルを実行して停止した。 これはユーザにとってはほとんど意味がなく、通常はフィールドサービス担当者が診断のためにのみ使用した。
PROGRAM LOADは、通常Novaの起動に使用されるメカニズムであった。 このスイッチがトリガーされると、32語のブートROMがメモリの最初の32語にマッピングされ、プログラムカウンタを0に設定して、CPUを起動した。 ブートROMには、選択されたI/Oデバイスから256語(512バイト)のコードをメモリに読み出し、次に読み出したコードに制御を移すコードが含まれていた。 データスイッチ8〜15は、ブートROMにどのI/Oチャネルからブートするかを指示するために使用された。 スイッチ0がオフの場合、ブートROMはデバイスをポーリングされたデバイス(たとえば、紙テープリーダー)であるとみなし、512バイトが読み込まれるまでポーリングされた入力ループを実行した。 スイッチ0がオンの場合、ブートROMはデバイスがDMA対応デバイスであると仮定し、DMAデータ転送を開始した。
これは、Novaアセンブリ言語による最小限のプログラミング例である。 RDOSで実行するように設計されており、コンソールに "Hello, world." という文字列を出力する。
これらの命令は、さまざまなCPU制御およびステータス機能を実行した。 これらの命令はすべて、実際にはCPUの自己参照I/Oチャネルであるチャネル63のI/O命令の略記ニーモニックであった。
INTA - 割り込みアクノリッジ(確認)。 割り込みデバイスのチャネル番号を指定されたアキュムレータに転送
INTDS - すべての割り込みを無効化
INTEN - すべての割り込みを有効化
IORST - I/Oリセット。 I/Oバス上でリセット信号を送信し、すべてのI/Oを停止し、割り込みを無効化し、保留中のすべての割り込みをクリア
MSKO - マスクアウト。 指定されたアキュムレータの内容を使用して割り込みマスクを設定。 マスクがどのように解釈されるかは、各I/Oデバイスの実装に依存する。 一部のデバイスはマスクできなかった。
READS - フロントパネルの16個のデータスイッチの内容を指定されたアキュムレータに転送
HALT - CPUを停止。 一度停止したCPUはフロントパネルで手動で介入することによってのみ再起動させることができた。