1. ホーム
  2. assembly

[解決済み] ARMのアセンブリ言語でbx lrは何をするのですか?

2022-01-31 20:18:24

質問内容

bx lr が何をしているのか、bl (label) とどう違うのか、いまいち理解できません。bl (label)がその関数のリターンアドレスをリンクレジスタに格納することは知っていますが、bx lrが何をするのかがわかりません。

どのように解決するのですか?

bx 分岐・交換命令セット つまり、分岐先のアドレスのlsb(最下位ビット)により、プロセッサは次の命令をARMとして扱うか、サムとして扱うかを決定するのです。

として lr は通常リターンアドレスを保持し、これは関数からの戻り値であることを意味します。 lr が1であれば、そのアドレスのコードをサムとして扱い、そうでなければARMとして扱います。