3.4.1. ADR

Generate PC-relative address.

Syntax

ADR{cond} Rd, label

Where:

cond

Is an optional condition code. See Conditional execution.

Rd

Is the destination register.

label

Is a PC‑relative expression. See PC‑relative expressions.

Operation

ADR generates an address by adding an immediate value to the PC, and writes the result to the destination register.

ADR provides the means by which position‑independent code can be generated, because the address is PC‑relative.

If you use ADR to generate a target address for a BX or BLX instruction, you must ensure that bit[0] of the address you generate is set to1 for correct execution.

Values of label must be within the range of −4095 to +4095 from the address in the PC.

Note

You might have to use the .W suffix to get the maximum offset range or to generate addresses that are not word-aligned. See Instruction width selection.

Restrictions

Rd must not be SP and must not be PC.

Condition flags

This instruction does not change the flags.

Examples

    ADR     R1, TextMessage   ; Write address value of a location labelled as
                              ; TextMessage to R1.

Copyright © 2015, 2018 Arm. All rights reserved.ARM DUI 0646C
Non-ConfidentialID121118