Ciao ragazzi, sono nuovo del Forum. premetto che ho letto il regolamento e credo non sia necessario un topic apposito per la presentazione. Qualora sbagliassi cercherò di mettermi a norma.

Il mio problema riguarda le procedure annidate in assembly.
Non ho ben capito come gestire i registri $ra e $a.
Ditemi se sbaglio.
io ho

PROC_A (int x,int y) //quindi sui registri $a0,$a1, vi sono salvati i valori di x,y
{
int a,b;
..
x=proc_B(a,b)
return x+y;
}
Proc_b(int x, int y)

in assembly l'ho trasformato in

addi $sp,$sp,-8
sw $so,0($sp)
sw $s1,4($sp) //alloco spazio per le variabili locali a e b

addi $sp,$sp,-12
sw $ao,0($sp)
sw $a1,4($sp)
sw $ra,8($sp)
/*primo dubbio: quest'ultima serie di istruzioni serve in modo tale che A possa salvare i suoi parametri formali dato che la procedura B andrà a modificare i registri $a e $ra??*/

addi $a0,$s0,$zero
addi $a1,$s1,$zero
/*queste due istruzioni mancano nella soluzione del mio libro ma secondo me sono fondamentali perche sto salvando mettendo nei registri a parametri attuali che andranno la funzione proc_B, giusto? */

jal proc_B //chiamo la proceudura B e al termine eseguo ciò che viene dopo
lw $a0, 0$sp
lw $a1 4$sp
lw $ra 8$sp
addi $sp,$sp,12
/*adesso la proc_A recupera dallo stack i suoi vecchi parametri e recupera anche l'indirizzo di ritorno in quanto i registri $a e $ra erano stati modificati per la Proc_b */
addi $vo,Sa1,$a0
lw $s0, 0$sp
lw $s1, 4$sp
addi $sp,$sp,8 // ripristino lo stack

Vi ringrazio per essere arrivati fino a qui.I miei dubbi sono quindi se ho trascritto bene il codice in assembly e se ho capito il ruolo dei registri $a e $ra.
Grazie a chiunque mi aiuti o almeno ci provi.