| |||||
Technical Support Support Resources
Product Information | A51: LOOKUP TABLES IN ASSEMBLYInformation in this article applies to:
QUESTIONIn 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? ANSWERThe 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.INCLOOKUPTABLE SEGMENT CODE RSEG LOOKUPTABLE TABLE: DB 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H ASM_TEST.ASMNAME 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 ALSOATTACHED FILESRequest the files attached to this knowledgebase article. Last Reviewed: Tuesday, March 27, 2007 | ||||
| |||||