        GET     Hdr.CVars


        ; To be accessible from C and assembler variables must be declared in
        ; an AREA called |C$$data|.
        ;
        AREA    |C$$data|, DATA

var1    DCD     0


        AREA    |C$$code|, CODE, READONLY

        ; Macros from Hdr.CVars are used to export and import C variables.
        ;
        ExportVar var1
        ImportVar var2


Asm_Change_Vars
        EXPORT  Asm_Change_Vars

        STMFD   sp!, {r0,r1,lr}

        ; Determine base offset of static variables from SL
        ; (set up by module entry point).
        ;
        StaticBaseFromSL r1

        ; Demonstrate loading and storing variable values using macros from Hdr.CVars.
        ;
        LDRVar  r0, r1, var1
        ADD     r0, r0, #10             ; Add 10 to variable value.
        STRVar  r0, r1, var1, lr        ; lr is a work register.

        ; Use a macro from Hdr.CVars to determine the address of a variable and
        ; use that address to modify its value.
        ;
        ADRVar  r0, r1, var2
        LDR     lr, [r0]
        SUB     lr, lr, #10             ; Subtract 10 from variable value.
        STR     lr, [r0]

        LDMFD   sp!, {r0,r1,pc}


        END
