B、BL、BX、BLX、BXJ

分岐、リンク付き分岐、分岐と命令セットの切り替え、リンク付き分岐と命令セットの切り替え、分岐と Jazelle 状態への切り替えを行う命令です

Show/hide構文

op1{cond}{.W} label
op2{cond} Rm

各パラメータには以下の意味があります。

op1

次のいずれかを指定します。

B

分岐命令です。

BL

リンク付き分岐命令です。

BLX

リンク付き分岐と命令セットの切り替えを行う命令です。

op2

次のいずれかを指定します。

BX

分岐と命令セットの切り替えを行う命令です。

BLX

リンク付き分岐と命令セットの切り替えを行う命令です。

BXJ

分岐と Jazelle 実行状態への変更を行う命令です。

cond

任意の条件コードを指定します。cond は、これらの命令のすべての形式で使用できるわけではありません。

.W

32 ビットThumb の 32 ビット B 命令を使用させるために命令の幅の指定子を指定します(省略可)。

label

PC 相対式を指定します。

Rm

分岐先アドレスを保持するレジスタを指定します。

Show/hide演算

これらのすべての命令は、label への分岐または Rm に保持されているアドレスへの分岐を発生させます。さらに、以下の処理を行います。

  • BLBLX 命令は、次の命令のアドレスを LR(R14:リンクレジスタ)にコピーします。

  • BX 命令と BLX 命令は、プロセッサ状態を ARM から Thumb に変更したり、Thumb から ARM に変更したりできます。

    BLX label を使用すると、状態が必ず変更されます。

    BX RmBLX Rm を使用すると Rm のビット [0] からターゲットの状態を得ることができます。

    • Rm のビット [0] が 0 の場合、プロセッサは ARM 状態に切り替わるか、ARM 状態が維持されます。

    • Rm のビット [0] が 1 の場合、プロセッサは Thumb 状態に切り替わるか、Thumb 状態が維持されます。

  • BXJ 命令はプロセッサの状態を Jazelle に変更します。

Show/hide命令の使用可否と分岐の範囲

Table 12 は、ARM 状態と Thumb 状態で使用できる命令を示しています。この表に記載されていない命令は使用できません。括弧内は、命令を使用できるアーキテクチャの最初のバージョンを示しています。

Table 12. 分岐命令の使用可否と分岐の範囲

命令ARM 16 ビット Thumb32 ビット Thumb
B label±32MB(すべて)±2KB(すべての T)±16MB[a](すべての T2)
B{cond} label±32MB(すべて)-252 ~ +258(すべての T)±1MBa(すべての T2)
BL label±32MB(すべて)±4MB [b](すべての T)±16MB(すべての T2)
BL{cond} label±32MB(すべて)- --
BX Rm [c]使用可能(4T、5)使用可能(すべての T)16 ビットを使用(すべての T2)
BX{cond} Rm [c]使用可能(4T、5)- --
BLX label±32MB(5)±4MB [b](5T)±16MB(ARMv7-M を除くすべての T2)
BLX Rm使用可能(5)使用可能(5T)16 ビットを使用(すべての T2)
BLX{cond} Rm使用可能(5)- --
BXJ Rm使用可能(5J、6)- 使用可能(ARMv7-M を除くすべての T2)
BXJ{cond} Rm使用可能(5J、6)- --

[a] この 32 ビット命令を使用するようアセンブラに指定する場合は .W を使用します。

[b] これは命令対です。

[c] ARMv4 向けにアセンブルされたコードの場合、アセンブラは BX{cond} Rm を受け入れ、リンク時に MOV{cond} PC, Rm に変換します(ただし、ARMv4T をターゲットとするオブジェクトが存在しない場合)。


Show/hide分岐の範囲の拡張

マシンレベルの B 命令と BL 命令では、現在の命令のアドレスから分岐できる範囲が制限されています。ただし、label が範囲外の場合でもこれらの命令を使用できます。ほとんどの場合、リンカが label を配置する場所は分かりません。必要な場合には、リンカはコードを追加してより長い分岐を可能にします。追加されたコードは veneer(ベニア)と呼ばれます。

Show/hideThumb の B

.W 幅指定子を指定して、B で Thumb-2 コードの 32 ビット命令を生成できます。

B.W は、16 ビット命令を使用してターゲットに到達できる場合でも、常に 32 ビット命令を生成します。

参考として、32 ビット Thumb 命令を使用して到達できるターゲットで失敗が発生する場合でも、.W 指定なしの B は常に 16 ビット Thumb コードの命令を生成します。

Show/hideThumbEE の BX、BLX、および BXJ

これらの命令は、ThumbEE コード内で分岐として使用できますが、状態の変更には使用できません。この命令は op{cond} label 形式では ThumbEE で使用できません。レジスタ形式では Rm のビット [0] が 1 になっている必要があり、ターゲットアドレスでの実行は ThumbEE 状態で継続します。

Note

BXJ は、ThumbEE では BX と同様に機能します。

Show/hideレジスタの制約条件

Rm での PC は ARM BX 命令で使用できますが、これは ARMv6T2 以降では非推奨です。他の ARM 命令では PC は使用できません。

Rm での PC は、Thumb BX 命令で使用できます。他の Thumb 命令では PC は使用できません。

Rm での SP はこれらの ARM 命令で使用できますが、これらは ARMv6T2 以降では非推奨です。

Rm での SP は Thumb BX および BLX 命令で使用できますが、これらは非推奨です。他の Thumb 命令では SP は使用できません。

Show/hide条件フラグ

これらの命令によるフラグへの影響はありません。

Show/hideアーキテクチャ

各アーキテクチャでのこれらの命令の使用可否の詳細については、Table 12を参照して下さい。

Show/hide

    B       loopA
    BLE     ng+8
    BL      subC
    BLLT    rtX
    BEQ     {PC}+4  ; #0x8004

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0489FJ
Non-ConfidentialID111211