# Escribir un programa que  sume los valores de una lista con una funcion recursiva

.data
fst: 		.word 1, snd
snd:		.word 2, trd
trd:		.word 3, fth  
fth:		.word 4, 0
list: 	.word fst

.text
		lw a0, list   
		jal count 
		li a7, 1 
		ecall
		li a7, 10
		ecall
		
count:	bne a0, zero, rec	# si a0 es diferente de 0, salta a la parte recursiva
			jalr zero, ra, 0	# de otra manera, retorna a la dirección precedente (a la fila 25)
rec:		addi sp, sp, -8	# hace espacio en el  stack  para dos valores w ra, 0(sp)		# pone la dirección de retorno
			sw a0, 4(sp)		# pone la dirección corriente			lw a0, 4(a0)		# salta al la dirección del  del nodo sucesivo
			jal count		# reinicia la función recursiva
			lw t0, 4(sp)		#retoma la dirección   del nodo precedente
			lw t0, 0(t0) 		# reescribe el registro con el valor del nodo precedente
			add a0, a0, t0		# suma el valore a la variable de la suma
			lw ra, 0(sp)		# me devuelve la dirección de retorno
			addi sp, sp, 8		# construye en orden el stack
			jalr zero, ra, 0	# retorna a la dirección precedente (a la sfila 25 o a la fila  12)
