更新日: 2023 年 7 月 6 日
BSR
BSR
相対呼び出し (びーえすあーる)
BSR.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 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+2 | ワードオフセット |
実行時間
68000 | 68010 | 68020 | 68030 | 68040 | 68060 |
---|---|---|---|---|---|
18(2/2) | 18(2/2) | 🚧 | 🚧 | 🚧 | 予測あり1 予測なし3 (2/2) |
コンディションコード
フラグ | 入力 | 出力 |
---|---|---|
X | 使用しない | 変化しない |
N | ||
Z | ||
V | ||
C |
解説
- ワードオフセットを Yw とします。
- Yw をロングワードに符号拡張したものを Yl とします。
- A7 から 4 を引きます。
- 命令の先頭アドレス +4 を A7 が指すロングワードへ書き込みます。
- 命令の先頭アドレス +2+Yl を PC へ書き込みます。
BSR.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 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
+2 | ロングワードオフセットの上位ワード | |||||||||||||||
+4 | ロングワードオフセットの下位ワード |
実行時間
68020 | 68030 | 68040 | 68060 |
---|---|---|---|
🚧 | 🚧 | 🚧 | 予測あり1 予測なし3 |
コンディションコード
フラグ | 入力 | 出力 |
---|---|---|
X | 使用しない | 変化しない |
N | ||
Z | ||
V | ||
C |
解説
- ロングワードオフセットを Yl とします。
- A7 から 4 を引きます。
- 命令の先頭アドレス +6 を A7 が指すロングワードへ書き込みます。
- 命令の先頭アドレス +2+Yl を PC へ書き込みます。
BSR.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 | 1 | バイトオフセット |
実行時間
68000 | 68010 |
---|---|
18(2※/2) | 18(2※/2) |
※ 68000/68010 は命令の直後のワードを余分に読み込みます。
コンディションコード
フラグ | 入力 | 出力 |
---|---|---|
X | 使用しない | 変化しない |
N | ||
Z | ||
V | ||
C |
解説
- 68000/68010 は命令の直後のワードを余分に読み込みます。
- バイトオフセットを Yb とします。
- Yb をロングワードに符号拡張したものを Yl とします。
- A7 から 4 を引きます。
- 命令の先頭アドレス +2 を A7 が指すロングワードへ書き込みます。
- 命令の先頭アドレス +2+Yl を PC へ書き込みます。
BRA.S/BSR.S/Bcc.S の命令コードのバイトオフセットの部分に $00 を入れると BRA.W/BSR.W/Bcc.W の命令コードになります。すなわち、BRA.S/BSR.S/Bcc.S で命令の直後に分岐することはできません。アセンブラはそのような命令を出力しませんが、バイトオフセットを自己書き換えするときは注意してください。
BSR.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 | 1 | バイトオフセット |
実行時間
68020 | 68030 | 68040 | 68060 |
---|---|---|---|
🚧 | 🚧 | 🚧 | 予測あり1 予測なし3 (1/2) |
コンディションコード
フラグ | 入力 | 出力 |
---|---|---|
X | 使用しない | 変化しない |
N | ||
Z | ||
V | ||
C |
解説
- バイトオフセットを Yb とします。
- Yb をロングワードに符号拡張したものを Yl とします。
- A7 から 4 を引きます。
- 命令の先頭アドレス +2 を A7 が指すロングワードへ書き込みます。
- 命令の先頭アドレス +2+Yl を PC へ書き込みます。
BRA.S/BSR.S/Bcc.S の命令コードのバイトオフセットの部分に $00 を入れると BRA.W/BSR.W/Bcc.W の命令コードになります。すなわち、BRA.S/BSR.S/Bcc.S で命令の直後に分岐することはできません。アセンブラはそのような命令を出力しませんが、バイトオフセットを自己書き換えするときは注意してください。