1

分岐命令で相対アドレス指定のみを使用したいブート コードを書いています。

次のアセンブリ コードに気付きました。

110: lwz r4,0(r6)
      ...
      ...
     b 110b

分岐先はすべて数字のラベルであり、分岐命令にはラベルの後に文字 'b' があります。「b」は後方を意味すると思います。「f」も見たことがありますが、これは前方を意味すると思います。

この表記法は相対アドレス指定を暗示しているように見えますが、そのように述べているドキュメントは見つかりません。

数値の後に「f」または「b」を使用する表記は、相対分岐を保証する唯一のメカニズムですか? または、英数字のラベル (より意味のある名前) を af/b サフィックスと共に使用できますか?

gcc クロスコンパイラを使用しています。

4

2 に答える 2

1

あなたの他の質問への答えは、シンボル名に関するガスのドキュメントにあります:

すべて数値のラベルは「ローカル ラベル」であり、使用されるため、各ラベルに一意の名前を付ける必要はありません。これはマクロ内で特に役立つと思います。名前が一意である必要がないため、参照しているラベルを特定するために b/f 接尾辞が必要です (また、パーサーに整数の即値ではなくローカル ラベルであることも伝えます)。

于 2013-01-18T23:11:35.300 に答える
1

相対/絶対の区別は、使用される命令から推測されます。アセンブラがどちらが必要かを推測する必要はありません。クリック課金制の場合:

b  110b ; relative
ba 110b ; absolute
于 2012-06-25T14:15:23.437 に答える