7 using two register-based structures – ARM VERSION 1.2 User Manual

Page 75

Advertising
background image

Writing ARM and Thumb Assembly Language

ARM DUI 0068B

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

2-63

2.10.7

Using two register-based structures

Sometimes you need to operate on two structures of the same type at the same time. For
example, if you want the equivalent of the pseudo-code:

newloc.x = oldloc.x + (value in r0);
newloc.y = oldloc.y + (value in r1);
newloc.z = oldloc.z + (value in r2);

The base register needs to point alternately to the

oldloc

structure and to the

newloc

one.

Repeatedly changing the base register would be inefficient. Instead, use a
non register-based map, and set up two pointers in two different registers as in
Example 2-26.

Example 2-26

MAP 0 ; Non-register based relative map used twice, for
Pointx FIELD 4 ; old and new data at oldloc and newloc
Pointy FIELD 4 ; oldloc and newloc are labels for
Pointz FIELD 4 ; memory allocated in other sections

; code

ADR r8,oldloc
ADR r9,newloc
LDR r3,[r8,Pointx] ; load from oldloc (r8)
ADD r3,r3,r0
STR r3,[r9,Pointx] ; store to newloc (r9)
LDR r3,[r8,Pointy]
ADD r3,r3,r1
STR r3,[r9,Pointy]
LDR r3,[r8,Pointz]
ADD r3,r3,r2
STR r3,[r9,Pointz]

Advertising