LDR 疑似命令

以下のいずれかの値をレジスタにロードします。

Note

これは LDR 疑似命令の説明であり、LDR 命令の説明ではありません。

Show/hide構文

LDR Wd, =expr
LDR Xd, =expr
LDR Wd, =label_expr
LDR Xd, =label_expr

各項目には以下の意味があります。

Wd

32 ビット値をロードするレジスタを指定します。

Xd

64 ビット値をロードするレジスタを指定します。

expr

数値を求める式を指定します。

label_expr

アドレスの PC 相対式または外部式をラベルから数値を加減算する形式で指定します。

Show/hide使用法

LDR 疑似命令を使用する場合:

  • expr の値を有効な MOV 命令または MVN 命令でロードできる場合は、アセンブラによってその命令が使用されます。

  • 有効な MOV 命令または MVN 命令を使用できない場合や、label_expr 構文が使用されている場合は、アセンブラは定数をリテラルプールに配置し、リテラルプールからその定数を読み出す PC 相対 LDR 命令を生成します。

    Note

    • この方法でロードされたアドレスはリンク時に固定されるため、このコードは位置依存コードになります。

    • 定数を保持するアドレスは、リンカが LDR 命令を保持する ELF セクションをどこに配置しても有効です。

アセンブラは、label_expr の値をリテラルプールに配置し、リテラルプールからこの値をロードする PC 相対 LDR 命令を生成します。

label_expr が外部式であるか、現在のセクションに含まれていない場合、アセンブラはリンカ再配置ディレクティブをそのオブジェクトファイル内に入れます。リンカはリンク時にアドレスを生成します。

label_expr がローカルラベルの場合、アセンブラはリンカ再配置ディレクティブをオブジェクトファイル内に入れ、そのローカルラベルのシンボルを生成します。アドレスはリンク時に生成されます。

リテラルプールの値に対する PC からのオフセットは ±1MB 未満でなければなりません。このとき範囲内にリテラルプールがあることを必ず確認して下さい。

Show/hide

        LDR     w1,=0xfff    ; 0xfff を W1 にロードする
                             ; =>  LDR w1,[pc,offset_to_litpool]
                             ;     ...
                             ;     litpool DCD 4095
        LDR     x2,=place    ; place のアドレスを
                             ; X2 にロードする
                             ; =>  LDR x2,[pc,offset_to_litpool]
                             ;     ...
                             ;     litpool DCQ place

Show/hide関連項目

Copyright © 2014 ARM. All rights reserved.ARM DUI 0802AJ
Non-ConfidentialID061814