LDR と STR (イミディエートオフセット)

イミディエートオフセット、プレインデクスイミディエートオフセット、またはポストインデクスイミディエートオフセットを使ったロードとスア。

Show/hide構文

op{type}{cond} Rt, [Rn {, #offset}]        ; イミディエートオフセット
op{type}{cond} Rt, [Rn, #offset]!; プレインデクス
op{type}{cond} Rt, [Rn], #offset           ; ポストインデクス
opD{cond} Rt, Rt2, [Rn {, #offset}]        ; イミディエートオフセット、ダブルワード
opD{cond} Rt, Rt2, [Rn, #offset]!; プレインデクス、ダブルワード
opD{cond} Rt, Rt2, [Rn], #offset           ; ポストインデクス、ダブルワード

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

op

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

LDR

レジスタロード

STR

レジスタストア

type

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

B

符号なしバイト(ロード時に 32 ビットにゼロ拡張)

SB

符号付きバイト(LDR のみ。32 ビットに符号拡張)

H

符号なしハーフワード(ロード時に 32 ビットにゼロ拡張)

SH

符号付きハーフワード(LDR のみ。32 ビットに符号拡張)

-

省略(ワード)

cond

任意の条件コードを指定します。

Rt

ロードまたはストアするレジスタを指定します。

Rn

メモリアドレスのベースとなるレジスタを指定します。

offset

オフセットを指定します。offset が省略されると、アドレスは Rn の内容となります。

Rt2

ダブルワードのロード/ストアで使用する追加のレジスタを指定します。

命令セットやアーキテクチャによっては、一部のオプションを使用できない場合があります。

Show/hideオフセットの範囲とアーキテクチャ

Table 5 はオフセットの範囲とこれらの命令の使用可否を示します。

Table 5. オフセットとアーキテクチャ、LDR/STR、ワード、ハーフワード、バイト

命令イミディエートオフセットプレインデクスポストインデクスアーキテクチャ
ARM、ワードまたはバイト [a]-4095 ~ 4095-4095 ~ 4095-4095 ~ 4095すべて
ARM、符号付きバイト、ハーフワード、符号付きハーフワード-255 ~ 255-255 ~ 255-255 ~ 255すべて
ARM、ダブルワード-255 ~ 255-255 ~ 255-255 ~ 255v5TE +
32 ビット Thumb、ワード、ハーフワード、符号付きハーフワード、バイト、符号付きバイト [a]-255 ~ 4095-255 ~ 255-255 ~ 255v6T2、v7
32 ビット Thumb、ダブルワード-1020 ~ 1020 [c]-1020 ~ 1020 [c]-1020 ~ 1020 [c]v6T2、v7
16 ビット Thumb、ワード [b]0 ~ 124 [c]該当なし該当なしすべての T
16 ビット Thumb、符号なしハーフワード [b]0 ~ 62 [d]該当なし該当なしすべての T
16 ビット Thumb、符号なしバイト [b]0 ~ 31該当なし該当なしすべての T
16 ビット Thumb、ワード、Rn は SP [e]0 ~ 1020 [c]該当なし該当なしすべての T
16 ビット ThumbEE、ワード [b]-28 ~ 124 [c]該当なし該当なしT-2EE
16 ビット ThumbEE、ワード、RnR9 [e]0 ~ 252 [c]該当なし該当なしT-2EE
16 ビット ThumbEE、ワード、RnR10 [e]0 ~ 124 [c]該当なし該当なしT-2EE

[a] ワードのロードでは Rt に PC(プログラムカウンタ)を指定できます。PC へのロードを実行すると、ロードされたアドレスにある命令への分岐が発生します。ARMv4 では、ロードされたアドレスのビット [1:0] は 0b00 になっている必要があります。ARMv5T 以降のバージョンでは、ビット [1:0] が 0b10 あってはなりません。ビット [0] が 1 になっている場合、Thumb 状態で実行が継続されます。それ以外の場合は、ARM 状態で継続されます。

[b] Rt と Rn には R0 ~ R7 の範囲のレジスタを指定する必要があります。

[c] 4 の倍数

[d] 必ず 2 の倍数

[e] Rt には R0 ~ R7 の範囲のレジスタを指定する必要があります。


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

プレインデクスおよびポストインデクス形式では、RnRt とは異なる必要があります。

Show/hideダブルワードレジスタの制約条件

プレインデクスおよびポストインデクス形式では、RnRt2 とは異なる必要があります。

Thumb 命令の場合、Rt または Rt2 に SP または PC は指定できません。

ARM 命令には、以下の制約条件が適用されます。

  • Rt には偶数番号のレジスタを指定する必要があります。

  • Rt に LR は指定できません。

  • R12Rt に使用しないことを強く推奨します。

  • Rt2R(t + 1)であることが必要です。

Show/hidePC の使用

ARM 命令の場合:

  • Rt での PC は LDR ワード命令で使用でき、Rn での PC は LDR 命令で使用できます。

  • Rt での PC は STR ワード命令で使用でき、Rn の PC はイミディエートオフセット構文の STR 命令(Rn にライトバックしない形式)で使用できます。ただし、これらは ARMv6T2 以降では非推奨です。

これらの ARM 命令では、他の PC の使用は許されません。

Thumb 命令では、Rt での PC は LDR ワード命令で使用でき、Rn での PC は LDR 命令で使用できます。これらの Thumb 命令では、他の PC の使用は許されません。

Show/hideSP の使用

SP は Rn で使用できます。

ARM では、Rt での SP をワード命令で使用できます。Rt での SP は ARM コードの非ワード命令で使用できますが、これは ARMv6T2 以降では非推奨です。

Thumb では、Rt での SP はワード命令だけで使用できます。これらの命令で、Rt での SP を他の方法で使用した場合、Thumb コードでは使用できません。

Show/hide

    LDR     r8,[r10]            ; R10 のアドレスから R8 を読み取る。
    LDRNE   r2,[r5,#960]!; R5 のアドレスの 960 バイト上のワードから
                                ; R2 を条件付きで読み取り、
                                ; R5 を 960 バイト分インクリメントする。
    STR     r2,[r9,#consta-struc]   ; consta-struc は、
                                    ; 0 ~ 4095 の範囲内の定数を求める式。

Show/hide関連項目

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