4.2.3. LDR 및 STR (레지스터 오프셋)

레지스터 오프셋, 사전 인덱싱된 레지스터 오프셋 또는 사후 인덱싱된 레지스터 오프셋을 사용하여 로드 및 저장합니다.

구문

op{type}{cond} Rt, [Rn, +/-Rm {, shift}]   ; register offset
op{type}{cond} Rt, [Rn, +/-Rm {, shift}]!  ; pre-indexed
op{type}{cond} Rt, [Rn], +/-Rm {, shift}   ; post-indexed
opD{cond} Rt, Rt2, [Rn, +/-Rm {, shift}]   ; register offset, doubleword
opD{cond} Rt, Rt2, [Rn, +/-Rm {, shift}]!  ; pre-indexed, doubleword
opD{cond} Rt, Rt2, [Rn], +/-Rm {, shift}   ; post-indexed, doubleword

인수 설명:

op

다음 중 하나일 수 있습니다.

LDR

레지스터 로드

STR

레지스터 저장

type

다음 중 하나일 수 있습니다.

B

부호 없는 바이트 (로드 시 32비트로 0 확장)

SB

부호 있는 바이트 (LDR에만 해당, 32비트로 부호 확장)

H

부호 없는 하프워드 (로드 시 32비트로 0 확장)

SH

부호 있는 하프워드 (LDR에만 해당, 32비트로 부호 확장)

-

워드용으로, 생략됨

cond

선택적 조건 코드입니다 (조건부 실행 참조).

Rt

로드 또는 저장할 레지스터입니다.

Rn

메모리 주소의 기준이 되는 레지스터입니다.

Rm

오프셋으로 사용할 값이 포함된 레지스터입니다. Rm 은 r15이면 안 됩니다. Thumb 코드에서는 –Rm을 사용할 수 없습니다.

shift

선택적 시프트입니다.

Rt2

더블워드 연산의 경우 로드 또는 저장할 추가 레지스터입니다.

모든 옵션을 모든 명령어 세트와 아키텍처에서 사용할 수 있는 것은 아닙니다. 자세한 내용은 오프셋 레지스터 및 시프트 옵션을 참조하십시오.

오프셋 레지스터 및 시프트 옵션

Table 4.3에서는 이러한 명령어의 오프셋 범위와 사용 가능성을 보여 줍니다.

Table 4.3. 옵션 및 아키텍처, LDR/STR (레지스터 오프셋)

명령어+/–Rm [1]시프트  아키텍처
ARM, 워드 또는 바이트 [2]+/–RmLSL #0-31LSR #1-32 모두
  ASR #1-32ROR #1-31RRX 
ARM, 부호 있는 바이트, 하프워드 또는 부호 있는 하프워드+/–Rm사용할 수 없음모두
ARM, 더블워드+/–Rm사용할 수 없음v5TE +
32비트 Thumb, 워드, 하프워드, 부호 있는 하프워드, 바이트 또는 부호 있는 바이트 [2]+RmLSL #0-3  v6T2, v7
32비트 Thumb, 더블워드+Rm사용할 수 없음v6T2, v7
16비트 Thumb, 모두 [3]+Rm사용할 수 없음모든 T
16비트 ThumbEE, 워드 [2]+RmLSL #2 (필수) T-2EE
16비트 ThumbEE, 하프워드, 부호 있는 하프워드 [2]+RmLSL #1 (필수) T-2EE
16비트 ThumbEE, 바이트, 부호 있는 바이트 [2]+Rm사용할 수 없음T-2EE

[1] +/–Rm이 표시되면 –Rm, +Rm 또는 Rm을 사용할 수 있습니다. +Rm이 표시되면 –Rm을 사용할 수 없습니다.

[2] 워드 로드의 경우 Rt는 pc일 수 있습니다. pc로 로드하면 로드된 주소로 분기됩니다. ARMv4에서는 로드된 주소의 비트[1:0]이 0b00이어야 합니다. ARMv5 이상에서는 비트[1:0]이 0b10이면 안 됩니다. 비트[0]이 1이면 실행이 Thumb 상태에서 계속되고, 그렇지 않으면 실행이 ARM 상태에서 계속됩니다.

[3] Rt, Rn 및 Rm은 모두 r0 ~ r7 범위에 있어야 합니다.


더블워드 레지스터 제한

Thumb-2 명령어의 경우, Rt 또는 Rt2에 sp 또는 pc를 지정하면 안 됩니다.

ARM 명령어의 경우

  • Rt는 짝수의 레지스터여야 합니다.

  • Rt는 lr이면 안 됩니다.

  • Rt에는 r12를 사용하지 않는 것이 좋습니다.

  • Rt2 는 R (t + 1)이어야 합니다.

Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IK
Non-Confidential