4.2.5. LDR (pc 기준)

레지스터 로드. 주소는 pc를 기준으로 한 오프셋입니다.

Note

의사 명령어도 참조하십시오.

구문

LDR{type}{cond}{.W} Rt, label
LDRD{cond} Rt, Rt2, label        ; Doubleword

인수 설명:

type

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

B

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

SB

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

H

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

SH

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

-

워드용으로, 생략됨

cond

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

.W

선택적 명령어 너비 지정자입니다. 자세한 내용은 Thumb-2의 LDR (pc 기준) 을 참조하십시오.

Rt

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

Rt2

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

label

프로그램 기준 식입니다. 자세한 내용은 레지스터 기준 및 프로그램 기준 식을 참조하십시오.

label은 현재 명령어의 제한된 거리 안에 있어야 합니다. 자세한 내용은 오프셋 범위 및 아키텍처를 참조하십시오.

오프셋 범위 및 아키텍처

어셈블러는 자동으로 pc를 기준으로 오프셋을 계산하며, label이 범위를 벗어날 경우 오류를 생성합니다.

Table 4.5에서는 레이블과 현재 명령어 사이의 가능한 오프셋을 보여 줍니다.

Table 4.5. pc 기준 오프셋

명령어오프셋 범위아키텍처
ARM LDR, LDRB, LDRSB, LDRH, LDRSH [1]+/– 4095모두
ARM LDRD+/– 255v5TE +
32비트 Thumb LDR, LDRB, LDRSB, LDRH, LDRSH [1]+/– 4095v6T2, v7
32비트 Thumb LDRD+/– 1020 [2]v6T2, v7
16비트 Thumb LDR [3]0-1020 [2]모든 T

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

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

[3] Rt는 r0 ~ r7 범위에 있어야 합니다. 바이트, 하프워드 또는 더블워드 16비트 명령어는 없습니다.


Thumb-2의 LDR (pc 기준)

.W 너비 지정자를 사용하여 Thumb-2 코드에서 32비트 명령어를 생성하도록 LDR에 지시할 수 있습니다. LDR.W는 16비트 LDR을 사용하여 타겟에 도달할 수 있는 경우에도 항상 32비트 명령어를 생성합니다.

정방향 참조의 경우, .W가 없는 LDR은 32비트 Thumb-2 LDR 명령어를 사용하여 도달할 수 있는 타겟에서 오류를 발생시키는 경우에도 Thumb 코드에서 항상 16비트 명령어를 생성합니다.

더블워드 레지스터 제한

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