/* -------------------------------------------------- Define required labels for EGTAPI -------------------------------------------------- */ .global main, Stop, CodeEnd, DataStart, DataEnd .global a, b, x /* -------------------------------------------------- if (a <= x and x <= b) x = x + 1; else x = x - 1; -------------------------------------------------- */ .text main: // Test if (a <= x ) movw r0, #:lower16:a movt r0, #:upper16:a // r0 = addr(a) ldr r0, [r0] // r0 = a movw r1, #:lower16:x movt r1, #:upper16:x // r1 = addr(x) ldr r1, [r1] // r1 = x cmp r0, r1 // a <= x ? bgt else // Branch to "else" if a > x // test if ( x <= b ) movw r0, #:lower16:x movt r0, #:upper16:x // r0 = addr(x) ldr r0, [r0] // r0 = x movw r1, #:lower16:b movt r1, #:upper16:b // r1 = addr(b) ldr r1, [r1] // r1 = b cmp r0, r1 // x <= b ? bgt else // Branch to "else" if x > b then: // x = x + 1 movw r0, #:lower16:x movt r0, #:upper16:x // r0 = addr(x) ldr r1, [r0] // r1 = x add r1, r1, #1 // r1 = x+1 str r1, [r0] // x = x+1 b ifEnd // ** SKIP over the else part !!! *** else: // x = x - 1 movw r0, #:lower16:x movt r0, #:upper16:x // r0 = addr(x) ldr r1, [r0] // r1 = x sub r1, r1, #1 // r1 = x-1 str r1, [r0] // x = x-1 ifEnd: Stop: CodeEnd: nop /* -------------------------------------------------- Begin of the permanent program variables -------------------------------------------------- */ .data DataStart: x: .4byte 15 // Try x outside 10 ... 20 a: .4byte 10 b: .4byte 20 DataEnd: .end