/* -------------------------------------------------- Define required labels for EGTAPI -------------------------------------------------- */ .global main, Stop, CodeEnd, DataStart, DataEnd /* -------------------------------------------------- if ( x < 0 ) x = -x -------------------------------------------------- */ .text main: // Test if ( x < 0 ) movw r0, #:lower16:x movt r0, #:upper16:x // r0 = addr(x) ldr r1, [r0] // r1 = x cmp r1, #0 // Compare x against 0 bge ifEnd // if (x >= 0) branch to ifEnd // x = -x; (1) compute RHS movw r0, #:lower16:x movt r0, #:upper16:x // r0 = addr(x) ldr r1, [r0] // r1 = x neg r1, r1 // r1 = 0 - r1 (negate) // x = -x; (2) store r1 into LHS movw r0, #:lower16:x movt r0, #:upper16:x // r0 = addr(x) str r1, [r0] // Update x with -x in r0 ifEnd: Stop: CodeEnd: nop /* -------------------------------------------------- Begin of the permanent program variables -------------------------------------------------- */ .data DataStart: x: .4byte -4 // x = -4 -- try changing the sign and run the prog DataEnd: .end