/* -------------------------------------------------- Define required labels for EGTAPI -------------------------------------------------- */ .global main, Stop, CodeEnd, DataStart, DataEnd .global Pause, sumSquares /* -------------------------------------------------- Begin of the program instructions -------------------------------------------------- */ .text main: /* ----------------------------------------------------- This is what happens in a program when Java calls: z = sumSquares(x,y) ----------------------------------------------------- */ /* ------------------------------------------------- Pass parameter x by copying its value in reg r0 ------------------------------------------------- */ movw r0, #:lower16:x movt r0, #:upper16:x ldr r0, [r0] /* ------------------------------------------------- Pass parameter y by copying its value in reg r1 ------------------------------------------------- */ movw r1, #:lower16:y movt r1, #:upper16:y ldr r1, [r1] /* ---------------------------------------------------------------- call z = sumSquares(x,y): agreed inputs: r0 = x, r1 = y agreed return: r0 = return value ---------------------------------------------------------------- */ bl sumSquares /* ----------------------------------------------------------------- Save return value (in r0) to variable z (z = sumSquares(..)) ----------------------------------------------------------------- */ movw r1, #:lower16:z // Do NOT use r0 !!! movt r1, #:upper16:z // (Because r0 contains the return value) str r0, [r1] // This will store return value in z Pause: /* ----------------------------------------------------- This is what happens in a program when Java calls: z = sumSquares(4,7) ----------------------------------------------------- */ /* ------------------------------------------------- Pass parameter 4 reg r0 ------------------------------------------------- */ mov r0, #4 /* ------------------------------------------------- Pass parameter 7 reg r1 ------------------------------------------------- */ mov r1, #7 /* ---------------------------------------------------------------- call z = sumSquares(4,7): agreed inputs: r0 = 4, r1 = 7 agreed return: r0 = return value ---------------------------------------------------------------- */ bl sumSquares /* ----------------------------------------------------------------- Save return value (in r0) to variable z (z = sumSquares(..)) ----------------------------------------------------------------- */ movw r1, #:lower16:z // Do NOT use r0 !!! movt r1, #:upper16:z // (Because r0 contains the return value) str r0, [r1] // This will store return value in z Stop: nop // Stop point of main( ) /* ---------------------------------------------------------------- Function sumSquares(a,b): agreed inputs: r0 = a, r1 = b agreed return: r0 = return value ---------------------------------------------------------------- */ sumSquares: // When sumSquares begin, we will have: r0 = a, r1 = b mul r2, r0, r0 // r2 = a*a mul r3, r1, r1 // r3 = b*b add r0, r2, r3 // r0 = a*a + b*b // The result value is now in r0 mov pc, lr // Return to the caller CodeEnd: nop /* -------------------------------------------------- Begin of the permanent program variables -------------------------------------------------- */ .data DataStart: x: .4byte 3 y: .4byte 4 z: .4byte -1 DataEnd: .end