条件分岐命令
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/26 17:01 UTC 版)
多くの分岐命令は、PSW(ステータスレジスタ)の条件コードの状態に基づいて分岐するか否かを決定する。一般に直前にCMP命令、BIT命令、TST命令などを行って条件コードをセットする。算術演算命令や論理演算命令も条件コードをセットする。インテルのx86とは異なり、MOV命令も条件コードをセットする。したがって、転送した値がゼロか否か、負か否かで条件分岐することもできる。 命令の上位8ビットが命令コードである。下位8ビットで現在のプログラムカウンタからの相対オフセットを指定する。オフセットはワード数であり、分岐先アドレスはそれを2倍してPCに加えたものとなる。またオフセットは符号付整数なので、前方にも後方にも分岐できる。 15 11 10 8 7 0 x 0 0 0 0 Opcode Offset 命令コードニーモニック説明0000xx (システム命令) 0004xx BR 無条件分岐 0010xx BNE 等しくないとき分岐 (Z=0) 0014xx BEQ 等しいとき分岐 (Z=1) 0020xx BGE 大きいか等しいとき分岐 (N|V = 0) 0024xx BLT 小さいとき分岐 (N|V = 1) 0030xx BGT 大きいとき分岐 (N^V = 1) 0034xx BLE 小さいか等しいとき分岐 (N^V = 0) 1000xx BPL 正のとき分岐 (N=0) 1004xx BMI 負のとき分岐 (N=1) 1010xx BHI 高いとき分岐 (C|Z = 0) 1014xx BLOS 低いか同じとき分岐 (C|Z = 1) 1020xx BVC オーバーフローしていないとき分岐 (V=0) 1024xx BVS オーバーフローしているとき分岐 (V=1) 1030xx BCC キャリーがないとき分岐 (C=0) BHIS 高いか同じとき分岐 (C=0) 1034xx BCS キャリーがあるとき分岐 (C=1) BLO 低いとき分岐 (C=1) 2オペランド命令の表にある SOB (subtract one and branch) も条件分岐命令である。レジスタオペランドをデクリメントし、結果がゼロでないとき命令の下位6ビットを符号なしオフセットと解釈して後方に分岐する。 分岐できる範囲が限られているため、コードが成長していくとこれらの命令では分岐先に到達できなくなる可能性がある。その場合2ワードを必要とするJMP命令に書き換え、JMP命令は無条件分岐なので、例えば元が BEQ だった場合は BNE に書き換えてJMP命令をスキップするようにする。
※この「条件分岐命令」の解説は、「PDP-11」の解説の一部です。
「条件分岐命令」を含む「PDP-11」の記事については、「PDP-11」の概要を参照ください。
- 条件分岐命令のページへのリンク