MIPS 32 examples

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 ;
}

Example 2

extern int twoD[5][5] ;

void diagonalCopy(int oneD[], int i) {
    twoD[i][i] = oneD[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;
}