Oplossing Vraag A.

Vertaal de volgende C-functie naar een MIPS assembly functie:
        int max(int s[], int size)
        {
           int max=0;
           for (i=0; imax)
                 max = s[i];
           return max;
        }

Oplossing

Toelichting:
        max:    
                add     $v0,$zero,$zero         # max = 0
                add     $t0,$zero,$zero         # i = 0
        max_L:  
                slt     $t1,$t0,$a1             # $t1 = (i < size)
                beq     $t1,$zero,max_exit      # if (!$t1) goto max_exit
                sll     $t1,$t1,2               # $t1 = 4*i
                add     $t1,$t1,$a0             # $t1 = adres van s[i]
                lw      $t1,0($t1)              # $t1 = s[i]
                slt     $t2,$v0,$t1             # $t2 = (max < s[i])
                beq     $t2,$zero,fi            # if (!$t2) goto fi
                add     $v0,$t1,$zero           # max = s[i]
        fi:
                addi    $t0,$t0,1               # i++
                j       max_L                   # goto max_L
        max_exit:
                jr      $ra                     # return (resultaat in $v0)

Veel gemaakte fouten en hun beoordeling:

Oplossing Vraag B.

We voegen een nieuwe load instructie aan de MIPS processor toe: load word update lwu (die instructie zit ook op de PowerPC architectuur). Een voorbeeld van het gebruik luidt:

lwu $t0,8($t1) /* $t0 = memory[8+$t1], $t0=$t0+8 */

Beoordeling vraag B: elk onderdeel geeft maximaal 2 punten.