#Realice un programa que lea una cadena mediante una llamada al sistema y llame a una subrutina que devuelva
#cuantas letras a tiene. Se le tienen que pasar dos argumentos: un puntero a la cadena y la letra a. El resultado
#que devuelve la función (el numero de letras a) ha de imprimirse por pantalla. NOTA: las cadenas acaban en el
#caracter \0 cuyo valor ASCII es 0 ($zero.
.data
cadpide: .asciiz "Introduzca una cadena: "
cadresultado: .asciiz "El numero de letras es: "
cadleida: .space 100
letra: .byte 'a'
.globl main
.text
main:
li $v0, 4 #Llamada al sistema para imprimir una cadena
la $a0, cadpide
syscall
li $v0, 8 #Llamada al sistema para leer una cadena
la $a0, cadleida
li $a1, 100
syscall
la $a0, cadleida #Argumento 1: puntero a la cadena le?da
lb $a1, letra
jal cuentaletras #Llamada a la funcion
move $t0, $v0 #Guardamos el resultado en $t0
li $v0, 4 #Llamada al sistema para imprimir una cadena
la $a0, cadresultado
syscall
li $v0, 1 #Llamada al sistema para imprimir el resultado
move $a0, $t0
syscall
li $v0, 10
syscall #Fin del main
cuentaletras:
#El puntero est? en $a0
li $v0, 0 #Inicializamos el numero de letras 'a' a 0
bucle:
lb $t0, ($a0) #Leemos un caracter
beqz $t0, fin #Si llegmos al fin de cadena, salimos
addi $a0, $a0, 1 #Actualizamos el puntero
bne $t0, $a1, bucle #Si la letra no es la 'a', seguimos
addi $v0, $v0, 1 # Si es la 'a', contamos una letra
j bucle
fin: #El resultado esta en $v0
jr $ra
#cuantas letras a tiene. Se le tienen que pasar dos argumentos: un puntero a la cadena y la letra a. El resultado
#que devuelve la función (el numero de letras a) ha de imprimirse por pantalla. NOTA: las cadenas acaban en el
#caracter \0 cuyo valor ASCII es 0 ($zero.
.data
cadpide: .asciiz "Introduzca una cadena: "
cadresultado: .asciiz "El numero de letras es: "
cadleida: .space 100
letra: .byte 'a'
.globl main
.text
main:
li $v0, 4 #Llamada al sistema para imprimir una cadena
la $a0, cadpide
syscall
li $v0, 8 #Llamada al sistema para leer una cadena
la $a0, cadleida
li $a1, 100
syscall
la $a0, cadleida #Argumento 1: puntero a la cadena le?da
lb $a1, letra
jal cuentaletras #Llamada a la funcion
move $t0, $v0 #Guardamos el resultado en $t0
li $v0, 4 #Llamada al sistema para imprimir una cadena
la $a0, cadresultado
syscall
li $v0, 1 #Llamada al sistema para imprimir el resultado
move $a0, $t0
syscall
li $v0, 10
syscall #Fin del main
cuentaletras:
#El puntero est? en $a0
li $v0, 0 #Inicializamos el numero de letras 'a' a 0
bucle:
lb $t0, ($a0) #Leemos un caracter
beqz $t0, fin #Si llegmos al fin de cadena, salimos
addi $a0, $a0, 1 #Actualizamos el puntero
bne $t0, $a1, bucle #Si la letra no es la 'a', seguimos
addi $v0, $v0, 1 # Si es la 'a', contamos una letra
j bucle
fin: #El resultado esta en $v0
jr $ra