ARM Instruction Reference

Usage

The LDR pseudo-instruction is used for two main purposes:

To generate literal constants when an immediate value cannot be moved into a register because it is out of range of the MOV and MVN instructions

To load a program-relative or external address into a register. The address remains valid regardless of where the linker places the ELF section containing the LDR.

Note

An address loaded in this way is fixed at link time, so the code is not position-independent.

The offset from the PC to the value in the literal pool must be less than 4KB. You are responsible for ensuring that there is a literal pool within range. See LTORG on page 7-14 for more information.

See Loading constants into registers on page 2-25 for a more detailed explanation of how to use LDR, and for more information on MOV and MVN.

Example

LDR

r3,=0xff0

; loads

0xff0

into

r3

 

 

;

=> MOV r3,#0xff0

LDR

r1,=0xfff

;

loads

0xfff

into

r1

;=> LDR r1,[pc,offset_to_litpool]

;...

;litpool DCD 0xfff

LDR

r2,=place

; loads

the address of

 

 

; place

into r2

 

 

; =>

LDR r2,[pc,offset_to_litpool]

 

 

;

...

 

 

;

litpool DCD place

ARM DUI 0068B

Copyright © 2000, 2001 ARM Limited. All rights reserved.

4-83

Page 193
Image 193
ARM VERSION 1.2 manual R3,=0xff0 Loads Into = MOV r3,#0xff0