Foros del Web » Programación para mayores de 30 ;) » Programación General »

Suma caracteres en MIPS

Estas en el tema de Suma caracteres en MIPS en el foro de Programación General en Foros del Web. .data CADENA: .asciiz "Introduzca la cadena" NUM: .word 0 .text main: la $t0, NUM li $v0, 4 syscall li $a0, 8 la $v1, string syscall ...
  #1 (permalink)  
Antiguo 07/03/2015, 06:41
 
Fecha de Ingreso: octubre-2014
Mensajes: 46
Antigüedad: 9 años, 6 meses
Puntos: 0
Suma caracteres en MIPS

.data
CADENA: .asciiz "Introduzca la cadena"
NUM: .word 0
.text
main:
la $t0, NUM
li $v0, 4
syscall

li $a0, 8
la $v1, string
syscall

while blez $v1, $t0, finwhile
addi $t0, $t0, 1
b while
finwhile: sw $t0, NUM

li $v0, 10
syscall


este es mi codigo y el enunciado del ejercicio es

Se desea realizar un programa en ensamblador que utilizando una estructura de
control de tipo WHILE sea capaz de contar el número de caracteres que posee una
variable de tipo string alojada en memoria. Para ello, inicializaremos la string utilizado la
directiva .asciiz y la etiquetaremos con CADENA. Esta directiva aloja la
correspondiente string en memoria, almacenando la cadena de caracteres que la
componen y finaliza la misma añadiendo el terminador nulo al final. Por tanto, buscar
un byte a valor cero en la cadena es la manera de encontrar el final de strings que
están definidas de esta manera. Realizar el pseudo-código a implementar y devolver el
número de caracteres que tiene la string en una variable.
  #2 (permalink)  
Antiguo 12/03/2015, 09:55
 
Fecha de Ingreso: octubre-2013
Mensajes: 44
Antigüedad: 10 años, 5 meses
Puntos: 5
Respuesta: Suma caracteres en MIPS

Creo que tienes problemas con la sintaxis en las llamadas al sistema. Pero bueno, vamos primero a pensar en el algoritmo.

Tienes una cadena. Para calcular el tamaño de la misma, se puede realizar un bucle while desde el inicio de la misma, e ir comparando cada carácter con un nulo. Si estas programando en MIPS lo más probable es que ya hayas tenido que hacer algo parecido en otro lenguaje de programación como C. En MIPS, un bucle while se puede emular fácilmente con saltos entre etiquetas como has intentado hacer. Ahora la idea seria la siguiente:

1º Cargar la cadena en un registro
2º Entrar en el bucle, y comparar el primer con un nulo
2.1º Si coincide salir del bucle e imprimir el resultado
2.2º Si no coincide, incrementar en una unidad tanto el contador como el índice de la cadena.

Lo que se traduce a lo siguiente:

Código Assembly:
Ver original
  1. .data
  2.  
  3. CADENA: .asciiz "Cadena de ejemplo"
  4.  
  5. .text
  6.  
  7. # $t0 = nº de caracteres (inicialmente a 0)
  8. # $t1 = cadena
  9. # $t2 = caracter
  10.  
  11. main:
  12.  
  13.     li $t0, 0       #Iniciamos los registros
  14.     la $t1, CADENA  #Ojo! cargamos la dirección
  15.  
  16. while:
  17.  
  18.     lb $t2, 0($t1)   #Cargamos el primer caracter (cada elemento de una cadena tiene una longitud de 1Byte)
  19.  
  20.     blez $t2, finwhile  #Si el caracter es igual a nulo salimos
  21.     addi $t0, $t0, 1    #Incrementamos el nº de caracters
  22.     addi $t1, $t1, 1    #Apuntamos al siguiente caracter de la cadena
  23.  
  24.     j while     #Repetimos el proceso
  25.  
  26. finwhile:
  27.  
  28.     li $v0, 1       #Mostrar por pantalla entero
  29.     la $a0, ($t0)
  30.     syscall
  31.  
  32.     li $v0, 10      #Salida
  33.     syscall

Saludos

Etiquetas: cadena, caracteres, string, suma
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:12.