5 forcing correct alignment – ARM VERSION 1.2 User Manual

Page 68

Advertising
background image

Writing ARM and Thumb Assembly Language

2-56

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

ARM DUI 0068B

2.10.5

Forcing correct alignment

You are likely to have problems if you include some character variables in the data
structure, as in Example 2-20. This is because a lot of words are misaligned.

Example 2-20

StartOfData EQU 0x1000
EndOfData EQU 0x2000
MAP StartOfData
Char FIELD 1
Char2 FIELD 1
Char3 FIELD 1
Integer FIELD 4 ; alignment = 3
Integer2 FIELD 4
String FIELD MaxStrLen
Array FIELD ArrayLen*8
BitMask FIELD 4
EndOfUsedData FIELD 0
ASSERT EndOfUsedData <= EndOfData

You cannot use the

ALIGN

directive, because the

ALIGN

directive aligns the current

location within memory.

MAP

and

FIELD

directives do not allocate any memory for the

structures they define.

You could insert a dummy

FIELD 1

after

Char3 FIELD 1

. However, this makes

maintenance difficult if you change the number of character variables. You must
recalculate the right amount of padding each time.

Example 2-21 on page 2-57 shows a better way of adjusting the padding. The example
uses a

FIELD

directive with a

0

operand to label the end of the character data. A second

FIELD

directive inserts the correct amount of padding based on the value of the label. An

:AND:

operator is used to calculate the correct value.

The

(-EndOfChars):AND:3

expression calculates the correct amount of padding:

0 if EndOfChars is 0 mod 4;
3 if EndOfChars is 1 mod 4;
2 if EndOfChars is 2 mod 4;
1 if EndOfChars is 3 mod 4.

This automatically adjusts the amount of padding used whenever character variables are
added or removed.

Advertising