Writing ARM and Thumb Assembly Language
2-54 Copyright © 2000, 2001 ARM Limited. A ll rights reserved. ARM DUI 0068B
2.10.3 Program-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.
Example2-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.
Example2-18
datastruc SPACE 280 ; reserves 280 bytes of memory for datastruc
MAP datastruc
consta FIELD 4
constb FIELD 4
x FIELD 8
y FIELD 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.)