Writing ARM and Thumb Assembly Language

2.10.3Program-relative maps

You can use the program counter (r15) as the base register for a map. In this case, each STM or LDM instruction must be within 4KB of the data item it addresses, because the offset is limited to 4KB. The data structure must be in the same section as the instructions, because otherwise there is no guarantee that the data items will be within range after linking.

Example 2-18 shows a program fragment with such a map. It includes a directive which allocates space in memory for the data structure, and an instruction which accesses it.

 

 

 

Example 2-18

 

 

 

 

datastruc

SPACE

280

; reserves 280 bytes of memory for datastruc

 

MAP

datastruc

 

consta

FIELD

4

 

constb

FIELD

4

 

x

FIELD

8

 

yFIELD 8

string

FIELD

256

code

LDR

r2,constb ; => LDR r2,[pc,offset]

In this case, there is no need to load the base register before loading the data as the program counter already holds the correct address. (This is not actually the same as the address of the LDR instruction, because of pipelining in the processor. However, the assembler takes care of this for you.)

2-54

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

ARM DUI 0068B

Page 66
Image 66
ARM VERSION 1.2 manual Program-relative maps