条件ジャンプ
読み:じょうけんジャンプ
マイクロプロセッサー
の持つジャンプ命令のうち、ジャンプ条件が付けられているもの。指定したフラグが指定した内容の時にジャンプし、さもなくば何もしない、という機能を持つ。
目次
特徴
実装方法
ブランチ型
スキップ型
ブランチの方法
分岐命令で条件を指定する方法
比較命令で条件を指定する方法
パイプライン
特徴
実装方法
条件ジャンプの実装においては、大きくブランチ型とスキップ型に分けられる。
ブランチ型
ブランチ型というのは、比較条件に応じ、指定したアドレスへジャンプする設計をいう。
Intelの8080系やx86系その他、大半のプロセッサーはこの設計である。
豊富な比較命令と豊富なジャンプ命令が揃えられるのが一般的である。
スキップ型
スキップ型というのは、比較条件に応じ、その比較命令に続く命令を実行せずに飛ばす(スキップする)設計をいう。
PICや、かつてのNECの
ワンチップマイコン
μCOM87系で、これが採用されている。
比較命令はブランチ型と大差なくても、ジャンプ命令は無条件一つのみで済むため、命令数の削減が可能である。
ブランチの方法
ブランチ型の場合、ブランチのさせ方によって、大きく二つに分けられる。
分岐命令で条件を指定する方法
比較命令で条件を指定する方法
前者は、比較命令は少なく済むが分岐命令は多数必要で、時間のかかる分岐命令が更に低速となる問題がある。但し、一つの比較命令で複数のジャンプが利用出来ることがある。
後者は、比較命令が多く必要となるが、分岐命令はtrueかfalseかの二つだけで済むため、高速に処理できる。
分岐命令で条件を指定する方法
多くのプロセッサーは、前者、分岐命令で条件を指定する方法を採用している。これは、演算命令や比較命令で
ゼロフラグ
、
キャリーフラグ
、サインフラグなどを立て、分岐命令でどのフラグを参照するかを指定する方法である。
例えば、
8086
シリーズでは、次のようにする。
cmp ax,bx
jne HOGE
axレジスターとbxレジスターが一致すればゼロフラグが立つ。次の命令では、ゼロフラグが立っていない(ne=not equal=不一致)場合に、HOGEにジャンプする。
比較命令で条件を指定する方法
SuperH
などは、後者、比較命令で条件を指定する方法を採用している。
条件を格納するフラグは、Tフラグただ一つしかない。また、演算命令などでは多くの場合変化せず、比較命令でのみ変化する。これは、演算処理を高速化させる意味もある。
例えば、SuperHシリーズでは、次のようにする。
cmp/eq r0,r1
bf HOGE
r0レジスターとr1レジスターが一致すれば、Tフラグがセットされる。次の命令では、Tフラグがセットされていない(branch if false)場合に、HOGEにジャンプする。
パイプライン
スーパーパイプライン
マイクロプロセッサー
の場合、条件ジャンプによるパイプラインの乱れが高速化に対する大きな課題である。
高速化のために
分岐予測
など様々な技術が作られているほか、
遅延スロット
(
遅延分岐命令
)という解決方法を取るプロセッサーもある。
再検索