Keil Logo

Load addresses to a register using ADRL

4.10 Load addresses to a register using ADRL

The ADRL pseudo-instruction loads an address within a certain range, without performing a data load. The range is wider than that of the ADR instruction.

ADRL accepts a PC-relative expression, that is, a label with an optional offset where the address of the label is relative to the current PC.


The label used with ADRL must be within the same code section. The assembler faults references to labels that are out of range in the same section.
ADRL is not available in Thumb state on processors before ARMv6T2.
The assembler converts an ADRL rn,label pseudo-instruction by generating:
  • Two data processing instructions that load the address, if it is in range.
  • An error message if the address cannot be constructed in two instructions.
The available range depends on the instruction set and encoding.
Any value that can be generated by two ADD or two SUB instructions. That is, any value that can be produced by the addition of two values, each of which is 8 bits rotated right by any even number of bits within a 32-bit word. The range is relative to the PC.
32-bit Thumb encoding
±1MB to a byte, halfword, or word-aligned address.
16-bit Thumb encoding
ADRL is not available.
Non-ConfidentialPDF file icon PDF versionARM DUI0379H
Copyright © 2007, 2008, 2011, 2012, 2014-2016 ARM. All rights reserved. 
  Arm logo
Important information

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies.

Change Settings

Privacy Policy Update

Arm’s Privacy Policy has been updated. By continuing to use our site, you consent to Arm’s Privacy Policy. Please review our Privacy Policy to learn more about our collection, use and transfers
of your data.