plary
27-10-2009, 14:21
ho bisogno di una mano per completare questo programma:
praticamente l'obiettivo è quello di, inserita un parola e un carattere da tastiera, calcolare quante volte il carattere è contenuto nella parola.
.data 0x10010000 #indirizzo di partenza area dati
str0: .asciiz "Questo programma ha la funzione di trovare quante volte\n"
str1: .asciiz "un determinato carattere compare in una parola\n\n"
str2: .asciiz "\nInserire la parola da esaminare: "
str3: .asciiz "\nInserire il carattere da trovare: "
str4: .asciiz "\nIl numero di quante volte il carattere compare nella parola è: "
############## INIZIO DEL CODICE ##################
.text 0x00400000
.globl __start
__start:
la $a0, str0 # stampa a video la stringa 0 e la 1
li $v0, 4
syscall
la $a0, str1
syscall
addi $sp , $sp , -32 # Alloco nello stack lo spazio per salvare i dati in input
la $a0, str2 # stampa a video la stringa 2
li $v0, 4
syscall
la $a0, 16($sp) # indirizzo stringa nome
li $a1, 16 # lunghezza massima della parola 16 byte
li $v0, 8
syscall
la $a0, str3 # stampa a video la stringa 3
li $v0, 4
syscall
la $a0, 0($sp)
li $a1, 16 # lunghezza massima 16 byte
li $v0, 8
syscall
la $t1, str2 # punta ad un carattere della stringa
li $t2, 0 # t2 conta le occorrenze (contatore)
lbu $t3, str3 # contiene il carattere da contare
loop: lbu $t0,($t1) # leggo un carattere dalla stringa (carica in t0 il byte all'indirizzo t1)
beqz $t0,end # salta a end se t0=0, quindi se è zero ho finito
addu $t1,$t1,1 # incremento la posizione della stringa
bne $t0,$t3,loop # se t0 è diverso da t3 salta a loop (salto se diverso dal carattere che cerco)
addu $t2,$t2,1 # incrementa il contatore
j loop
end:
la $a0, str4
li $v0, 4
syscall # stampa la stringa 4
move $a0,$t2 # trasferisce il risultato
li $v0, 1 # funzione per la stampa dell’intero
syscall
li $v0,10
syscall # uscita programma
praticamente il problema che ho riscontrato è il fatto che se anche inserisco una parola per esempio di 3 lettere il programma continua a ciclare non uscendo mai dal ciclo. e il risultato è sempre 0
qualcuno mi puo aiutareeee
praticamente l'obiettivo è quello di, inserita un parola e un carattere da tastiera, calcolare quante volte il carattere è contenuto nella parola.
.data 0x10010000 #indirizzo di partenza area dati
str0: .asciiz "Questo programma ha la funzione di trovare quante volte\n"
str1: .asciiz "un determinato carattere compare in una parola\n\n"
str2: .asciiz "\nInserire la parola da esaminare: "
str3: .asciiz "\nInserire il carattere da trovare: "
str4: .asciiz "\nIl numero di quante volte il carattere compare nella parola è: "
############## INIZIO DEL CODICE ##################
.text 0x00400000
.globl __start
__start:
la $a0, str0 # stampa a video la stringa 0 e la 1
li $v0, 4
syscall
la $a0, str1
syscall
addi $sp , $sp , -32 # Alloco nello stack lo spazio per salvare i dati in input
la $a0, str2 # stampa a video la stringa 2
li $v0, 4
syscall
la $a0, 16($sp) # indirizzo stringa nome
li $a1, 16 # lunghezza massima della parola 16 byte
li $v0, 8
syscall
la $a0, str3 # stampa a video la stringa 3
li $v0, 4
syscall
la $a0, 0($sp)
li $a1, 16 # lunghezza massima 16 byte
li $v0, 8
syscall
la $t1, str2 # punta ad un carattere della stringa
li $t2, 0 # t2 conta le occorrenze (contatore)
lbu $t3, str3 # contiene il carattere da contare
loop: lbu $t0,($t1) # leggo un carattere dalla stringa (carica in t0 il byte all'indirizzo t1)
beqz $t0,end # salta a end se t0=0, quindi se è zero ho finito
addu $t1,$t1,1 # incremento la posizione della stringa
bne $t0,$t3,loop # se t0 è diverso da t3 salta a loop (salto se diverso dal carattere che cerco)
addu $t2,$t2,1 # incrementa il contatore
j loop
end:
la $a0, str4
li $v0, 4
syscall # stampa la stringa 4
move $a0,$t2 # trasferisce il risultato
li $v0, 1 # funzione per la stampa dell’intero
syscall
li $v0,10
syscall # uscita programma
praticamente il problema che ho riscontrato è il fatto che se anche inserisco una parola per esempio di 3 lettere il programma continua a ciclare non uscendo mai dal ciclo. e il risultato è sempre 0
qualcuno mi puo aiutareeee