Salve ragazzi, premetto che in quanto a ricorsione ho esperienza quasi zero ed il mio rapporto con lei non è buono (rotfl)
Tuttavia essendo un futuro informatico farò del mio meglio per conquistare questa complicata(solo all'inizio a quanto si dice) ragazza (good) (good)

Il testo dell'esercizio è questo:
Tramite la tecnica della ricorsione scrivere una funzione che stampa gli elementi dell array {1,2,3,4,5,6,7,8,9,10}
Ipotizzo che l'effetto dell'errore è che viene ripetuto una volta in piu del dovuto la parte di codice tra le righe 32-37
Infatti nell'output compare sepre quell'1 di troppo alla fine
codice:
123456789101
ps: non fate caso che vengono stampati tutti attaccati, i ricamini all aspetto dell'output li farò dopo!
il codice è questo:
codice:
.data
	V: .word 11,22,33
	n: .word 3
	
.text
	main:
	lw $a0, V
	lw $a1, n
	addi $a1, $a1, -1		# l'indice per l'array va da 0 a 9, ecco perchè decrementa di 1
	sll $a1, $a1, 2			# moltiplica per 4 per allinearsi con l'indirizzi che vanno di 4 in 4
	jal print_elem			# chiama funzione prima per la prima volta
	
	move $a0, $v0			# sposta in a0 il risultato ritornato dalla funzione
	li $v0, 1			# carica il codice per stampare un int
	syscall				# stampa intero
	
  exit:	li $v0, 10
	syscall
	
	print_elem:
		beqz $a1, base
		
		lw $t0, V($a1)		# in t0 ora c'è l'elemento dell'array alla posizione V($a1)
		addi $sp, $sp, -12	# preapra 3 posti nello stack
		sw $t0, 8($sp)
		sw $a1, 4($sp)
		sw $ra, 0($sp)	
		addi $a1, $a1, -4	# decremento l'indice
		
		jal print_elem		# passo ricorsivo
		
		lw $ra, 0($sp)
		lw $a1, 4($sp)
		lw $a0, 8($sp)
		syscall			# stampa elemento salvato in a0
		addi $sp, $sp, 12	# metto apposto lo stack pointer
		jr $ra
	
	base:
		lw $a0, V($a1)		# carico in a0 il primo elemento
		li $v0, 1
		syscall			# stampo primo elemento
		jr $ra
ps: forse avrei potuto risolverlo senza utilizzare lo stack, ma io VOLEVO esercitarmi usando lo stack