4.2.6. ADR

ADR은 즉치값을 pc 값에 더하고 결과를 대상 레지스터에 기록합니다.

구문

ADR{cond}{.W} Rd,label

인수 설명:

cond

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

.W

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

Rd

로드할 레지스터입니다.

label

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

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

사용법

ADR은 주소가 프로그램 기준 또는 레지스터 기준 주소이기 때문에 위치 독립적인 코드를 생성합니다.

ADRL 의사 명령어를 사용하면 더 넓은 범위의 유효 주소를 어셈블할 수 있습니다 (ADRL 의사 명령어 참조).

label이 프로그램 기준 주소이면 ADR 명령어와 동일한 어셈블러 영역에 있는 주소로 평가되어야 합니다 (AREA 참조).

ADR을 사용하여 BX 또는 BLX 명령어의 타겟을 생성하는 경우 타겟에 Thumb 명령어가 포함되어 있으면 주소의 Thumb 비트 (비트 0) 를 설정하는 것은 사용자의 책임입니다.

오프셋 범위 및 아키텍처

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

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

Table 4.6. pc 기준 오프셋

명령어오프셋 범위아키텍처
ARM ADR자세한 내용은 Operand2의 상수를 참조하십시오.모두
32비트 Thumb ADR+/– 4095v6T2, v7
16비트 Thumb ADR [1]0-1020 [2]모든 T

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

[2] 4의 배수여야 함


Thumb-2의 ADR

.W 너비 지정자를 사용하여 Thumb-2 코드에서 32비트 명령어를 생성하도록 ADR에 지시할 수 있습니다. .W가 있는 ADR 은 주소가 16비트 명령어로 생성될 수 있는 경우에도 항상 32비트 명령어를 생성합니다.

정방향 참조의 경우, .W 가 없는 ADR 은 32비트 Thumb-2 ADD 명령어로 생성할 수 있는 주소에서 오류를 발생시킬 수 있는 경우에도 Thumb 코드에서 항상 16비트 명령어를 생성합니다.

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