ARM VERSION 1.2 User Manual

Page 73

Advertising
background image

Writing ARM and Thumb Assembly Language

ARM DUI 0068B

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

2-61

Example 2-23 on page 2-60 contains separate

LDR

pseudo-instructions to load the

address of each of the data items. Each

LDR

pseudo-instruction is converted to a separate

instruction by the assembler. However, it is possible to access the entire data section
with a single

LDR

pseudo-instruction. Example 2-24 shows how to do this. Both speed

and code size are improved.

Example 2-24

AREA data, DATA
StartOfData EQU 0x1000
EndOfData EQU 0x2000
DataAreaBase RN r11
MAP 0,DataAreaBase
StartOfUsedData FIELD 0
Integer FIELD 4
String FIELD MaxStrLen
Array FIELD ArrayLen*8
BitMask FIELD 4
EndOfUsedData FIELD 0
UsedDataLen EQU EndOfUsedData - StartOfUsedData
ASSERT UsedDataLen <= (EndOfData - StartOfData)

AREA code, CODE
LDR DataAreaBase,=StartOfData
MOV r0,#1
STR r0,Integer
MOV r0,#0
STRB r0,String
MOV r0,#0xA000000A
STRB r0,BitMask

Note

In this example, the

MAP

directive is:

MAP 0, DataAreaBase

not:

MAP StartOfData,DataAreaBase

The

MAP

and

FIELD

directives give the position of the data relative to the

DataAreaBase

register, not the absolute position. The

LDR DataAreaBase,=StartOfData

statement

provides the absolute position of the entire data section.

Advertising