La fonction sum
est récursive, non terminale. Il faut donc revenir
à la fonction après l'appel récursif. Pour cela l'adresse de retour (la
valeur du registre $ra
) doit être sauvegardée pendant l'appel
récursif (qui utilise lui-même $ra
). Aucun registre n'est
candidat à la sauvegarde de $ra
, car il serait lui-même écrasé:
c'est le même code qui effectue l'appel récursif donc il utilise
potentiellement (ie. c'est une approximation statique) les mêmes registres
que l'appel lui-même.
(On pourrait sauvegarder $ra
dans la tas, mais cela revient à
implémenter une pile dans le tas.)