/* -------------------------------------------------- Define required labels for EGTAPI -------------------------------------------------- */ .global main, Stop, CodeEnd, DataStart, DataEnd .global a, b, x /* -------------------------------------------------- <----a b-----> ------+----------+-------- if (x <= a or x >= b) x = x + 1; else x = x - 1; -------------------------------------------------- */ .text main: // Test if (x <= a ) movw r0, #:lower16:x movt r0, #:upper16:x // r0 = addr(x) ldr r0, [r0] // r0 = x movw r1, #:lower16:a movt r1, #:upper16:a // r1 = addr(a) ldr r1, [r1] // r1 = a cmp r0, r1 // x <= a ? ble then // Branch to "then" if x <= a // 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 ? blt 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 5 // Try x: 10 < x < 20 a: .4byte 10 b: .4byte 20 DataEnd: .end