First a word from ...
Review caller vs callee saved registers.
Example 1
int square(int n) { int r = 0 ; if (n != 0) { r = square(n-1) + n + n - 1 ; } return r ; }
- Handout example
- Stack frame for “obvious” solution
n
in8($sp)
and$ra
in4($sp)
Example 2
extern int twoD[5][5] ; void diagonalCopy(int oneD[], int i) { twoD[i][i] = oneD[i] ; }
- global vs local
- Computing the offset one dimension at a time
- Solving the forumla for
i
Example 3
/* normal */ int positiveAdditude(int V[], int n) { int sum = 0 ; for (int i=0; i<n; ++i) { if (V[i] > 0) { sum = sum + V[i] ; } } return sum; }
Example 4
/* pointer */ int positiveAdditude(int V[], int n) { int *Vstart = &V[0] ; int *Vend = &V[n] ; int sum = 0 ; for (int *p=Vstart; p<Vend; ++p) { if (*p > 0) { sum = sum + *p ; } } return sum; }