更新日: 2023 年 7 月 6 日
Bcc
Bcc
条件付き相対分岐 (びーしーしー)
条件
条件コード | Bcc | BNcc※ | 式 | 説明 | |||
---|---|---|---|---|---|---|---|
0 | 0 | 1 | 0 | BHI | BNLS | ~C&~Z | 符号なし比較で大きいとき分岐、さもなくば通過 |
1 | BLS | BNHI | C|Z | 符号なし比較で小さいか等しいとき分岐、さもなくば通過 | |||
1 | 0 | 0 | BCC | BNCS | ~C | キャリーがないとき分岐、さもなくば通過 | |
BHS | BNLO | 符号なし比較で大きいか等しいとき分岐、さもなくば通過 | |||||
1 | BCS | BNCC | C | キャリーがあるとき分岐、さもなくば通過 | |||
0 | BLO | BNHS | 符号なし比較で小さいとき分岐、さもなくば通過 | ||||
1 | BNE | BNEQ | ~Z | 等しくないとき分岐、さもなくば通過 | |||
0 | BNZ | BNZE | ゼロでないとき分岐、さもなくば通過 | ||||
1 | 1 | BEQ | BNNE | Z | 等しいとき分岐、さもなくば通過 | ||
0 | 0 | BZE | BNNZ | ゼロのとき分岐、さもなくば通過 | |||
1 | 0 | BVC | BNVS | ~V | オーバーフローがないとき分岐、さもなくば通過 | ||
1 | BVS | BNVC | V | オーバーフローがあるとき分岐、さもなくば通過 | |||
1 | 0 | BPL | BNMI | ~N | 正のとき分岐、さもなくば通過 | ||
1 | BMI | BNPL | N | 負のとき分岐、さもなくば通過 | |||
1 | 0 | 0 | BGE | BNLT | (N&V)|(~N&~V) | 符号あり比較で大きいか等しいとき分岐、さもなくば通過 | |
1 | BLT | BNGE | (N&~V)|(~N&V) | 符号あり比較で小さいとき分岐、さもなくば通過 | |||
1 | 0 | BGT | BNLE | (N&V&~Z)|(~N&~V&~Z) | 符号あり比較で大きいとき分岐、さもなくば通過 | ||
1 | BLE | BNGT | Z|(N&~V)|(~N&V) | 符号あり比較で小さいか等しいとき分岐、さもなくば通過 |
※ BNcc は HAS060.X で拡張された書き方です。
Bcc.W <label>
68000/68010/68020/68030/68040/68060 の命令
命令コード
アドレス | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
+0 | 0 | 1 | 1 | 0 | 条件コード | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |||
+2 | ワードオフセット |
実行時間
68000 | 68010 | 68020 | 68030 | 68040 | 68060 |
---|---|---|---|---|---|
分岐10 通過12 (2/0) | 分岐10 通過12 (2/0) | 🚧 | 🚧 | 🚧 | 予測通り分岐0 予測通り通過1 予測なし前方通過1 予測なし後方分岐3 予測なし前方分岐7 予測なし後方通過7 予測外れ7 (2/0) |
コンディションコード
フラグ | 入力 | 出力 |
---|---|---|
X | 使用しない | 変化しない |
N | 使用する※ | |
Z | ||
V | ||
C |
※条件の式にあるフラグを使用します。
解説
- ワードオフセットを Yw とします。
- Yw をロングワードに符号拡張したものを Yl とします。
- 条件が成立しているとき命令の先頭アドレス +2+Yl を PC へ書き込みます。
Bcc.L <label>
68020/68030/68040/68060 の命令
命令コード
アドレス | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
+0 | 0 | 1 | 1 | 0 | 条件コード | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |||
+2 | ロングワードオフセットの上位ワード | |||||||||||||||
+4 | ロングワードオフセットの下位ワード |
実行時間
68020 | 68030 | 68040 | 68060 |
---|---|---|---|
🚧 | 🚧 | 🚧 | 予測通り分岐0 予測通り通過1 予測なし前方通過1 予測なし後方分岐3 予測なし前方分岐7 予測なし後方通過7 予測外れ7 |
コンディションコード
フラグ | 入力 | 出力 |
---|---|---|
X | 使用しない | 変化しない |
N | 使用する※ | |
Z | ||
V | ||
C |
※条件の式にあるフラグを使用します。
解説
- ロングワードオフセットを Yl とします。
- 条件が成立しているとき命令の先頭アドレス +2+Yl を PC へ書き込みます。
Bcc.S <label>
68000/68010 の命令
命令コード
アドレス | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
+0 | 0 | 1 | 1 | 0 | 条件コード | バイトオフセット |
実行時間
68000 | 68010 |
---|---|
通過8 分岐10 (2※/0) | 通過8 分岐10 (2※/0) |
※ 68000/68010 は命令の直後のワードを余分に読み込みます。
コンディションコード
フラグ | 入力 | 出力 |
---|---|---|
X | 使用しない | 変化しない |
N | 使用する※ | |
Z | ||
V | ||
C |
※条件の式にあるフラグを使用します。
解説
- 68000/68010 は命令の直後のワードを余分に読み込みます。
- バイトオフセットを Yb とします。
- Yb をロングワードに符号拡張したものを Yl とします。
- 条件が成立しているとき命令の先頭アドレス +2+Yl を PC へ書き込みます。
BRA.S/BSR.S/Bcc.S の命令コードのバイトオフセットの部分に $00 を入れると BRA.W/BSR.W/Bcc.W の命令コードになります。すなわち、BRA.S/BSR.S/Bcc.S で命令の直後に分岐することはできません。アセンブラはそのような命令を出力しませんが、バイトオフセットを自己書き換えするときは注意してください。
Bcc.S <label>
68020/68030/68040/68060 の命令
命令コード
アドレス | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
+0 | 0 | 1 | 1 | 0 | 条件コード | バイトオフセット |
実行時間
68020 | 68030 | 68040 | 68060 |
---|---|---|---|
🚧 | 🚧 | 🚧 | 予測通り分岐0 予測通り通過1 予測なし前方通過1 予測なし後方分岐3 予測なし前方分岐7 予測なし後方通過7 予測外れ7 (1/0) |
コンディションコード
フラグ | 入力 | 出力 |
---|---|---|
X | 使用しない | 変化しない |
N | 使用する※ | |
Z | ||
V | ||
C |
※条件の式にあるフラグを使用します。
解説
- バイトオフセットを Yb とします。
- Yb をロングワードに符号拡張したものを Yl とします。
- 条件が成立しているとき命令の先頭アドレス +2+Yl を PC へ書き込みます。
BRA.S/BSR.S/Bcc.S の命令コードのバイトオフセットの部分に $00 を入れると BRA.W/BSR.W/Bcc.W の命令コードになります。すなわち、BRA.S/BSR.S/Bcc.S で命令の直後に分岐することはできません。アセンブラはそのような命令を出力しませんが、バイトオフセットを自己書き換えするときは注意してください。