/* ------------------------------------------------------- sumRange(A,a,b): returns (A[a] + A[a+1] + ... + A[b-1]) ------------------------------------------------------- */ int sumRange(int[] A, int a, int b ) { int i, s; s = 0; for (i = a, i < b; i++) s = s + A[i]; return(s); } void main( ) { int[] A = {11,12,13,14,15,16,17,18,19,20}; int x, y, z; z = sumRange(A, x, y); } |
Important note: how to pass an array to a function
|
|
// Java statement: sum = sumRange(A, a, b): /* ------------------------------------------------- Pass 3nd parameter value b using the stack ------------------------------------------------- */ movw r0, #:lower16:b movt r0, #:upper16:b ldr r0, [r0] push {r0} /* ------------------------------------------------- Pass 2nd parameter value a using the stack ------------------------------------------------- */ movw r0, #:lower16:a movt r0, #:upper16:a ldr r0, [r0] push {r0} /* ------------------------------------------------------- Pass 1st parameter address of array A using the stack ------------------------------------------------------- */ movw r0, #:lower16:A movt r0, #:upper16:A push {r0} /* ---------------------------------------------------------------- |
Important note:
|
/* ---------------------------------------------------------------- Function sumRange(a,b): agreed inputs: A, a, b on stack agreed return: r0 = return value Unused registers: r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10 Use stack to store local vars Body of sumRange(A,a,b): s = 0; for (i = a, i < b; i++) s = s + A[i]; return(s); ---------------------------------------------------------------- */ sumRange: // When sumRange begins, we will have the parameters on the stack: |
How to run the program:
|