Ciao a tutti,
per un esercizio universitario devo fare un vettore contenente massimo 20 caratteri e poi stampare quelli che compaiono un numero dispari di volte.
Il codice, che ho fatto e che riporto sotto, mi chiede quanti elementi voglio inserire e me li fa inserire e poi fa il conteggio di quante volte i caratteri che ho inserito compaiono nel vettore, il problema è che mi fa il conteggio di ogni carattere del vettore, nel senso che se ad esempio inserico il vettore "qqqqa" l'output è:
codice:
Carattere che sto controllando --> q le volte che compare il carattere sono: 4
Carattere che sto controllando --> q le volte che compare il carattere sono: 4
Carattere che sto controllando --> q le volte che compare il carattere sono: 4
Carattere che sto controllando --> q le volte che compare il carattere sono: 4
Carattere che sto controllando --> a le volte che compare il carattere sono: 1
codice:
################# Data segment #####################
.data
	input:	.asciiz "\nInserire un carattere --> "
	end:	.asciiz "\nFine del programma!"
	output:	.asciiz "\n\nI caratteri inseriti sono --> "
	howMany:	.asciiz "\nQuanti elementi vuoi inserire? --> "
	check:	.asciiz "\nCarattere che sto controllando --> "
	compare: .asciiz " le volte che compare il carattere sono: "
	array:	.space 20	#alloca 20 byte (ogni carattere vale 1 byte)
	
################# Code segment #####################
.text
.globl main 

main:
	li $s0, 0	#uso $s0 come indice dell'array
	li $s1, 19	#max elementi memorizzabili
numEl:
	la $a0, howMany
	li $v0, 4
	syscall
	
	li $v0, 5
	syscall
	
	move $s2, $v0
	bge $s2, 21, numEl
	
inserimento:
	la $a0, input	#stampa della stringa input	
	li $v0, 4 		
	syscall
	
	la $t0, array	#$t0 prende l'indirizzo dell'array
	li $v0, 12
	syscall
	
	move $t1, $v0
	sb $t1, array($s0)
	addi $t0,$t0, 1
	addi $s0, $s0, 1
	bne $s0, $s2, inserimento

	#la $a0, output	#stampa della stringa output	
	#li $v0, 4 		
	#syscall
print:	
	#addi $s0, $s0, -1
	#lb $a0, array($s0)
	
	#li $v0, 11
	#syscall
	
	#bne $s0, $zero, print
	la $s0, 0
conteggio:	
	lb $a0, array($s0)
	beq $a0, $zero, exit
	la $t2, 0
	la $a0, check
	li $v0, 4
	syscall
	
	lb $a0, array($s0)
	li $v0, 11
	syscall
	move $s1, $a0 #contiene il carattere che sto controllando
	
conto:
	lb $a0, array($s3)
	move $t0, $a0
	beq $t0, $zero, carattereSuccessivo
	beq $s1, $t0, incremento
	addi $s3, $s3, 1
	j conto
incremento:
	addi $t2, $t2, 1
	addi $s3, $s3, 1
	j conto
carattereSuccessivo:
	addi $s0, $s0, 1
	
fine:
	la $a0, compare
	li $v0, 4
	syscall
	move $a0, $t2
	li $v0, 1
	syscall
	la $s3, 0
	j conteggio
exit:	
	la $a0, end	#stampa della stringa fine	
	li $v0, 4 		
	syscall

	li $v0, 10	#uscita dal programma
	syscall
Come posso fare a dirgli di non ricontare i caratteri che ho gia inserito?
Grazie a tutti in anticipo