[ASSEMBLY MIPS] Array di caratteri

di il
1 risposte

[ASSEMBLY MIPS] Array di caratteri

Ciao a tutti, ho questo esercizio da svolgere.
Utilizzando QtSpim, scrivere e provare un programma che richieda all’utente l’inserimento di un vettore di caratteri contenente al massimo 20 elementi e visualizzi i caratteri del vettore che compaiono un numero dispari di volte (1,3,5,…).
Per quanto riguarda l'inserimento di al massimo 20 caratteri penso di essere apposto, anche se non mi piace tanto il metodo di inserimento e di visualizzazione. Per quanto riguarda la seconda parte, vedere quali sono i caratteri che compaiono un numero dispari di volte, avete qualche idea su come poter realizzarlo?

################# Data segment #####################
.data
	input:	.asciiz "\nInserire un carattere --> "
	fine:	.asciiz "\nFine del programma!"
	output:	.asciiz "\nI caratteri inseriti sono --> "
	howMany:	.asciiz "\nQuanti elementi vuoi inserire? --> "
	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, $s1, inserimento
print:
	la $a0, output	#stampa della stringa output	
	li $v0, 4 		
	syscall
	
	addi $s0, $s0, -1
	lb $a0, array($s0)
	
	li $v0, 11
	syscall
	
	bne $s0, $zero, print
	
	la $a0, fine	#stampa della stringa fine	
	li $v0, 4 		
	syscall

	li $v0, 10	#uscita dal programma
	syscall
	
Grazie mille a tutti

1 Risposte

  • Re: [ASSEMBLY MIPS] Array di caratteri

    Ho fatto un esercizio simile a scuola, e non è per niente semplice...
    Innanzitutto hai bisogno di un registro che va da 97 a 122 (per i caratteri minuscoli, tabella ascii) e ad ogni ripetizione di un ciclo esterno (lo ripeti 26 volte, tante sono le lettere minuscole, oppure se metti anche le maiuscole il doppio) fai un ciclo interno che scorra tutto il vettore (in questo caso 20 volte oppure fino al numero di elementi inseriti) e confronti ogni elemento dell'array con il registro che contiene la lettera considerata in questo momento, se sono uguali incrementi un contatore. Alla fine del ciclo interno, controlli se il contatore è a un numero dispari, e in caso stampi la lettera. Ad ogni ripetizione del ciclo esterno incrementi il registro che contiene la lettera (quello che ho descritto all'inizio), riporti a 0 il registro contatore, e all'inizio del vettore il registro puntatore della memoria..
    Spero di essere stato chiaro
Devi accedere o registrarti per scrivere nel forum
1 risposte