/* -------------------------------------------------- Define required labels for EGTAPI -------------------------------------------------- */ .global main, Stop, CodeEnd .global DataStart, DataEnd .global A, B, C, k /* -------------------------------------------------- Access A[k] (byte), B[k] (short) and C[k] (int) -------------------------------------------------- */ .text main: // ============================================================ A[3] movw r0, #:lower16:A movt r0, #:upper16:A // r0 = base address of array A movw r1, #:lower16:k movt r1, #:upper16:k // r1 = address of k ldr r1, [r1] // r1 = value in variable k // Comment: use ldrsh if k is short ! // use ldrsb if k is byte ! // Address of A[3] = base addr + k*1 ldrsb r2, [r0, r1] // Load A[k] into r2 // ============================================================ B[3] movw r0, #:lower16:B movt r0, #:upper16:B // r0 = base address of array B movw r1, #:lower16:k movt r1, #:upper16:k // r1 = address of k ldr r1, [r1] // r1 = value in variable k // Comment: use ldrsh if k is short ! // use ldrsb if k is byte ! // Address of B[3] = base addr + k*2 add r1, r1, r1 // r1 = k+k = 2*k ldrsh r3, [r0, r1] // Load B[3] into r3 // ============================================================ C[3] movw r0, #:lower16:C movt r0, #:upper16:C // r0 = base address of array C movw r1, #:lower16:k movt r1, #:upper16:k // r1 = address of k ldr r1, [r1] // r1 = value in variable k // Comment: use ldrsh if k is short ! // use ldrsb if k is byte ! // Address of C[3] = base addr + k*4 add r1, r1, r1 // r1 = k+k = 2*k add r1, r1, r1 // r1 = 2*k + 2*k = 4*k ldr r4, [r0, #12] // Load C[3] into r4 Stop: CodeEnd: nop /* -------------------------------------------------- Begin of the permanent program variables -------------------------------------------------- */ .data DataStart: A: .byte 11, 12, 13, 14, 15 // byte typed initialzied array A .align 1 B: .2byte 111, 112, 113, 114, 115 // short typed initialzied array B .align 2 C: .4byte 1111, 1112, 1113, 1114, 1115 // int typed initialzied array C k: .4byte 3 // Index k to access arrays DataEnd: .end