ジャンプ

命令形式

          // 相対ジャンプ
[ IF <cond> ] JUMP <ofst13> [ (DB) ];
JUMP <ofst16> [(DB)];

          // ロングジャンプ(絶対アドレス)
[ IF <cond> ] LJUMP <imm24>;

          // 間接ジャンプ
[ IF <cond> ] JUMP (<ireg>) [ (DB) ];

          // 相対ジャンプ
IF NE JUMP jump_target;       // ラベル "jump_target" へ分岐
IF EQ JUMP jump_target (DB);  // 遅延分岐
JUMP jump_target;             // 無条件分岐

          // ロングジャンプ
LJUMP jump_target;

          // 間接ジャンプ
JUMP (I7) (DB);

説明

ジャンプ命令です。実行すると、命令実行アドレスが変わります。

ジャンプ先アドレスをPC相対であらわすか絶対番地で表すかは命令によって変わります。ただし、プログラマはこれを意識する必要はありません。必要な形式の選択はアセンブラが自動的に行うからです。プログラマは単にジャンプ先のラベルを与えてください。

間接ジャンプを行う場合、IREGが与えるのは下位16ビットのアドレスだけです。上位8ビットはIJPGレジスタによって与えられます。

パイプライン・アーキテクチャーを採っているため、ジャンプ命令は必ずストールを起こします。ジャンプ命令の実行には5サイクルかかるため、4サイクルのストールが生じます。

(DB)オプションをつけると遅延分岐を行います。この場合、ジャンプ命令の次の2命令を無条件に実行するため、ストールが2サイクルに緩和されます。遅延分岐を行う時に注意が必要なのは即値DMストア命令と即値PMストア命令です。この二つは2ワード命令であるため、2命令分の場所を占有してしまいます。この命令を遅延スロットで実行する場合には遅延スロットの1スロット目に配置してください。なお、遅延スロットには以下の命令を置くことはできません。

ジャンプ命令実行時のオーバーヘッドや制限についての詳細はISRの8-27ページと、HRMの3-13ページ"Branches and Sequencing"を参照してください。

文法要素

<ofst13> ::= 13ビット即値による、ジャンプ先への相対オフセット
<imm24> ::= 24ビット即値による、ジャンプ先の絶対アドレス
<ireg>  ::= I0, I1, I2, I3, I4, I5, I6, I7
<cond>  ::= EQ, NE, GT, LE, LT, GE, AV, NOT AV, AC, NOT AC,
            SWCOND, NOT SWCOND, MV, NOT MV, NOT CE, TRUE
2191空挺団 | プログラム | EZ-KIT | こぼれ話 | アーキテクチャー | 命令 | レジスタ | DSP掲示板 | FAQ |