/* --------------------------------------------------
   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