/* -------------------------------------------------- Define required labels for EGTAPI -------------------------------------------------- */ .global main, Stop, CodeEnd .global DataStart, DataEnd .global a,b,c /* -------------------------------------------------- byte a = 4; short b = 5; int c = 256; a = b + c; // a = 5 + 256 (overflow !!!) -------------------------------------------------- */ .text main: // Move b into r1 movw r0, #:lower16:b // Moves the address of memory movt r0, #:upper16:b // variable b into register r0 ldrsh r1,[r0] // Move short value from var into r1 // ** ldrsb also sign-extend to int !! // Move c into r2 movw r0, #:lower16:c // Moves the address of memory movt r0, #:upper16:c // variable c into register r0 ldr r2,[r0] // Move int value from var into r2 // Add them up add r2, r1, r2 // r2 = b + c // Move sum in r2 to a movw r0, #:lower16:a // Moves the address of memory movt r0, #:upper16:a // variable a into register r0 strb r2,[r0] // Move sum in r2 to BYTE var a Stop: CodeEnd: nop /* -------------------------------------------------- Begin of the permanent program variables -------------------------------------------------- */ .data DataStart: a: .byte 4 // a contains the value 4 in 8 bits .align 1 b: .2byte 5 // b contains the value 5 in 16 bits .align 2 c: .4byte 256 // c contains the value 256 in 32 bits DataEnd: .end