4.2.2. LDR 및 STR (즉치 오프셋)

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

구문

op{type}{cond} Rt, [Rn {, #offset}]        ; immediate offset
op{type}{cond} Rt, [Rn, #offset]!          ; pre-indexed
op{type}{cond} Rt, [Rn], #offset           ; post-indexed
opD{cond} Rt, Rt2, [Rn {, #offset}]        ; immediate offset, doubleword
opD{cond} Rt, Rt2, [Rn, #offset]!          ; pre-indexed, doubleword
opD{cond} Rt, Rt2, [Rn], #offset           ; post-indexed, doubleword

인수 설명:

op

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

LDR

레지스터 로드

STR

레지스터 저장

type

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

B

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

SB

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

H

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

SH

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

-

워드용으로, 생략됨

cond

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

Rt

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

Rn

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

offset

오프셋입니다. offset이 생략되면 주소는 Rn의 내용입니다.

Rt2

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

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

오프셋 범위 및 아키텍처

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

Table 4.2. 오프셋 및 아키텍처, LDR/STR, 워드, 하프워드 및 바이트

명령어즉치 오프셋사전 인덱싱된 오프셋사후 인덱싱된 오프셋아키텍처
ARM, 워드 또는 바이트 [1]–4095 ~ 4095–4095 ~ 4095–4095 ~ 4095모두
ARM, 부호 있는 바이트, 하프워드 또는 부호 있는 하프워드–255 ~ 255–255 ~ 255–255 ~ 255모두
ARM, 더블워드–255 ~ 255–255 ~ 255–255 ~ 255v5TE +
32비트 Thumb, 워드, 하프워드, 부호 있는 하프워드, 바이트 또는 부호 있는 바이트 [1]–255 ~ 4095–255 ~ 255–255 ~ 255v6T2, v7
32비트 Thumb, 더블워드–1020 ~ 1020 [3]–1020 ~ 1020 [3]–1020 ~ 1020 [3]v6T2, v7
16비트 Thumb, 워드 [2]0 ~ 124 [3]사용할 수 없음사용할 수 없음모든 T
16비트 Thumb, 부호 없는 하프워드 [2]0 ~ 62 [4]사용할 수 없음사용할 수 없음모든 T
16비트 Thumb, 부호 없는 바이트 [2]0 ~ 31사용할 수 없음사용할 수 없음모든 T
16비트 Thumb, 워드, Rn은 r13임 [5]0 ~ 1020 [3]사용할 수 없음사용할 수 없음모든 T
16비트 ThumbEE, 워드 [2]–28 ~ 124 [3]사용할 수 없음사용할 수 없음T-2EE
16비트 ThumbEE, 워드, Rn은 r9임 [5]0 ~ 252 [3]사용할 수 없음사용할 수 없음T-2EE
16비트 ThumbEE, 워드, Rn은 r10임 [5]0 ~ 124 [3]사용할 수 없음사용할 수 없음T-2EE

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

[2] Rt 및 Rn은 r0 ~ r7 범위에 있어야 합니다.

[3] 4의 배수여야 합니다.

[4] 2의 배수여야 합니다.

[5] Rt는 r0 ~ r7 범위에 있어야 합니다.


더블워드 레지스터 제한

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

ARM 명령어의 경우

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

  • Rt는 lr이면 안 됩니다.

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

  • Rt2R (t + 1)이어야 합니다.

예제

    LDR     r8,[r10]            ; loads r8 from the address in r10.
    LDRNE   r2,[r5,#960]!       ; (conditionally) loads r2 from a word
                                ; 960 bytes above the address in r5, and
                                ; increments r5 by 960.
    STR     r2,[r9,#consta-struc]   ; consta-struc is an expression evaluating
                                    ; to a constant in the range 0-4095.
Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IK
Non-Confidential