Oder etwas eleganter, schneller (etwas loop unrolling zwecks "register renaming") und (hoffentlich) ohne pseudobefehle.
          In $a0 wir der (positive) parameter n übergeben, die rückgabe erfolgt in $v0 und nur der inhalt von $t0, $t1 und $t2 wird verändert.
              .text
              .globl  __start
          __start:
              ori     $v0, $a0, 0             #für den fall n     addi    $t0, $a0, -2            #vergleichsgröße und zugleich anzahl der echten rechenschritte (falls nötig)
              bltz    $t0, fib_end            #für n-2
              ori     $t1, $zero, 1           #f(n-1)=1
              ori     $t2, $zero, 0           #f(n-2)=0
          fib_loop:
              addu    $v0, $t1, $t2           #f(n)=aus alten werten berechnen
              beq     $t0, $zero, fib_end     #wenn letzter durchgang, $v0 zurückgeben
              ori     $t2, $v0, 0             #$t2 hat nun f(n-1), $t1 hat f(n-2)
              addi    $t0, $t0, -1            #zähler verringern
              addu    $v0, $t1, $t2           #f(n)=aus alten werten berechnen
              beq     $t0, $zero, fib_end     #wenn letzter durchgang, $v0 zurückgeben
              ori     $t1, $v0, 0             #$t2 hat nun wieder f(n-2), $t1 hat f(n-1)
              addi    $t0, $t0, -1            #zähler verringern
              j       fib_loop
          
          fib_end:
              j       $ra
          
          mr.escape