算術命令
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/04/21 02:01 UTC 版)
「データゼネラルNova」の記事における「算術命令」の解説
すべての算術命令はアキュムレータ間で動作する。 2つのオペランドを必要とする演算では、1つはソース・アキュムレータから、もう1つはディスティネーション・アキュムレータから取り出され、結果はディスティネーション・アキュムレータに格納された。 単一オペランド演算では、オペランドはソース・レジスタから取り出され、結果はデスティネーション・レジスタに置き換わった。 すべての単一オペランド演算では、ソース・アキュムレータとディスティネーション・アキュムレータが同じであることは許容され、演算は期待どおりに機能した。 すべての算術命令には「ノーロード(no-load)」ビットが含まれており、これがセットされると、結果がディスティネーション・レジスタに転送されるのを抑制した。これは、ディスティネーション・レジスタの既存の内容を失うことなくテストを実行するために、テストオプションと組み合わせて使用された。 アセンブリ言語では、オペコードに '#' を追加すると、ノーロード・ビットが設定される。 CPUには、キャリービットと呼ばれる1ビットレジスタがあり、このレジスタは、算術演算の後に最上位ビットのキャリーアウト(桁あふれ)を格納する。 キャリービットは、命令内の2ビットフィールドを使用して演算を実行する前に、必要な値に設定することができる。 ビットは、命令を実行する前にセット、クリア、または補完することができる。 アセンブリ言語では、これらのオプションは、オペコードに文字を追加することによって指定される。 'O' - キャリービットをセット、'Z' - キャリービットをクリア、'C' - キャリービットを補完、何もなし - キャリービットをそのままにする。 ノーロード・ビットも指定された場合、指定したキャリー値が計算に使用されるが、実際のキャリーレジスタは変更されない。 すべての算術命令には、シフトオプションを指定するために使用できる2ビットのフィールドが含まれており、これは結果がディスティネーション・レジスタにロードされる前に適用される。 1ビットの左または右シフトを指定したり、結果の2バイトを入れ替えたりすることができる。 シフトは17ビットの循環で、キャリービットは最上位ビットの「左側」にある。 言い換えれば、左シフトが実行されると、結果の最上位ビットがキャリービットにシフトされ、キャリービットの以前の内容が結果の最下位ビットにシフトされる。 バイトスワップはキャリービットに影響を与えない。 アセンブリ言語では、これらのオプションは、オペコードに文字を追加することによって指定された。 'L' - 左シフト、 'R' - 右シフト、 'S' - バイトスワップ、何もなし - シフトまたはスワップを実行しない。 すべての算術命令には、演算の結果に適用されるテストを指定できる3ビットのフィールドが含まれていた。 テストが真と評価された場合、次の命令はスキップされる。 アセンブリ言語では、テストオプションは命令の第3オペランドとして指定される。 利用可能なテストは次のとおりである: SZR - 結果がゼロの場合にスキップ SNR - 非ゼロの結果をスキップ SZC - ゼロキャリーでスキップ SNC - ゼロ以外のキャリーでスキップ SBN - キャリーと結果の両方がゼロ以外の場合はスキップ SEZ - キャリーまたは結果のどちらか、または両方がゼロの場合はスキップ SKP - 常にスキップ 何もなし - 決してスキップしない 実際の算術命令は次のようなものである: MOV - ソース・アキュムレータの内容をディスティネーション・アキュムレータに移動 COM - ソース・アキュムレータのビット単位の補数をディスティネーション・アキュムレータに移動 ADD - ソース・アキュムレータをディスティネーション・アキュムレータに加算 ADC - ソース・アキュムレータのビット単位の補数を取り、デスティネーション・アキュムレータに加算 NEG - ソース・アキュムレータの負値をディスティネーション・アキュムレータに移動 SUB - デスティネーション・アキュムレータからコンテンツ・ソース・アキュムレータを減算 INC - ソース・アキュムレータの内容に1を加算し、デスティネーション・アキュムレータに移動 AND - 2つのアキュムレータのビットごとのANDを実行し、結果をディスティネーション・アキュムレータに配置 すべてのオプションを利用した算術命令の例は次のとおり: ADDZR# 0,2,SNC これは次のようにデコードされている。キャリービットをクリアし、 AC2(アキュムレータ2)の内容をAC0 に追加し、結果を1ビット右に循環シフトし、結果をテストしてキャリービットが設定されているかどうかを確認し、設定されている場合は次の命令をスキップする。 テストを実行した後、結果を破棄する。 実際には、これは2つの数値を加算し、結果が奇数か偶数かをテストする。
※この「算術命令」の解説は、「データゼネラルNova」の解説の一部です。
「算術命令」を含む「データゼネラルNova」の記事については、「データゼネラルNova」の概要を参照ください。
- 算術命令のページへのリンク