##### CONVENZIONI GENERALI PER SCRITTURA DI FUNZIONI ##### ########## (RICORSIVE E NON) IN ASSEMBLER MIPS ########### ----- PASSAGGIO DI PARAMETRI ----- Effettuato utilizzando i registri $a0, $a1, $a2, $a3. In caso di necessità, si possono utilizzare ulteriori registri ------------------------------- ----- VALORI DI RITORNO ----- Sono posizionati nei registri $v0 e $v1. In caso di necessità, si possono utilizzare ulteriori registri ----------------------------- ----- REGISTRI (VARIABILI) LOCALI ----- Se una funzione necessità dell'utilizzo di registri per il salvataggio di valori locali (cioè interni alla funzione) si possono utilizzare due gruppi di registri: $s0 - $s7: Questi registri sono normalmente utilizzati assumendo che il loro valore NON CAMBI durante una chiamata ad una funzione. Se si intende quindi utilizzare un registro di questo gruppo ci si deve accertare di salvare precedentemente il suo valore in memoria (dalla funzione chiamata) e di ripristinarlo immediatamente prima del ritorno alla funzione chiamante. $t0 - $t9: Questi registri sono normalmente utilizzati assumendo che il loro valore POSSA CAMBIARE durante la chiamata ad una funzione. Se si intende quindi preservare il valore di unoo più registri di questo gruppo, ci si deve accertare di preservare il loro valore in memoria PRIMA della chiamata ad una funzione e ripristinarlo appena dopo il ritorno di questa alla funzione in questione. --------------------------------------- ---------- STACK ---------- Per allocare memoria nello stack bisogna SOTTRARRE n bytes alla posizione attuale dello stack pointer ($sp): generalmente è utilizzata l'istruzione: subu $sp, $sp, 20 (esempio) Per deallocare memoria nello stack bisogna AGGIUNGERE n bytes alla posizione attuale dello stack pointer ($sp): generalmente è utilizzata l'istruzione: addu $sp, $sp, 20 (esempio) ---------------------------