Contador de vocales en MIPS

#Realiza un programa que lea una cadena mediante una llamada al sistema e incluya una subrutina que calcule #cuantas vocales tiene (cuantas letras a, e, i, o y u). Las letras a, e,i, o, u se declararan en el #segmento de datos y se le pasaran como argumentos a la funcion, junto con el puntero a la cadena. Los resultados #serun los contadores de letras a, e, i, o y u. La funcion main imprimira dichos resultados. .data cadena: .asciiz "\nIntroduzca una cadena: " cadleida: .space 100 letras: .byte 'a', 'e', 'i', 'o', 'u' cadres: .asciiz "\nEl nœmero de letras, a, e, i, o y u es: " separa: .asciiz " " .text .globl main main: li $v0, 4 #Llamada al sistema para imprimir una cadena la $a0, cadena #Puntero a la cadena a imprimir syscall li $v0, 8 #Llamada al sistema para leer una cadena la $a0, cadleida #Puntero al espacio reservado li $a1, 100 #Longitud maxima de la cadena le’da syscall la $a0, cadleida #Argumento 1: puntero a la cadena le’da lb $a1, letras #Argumento 2: letra a lb $a2, letras + 1 #Argumento 3: letra e lb $a3, letras + 2 #Argumento 4: letra i lb $t0, letras + 3 #Argumento 5: letra o addi $sp, $sp, -1 # Va en la pila sb $t0, ($sp) lb $t0, letras + 4 #Argumento 6: letra u addi $sp, $sp, -1 # Va en la pila sb $t0, ($sp) jal cuentavocales move $t0, $v0 li $v0, 4 #Llamada al sistema para imprimir una cadena la $a0, cadres #Puntero a la cadena a imprimir syscall li $v0, 1 #Llamada al sistema para imprimir una cadena move $a0, $t0 #Imprimimos el nœmero de letras a (resultado $v0 de la función syscall li $v0, 4 #Llamada al sistema para imprimir una cadena la $a0, separa #Puntero a la cadena a imprimir syscall li $v0, 1 #Llamada al sistema para imprimir una cadena move $a0, $v1 #Imprimimos el numero de letras e (resultado $v1 de la función syscall li $v0, 4 #Llamada al sistema para imprimir una cadena la $a0, separa #Puntero a la cadena a imprimir syscall lw $t0, ($sp) # Desapilamos el 5¼ resultado (nœmero de letras u) addi $sp, $sp, 4 lw $t1, ($sp) # Desapilamos el 4¼ resultado (nœmero de letras o) addi $sp, $sp, 4 lw $t2, ($sp) # Desapilamos el 3er resultado (nœmero de letras i) addi $sp, $sp, 4 li $v0, 1 #Llamada al sistema para imprimir una cadena move $a0, $t2 #Imprimimos el nœmero de letras i syscall li $v0, 4 #Llamada al sistema para imprimir una cadena la $a0, separa #Puntero a la cadena a imprimir syscall li $v0, 1 #Llamada al sistema para imprimir una cadena move $a0, $t1 #Imprimimos el nœmero de letras o syscall li $v0, 4 #Llamada al sistema para imprimir una cadena la $a0, separa #Puntero a la cadena a imprimir syscall li $v0, 1 #Llamada al sistema para imprimir una cadena move $a0, $t0 #Imprimimos el nœmero de letras u syscall li $v0, 10 #Llamada al sistema para finalizar el programa syscall #Funci—n que cuenta el nœmero de vocales que hay en la cadena que se le pasa como argumento cuentavocales: li $v0, 0 #Contador de letras a li $v1, 0 #Contador de letras e li $t0, 0 #Contador de letras i li $t1, 0 #Contador de letras o li $t2, 0 #Contador de letras u lb $t3, ($sp)#Desapilo la letra u addi $sp, $sp, 1 lb $t4, ($sp) #desapilo la letra o addi $sp, $sp, 1 bucle: lb $t5, ($a0) #Leo un caracter de la cadena origen beqz $t5, fin #Si es el fin de cadena, he acabado de leer beq $t5, $a1, esletraa #Compruebo si es la letra a beq $t5, $a2, esletrae #Compruebo si es la letra e beq $t5, $a3, esletrai #Compruebo si es la letra i beq $t5, $t4, esletrao #Compruebo si es la letra o beq $t5, $t3, esletrau #Compruebo si es la letra u sigue: addi $a0, $a0, 1 #Actualizo el puntero j bucle esletraa: addi $v0, $v0, 1 #Actualizo el contador de letras a j sigue esletrae: addi $v1, $v1, 1 #Actualizo el contador de letras e j sigue esletrai: addi $t0, $t0, 1 #Actualizo el contador de letras i j sigue esletrao: addi $t1, $t1, 1 #Actualizo el contador de letras o j sigue esletrau: addi $t2, $t2, 1 #Actualizo el contador de letras u j sigue fin: addi $sp, $sp, -4 sw $t0, ($sp) #Apilo el Contador de letras i addi $sp, $sp, -4 sw $t1, ($sp) #Apilo el Contador de letras o addi $sp, $sp, -4 sw $t2, ($sp) #Apilo el Contador de letras u jr $ra