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