更新日: 2023 年 3 月 18 日
BRA
BRA
相対分岐 (ぶら)
BRA.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 | 0 | 0 | 0 | 0 |
+2 | ワードオフセット |
実行時間
68000 | 68010 | 68020 | 68030 | 68040 | 68060 |
---|---|---|---|---|---|
10(2/0) | 10(2/0) | 🚧 | 🚧 | 🚧 | 予測あり0 予測なし3 (2/0) |
コンディションコード
フラグ | 入力 | 出力 |
---|---|---|
X | 使用しない | 変化しない |
N | ||
Z | ||
V | ||
C |
解説
- ワードオフセットを Yw とします。
- Yw をロングワードに符号拡張したものを Yl とします。
- 命令の先頭アドレス +2+Yl を PC へ書き込みます。
BRA.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 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
+2 | ロングワードオフセットの上位ワード | |||||||||||||||
+4 | ロングワードオフセットの下位ワード |
実行時間
68020 | 68030 | 68040 | 68060 |
---|---|---|---|
🚧 | 🚧 | 🚧 | 予測あり0 予測なし3 |
コンディションコード
フラグ | 入力 | 出力 |
---|---|---|
X | 使用しない | 変化しない |
N | ||
Z | ||
V | ||
C |
解説
- ロングワードオフセットを Yl とします。
- 命令の先頭アドレス +2+Yl を PC へ書き込みます。
BRA.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 | 0 | 0 | 0 | 0 | バイトオフセット |
実行時間
68000 | 68010 |
---|---|
10(2※/0) | 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 で命令の直後に分岐することはできません。アセンブラはそのような命令を出力しませんが、バイトオフセットを自己書き換えするときは注意してください。
68000/68010 は命令の直後のワードを余分に読み込むので、例えば、X68000 でバッテリバックアップ SRAM にプログラムを詰め込んで最後のワードまで使い切ったとき、最後のワードが BRA.S <label> だと、そこで次のワードを読み込もうとしてバスエラーが発生します。
BRA.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 | 0 | 0 | 0 | 0 | バイトオフセット |
実行時間
68020 | 68030 | 68040 | 68060 |
---|---|---|---|
🚧 | 🚧 | 🚧 | 予測あり0 予測なし3 (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 で命令の直後に分岐することはできません。アセンブラはそのような命令を出力しませんが、バイトオフセットを自己書き換えするときは注意してください。