ここまでのプログラムは、アドレスの順番に記述されている命令を単純に実行するものでした。プログラムを効率良く記述したり、高度な処理を実現するには、命令の実行順序を制御する必要があります。
CPUが次に実効する命令のアドレスはプログラムレジスタPRに格納されています。これは1つの命令を実行すると、自動的に次の命令のアドレスを指すようになっています。PRを値を途中で変更してやることにより、プログラムの流れを制御することができます。
また種々の条件によって、実行する内容を変更したい場合があります。このような処理を記述するのにも、分岐命令が必要です。
ジャンプ命令には6種類(JUMP, JPL, JMI, JNZ, JZE, JOV)ありますが、基本的に書き方は共通です。すなわち、
命令コード 実効アドレス
このように、ジャンプの種類を示す命令コードと、ジャンプ先のアドレスを示す実効アドレスの組み合わせです。
具体的なジャンプ先を指定するのが実効アドレスです。これには、色々な記述方法が考えられます。
主記憶の特定の絶対アドレスを直接定数で指定します。
JUMP 1100
この例では、無条件に1100番地にジャンプします。絶対アドレスの指定はプログラムの可搬性を損なうため、一般的ではありません。
ジャンプ先をラベルで指定する方法です。よく用いられます。
JUMP PRC1
この例では、ラベル PRC1 へジャンプします。
ジャンプ先を指標レジスタで指定することもできます。
JUMP 0,GR7
この例では、GR7に格納されたアドレスにジャンプします。
この他、絶対アドレスと指標レジスタの組み合わせ と、ラベルと指標レジスタの組み合わせ が、可能です。
命令コード:JUMP
無条件にプログラムレジスタPRに実効アドレス値を代入します。すなわち、プログラムは無条件に実効アドレスにジャンプします。JUMPは何の条件も無くジャンプしますが、これ以外の全てのジャンプ命令は、特定の条件においてジャンプします。無条件ジャンプ以外のジャンプを条件付きジャンプといいます。
命令コード:JPL
SF = 0 で、かつ ZF = 0 のときに、実効アドレスにジャンプします。
命令コード:JMI
SF = 1 のときにジャンプします。
命令コード:JNZ
ZF = 0 のときにジャンプします。
命令コード:JZE
ZF = 1 のときにジャンプします。
命令コード:JOV
OF = 1 のときにジャンプします。
名前 | 命令 | OF | SF | ZF |
---|---|---|---|---|
無条件分岐 | JUMP | - | - | - |
正分岐 | JPL | - | 0 | 0 |
負分岐 | JMI | - | 1 | - |
非零分岐 | JNZ | - | - | 0 |
零分岐 | JZE | - | - | 1 |
オーバーフロー分岐 | JOV | 1 | - | - |