ARM Technical Support Knowledge Articles

LOOKUP TABLES IN ASSEMBLY

Applies to: A51 Macro Assembler

Answer


Information in this article applies to:


QUESTION

In assembly, I must create a lookup table and locate it at a fixed address. I will access the table in an assembly function that I must call from C. How should I proceed?

ANSWER

The example project attached to this knowledgebase article contains three source files:

The contents of each file is listed below.

To locate the lookup table at a fixed address of 0x1000, open Project - Options for Target - BL51 Locate. In the Code Segment field enter SEGMENT_NAME(start_address). For this example, you should enter LOOKUPTABLE(0x1000). For your application, you may need to look up the segment name from the map file (*.M51).

LOOKUPTABLE.INC
LOOKUPTABLE SEGMENT CODE

RSEG LOOKUPTABLE

TABLE:   DB 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H
ASM_TEST.ASM
NAME ASMTEST

$include(LOOKUPTABLE.INC)

?PR?TSEG?ASM_TEST SEGMENT CODE
PUBLIC  ASM_LOOKUP_ROUTINE

RSEG ?PR?TSEG?ASM_TEST
using   0

ASM_LOOKUP_ROUTINE:

   MOV DPTR, #TABLE    ; DPTR points to the start of the lookup table
   MOV A, #4           ; A is the offset from the start of the lookup table
   MOVC A, @A + DPTR   ; Moves the (A+1)th item into the Accumulator

   RET
   END
TEST.C
extern void ASM_LOOKUP_ROUTINE(void);

void main(void)
{
   ASM_LOOKUP_ROUTINE();     // calling lookup routine

   while(1);
}

SEE ALSO

ATTACHED FILES

Request the files attached to this knowledgebase article.

Article last edited on: 2007-03-27 11:21:50

Rate this article

[Bad]
|
|
[Good]
Disagree? Move your mouse over the bar and click

Did you find this article helpful? Yes No

How can we improve this article?

Link to this article
Copyright © 2011 ARM Limited. All rights reserved. External (Open), Non-Confidential