|
|
/* ------------------------------------------------------- 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 parameter address of array A in reg r0 ------------------------------------------------- */ movw r0, #:lower16:A movt r0, #:upper16:A /* ------------------------------------------------- Pass 2nd parameter value a in reg r1 ------------------------------------------------- */ movw r1, #:lower16:a movt r1, #:upper16:a ldr r1, [r1] /* ------------------------------------------------- Pass 3nd parameter value b in reg r2 ------------------------------------------------- */ movw r2, #:lower16:b movt r2, #:upper16:b ldr r2, [r2] /* ---------------------------------------------------------------- |
/* ---------------------------------------------------------------- Function sumRange(a,b): agreed inputs: r0 = A, r1 = a, r2 = b agreed return: r0 = return value Unused registers: r3, r4, r5, r6, r7, r8, r9, r10 Use these registers as local vars: *** r3 = i, r4 = s *** 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: r0 = A, r1 = a, r2 = b |
How to run the program:
|