Buongiorno a tutti, sto facendo un esercizio come da titolo, devo inserire una stringa e poi un carattere; contare quante volte il char è presente nella stringa...tutto deve essere fatto con un loop da quale esco solo quando l'utente inserisce uno spazio...

Il problema è il programma gira ma solo la prima volta che inserisco il carattere...già al secondo inserimento, ottengo sempre 0...

Grazie a chi risponde!

Posto il codice: 

# ESAME del 24 Giugno 2026
#
# Scrivere un programma assembly che allochi una stringa al più di 255 caratteri. Il main legge in input
# la stringa e, in loop, un carattere del quale conteggiare le occerrenze all'interno della stringa fornita.
# Il loop di input potrà essere terminato fornendo uno spazio (codice ASCII 32). Una funzione 
#	conta_occorrenze riceve il puntatore alla stringa ed il carattere da cercare come parametri e ritorna
# il suo numero di occorrenze nella stringa, che sarà opportunamente stampato nel main. 
# Maiuscole e minuscole devono essere considerate equivalenti
	
.global _main

.data
	prompt_string:		.asciz "\n Inserire una frase: "
	size:						.space 255
	prompt_char:		.asciz "\n Inserire il carattere da ricercare (spazio per uscire): "
	print_char:			.asciz "\n Numero di caratteri trovati: "
	
.text
_main:
	la a0, prompt_string
	li a7, 4
	ecall
	li a7, 8
	li a1, 255
	ecall
	mv t2, a0

loop:	
	la a0, prompt_char
	li a7, 4
	ecall
	li a7, 12
	ecall
	mv t0, a0					# Salva il carattere inserito nel registro t0 
	
	li t1, 32					# Carattere terminatore
	beq t0, t1, end
	jal ra, conta_occorrenze	# Richiamo della funzione per il conteggio
	
	la a0, print_char
	li a7, 4
	ecall
	mv a0, t4					# Viene spostato il conteggio del char nel registro a0
	li a7, 1
	ecall
	j loop

end:
# Fine programma
	li a7, 10
	ecall
	
# Funzione per il conteggio dei caratteri
conta_occorrenze:
	li t4, 0					# Inizializzare il contatore
	ciclo:	
		lb t3, 0(t2)			# Caricare il prossimo carattere della stringa in t2
		beqz t3, fine				
		bne t3, t0, jump		# Se i caratteri sono differenti salta a jump
		addi t4, t4, 1			# Incrementa il contatore, vuol dire che i due caratteri sono uguali
	jump:
		addi t2, t2, 1
		j ciclo
	fine:
#		mv a0, t4				# Commentanto perchè altrimenti non ho il conteggio
	ret