LDR と STR (レジスタオフセット)

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

Show/hide構文

op{type}{cond} Rt, [Rn, +/-Rm {, shift}]   ; レジスタオフセット
op{type}{cond} Rt, [Rn, +/-Rm {, shift}]!; プレインデクス       ; ARM のみ
op{type}{cond} Rt, [Rn], +/-Rm {, shift}   ; ポストインデクス      ; ARM のみ
opD{cond} Rt, Rt2, [Rn, +/-Rm]   ; レジスタオフセット、ダブルワード ; ARM のみ
opD{cond} Rt, Rt2, [Rn, +/-Rm]!; プレインデクス、ダブルワード     ; ARM のみ
opD{cond} Rt, Rt2, [Rn], +/-Rm   ; ポストインデクス、ダブルワード    ; ARM のみ

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

op

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

LDR

レジスタロード

STR

レジスタストア

type

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

B

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

SB

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

H

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

SH

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

-

省略(ワード)

cond

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

Rt

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

Rn

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

Rm

オフセットとして使用される値を保持するレジスタを指定します。-Rm は Thumb コードでは使用できません。

shift

任意に指定できるシフトです。

Rt2

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

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

Show/hideオフセットレジスタとシフトオプション

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

Table 6. オプションとアーキテクチャ、LDR/STR (レジスタオフセット)

命令+/-Rm [a]シフト  アーキテクチャ
ARM、ワードまたはバイト [b]+/-RmLSL #0 ~ 31LSR #1 ~ 32 すべて
  ASR #1 ~ 32ROR #1 ~ 31RRX 
ARM、符号付きバイト、ハーフワード、符号付きハーフワード+/-Rm該当なしすべて
ARM、ダブルワード+/-Rm該当なしv5TE +
32 ビット Thumb、ワード、ハーフワード、符号付きハーフワード、バイト、符号付きバイト [b]+RmLSL #0 ~ 3  v6T2、v7
16 ビット Thumb、ダブルワード以外のすべて[c]+Rm該当なしすべての T
16 ビット ThumbEE、ワード [b]+RmLSL #2(必須)T-2EE
16 ビット ThumbEE、ハーフワード、符号付きハーフワード [b]+RmLSL #1(必須)T-2EE
16 ビット ThumbEE、バイト、符号付きバイト [b]+Rm該当なしT-2EE

[a] +/-Rm となっているところでは、-Rm、+Rm、または Rm を使用できます。+Rm となっているところでは、-Rm を使用できません。

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

[c] Rt、Rn、Rm はいずれも R0 ~ R7 の範囲にします。


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

プレインデクスおよびポストインデクス形式の場合:

  • RnRt とは異なる必要があります。

  • ARMv6 より前のアーキテクチャでは、RnRm とは異なる必要があります。

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

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

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

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

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

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

  • LDRD 命令では、RmRt および Rt2 と異なる必要があります。

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

Show/hidePC の使用

ARM 命令の場合:

  • Rt での PC は LDR ワード命令で使用でき、Rn での PC はレジスタオフセット構文の LDR 命令(Rn にライトバックしない形式)で使用できます。

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

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

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

Show/hideSP の使用

SP は Rn で使用できます。

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

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

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

Rm での SP の使用は、Thumb 状態では許可されていません。

Show/hide関連項目

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