Salve ho scopiazzato questo codice dal web, ho provato a dare un commento alla funzione bar; vediamo se è giusta:

in effetti questa funzione esegue i seguenti passi:

1) alloca lo spazio sullo sp

2) salva dal registro alla memoria il valore di ritorno

3) salta alla funzione foo

4) carica dalla memoria al registro il valore di ritorno

5) dealloca lo spazio sullo sp.

Giusto?

# Eseguire il seguente codice (è un esempio di utilizzo dello stack)
#
# ***** CODICE IN C *****
#		
#		int x = 1
# 		int y = 2
#		
#		int foo (int a, int b) {
#			return a + b
#		}
#		
#		int bar (int c, int d) {
#			return foo (c, d)
#		}
#
#		int main() {
#			z = bar(x, y)
#		}

.globl _start
.data
	x: 	.word 1
	y:		.word 2
	z:		.space 4
.text
_start:
	
	lw a0, x
	lw a1, y
	jal ra, bar
	sw a0, z, t0

# Fine del programma
	li a7, 10
	ecall
	
# Funzione foo
foo:
	add a0, a0, a1
	ret

# Funzione bar
bar:
	addi sp, sp, -4
	sw ra, 0(sp)
	jal foo
	lw ra, 0(sp)	
	addi sp, sp, 4
	ret