Ver Mensaje Individual
  #2 (permalink)  
Antiguo 12/03/2015, 09:55
Madh
 
Fecha de Ingreso: octubre-2013
Mensajes: 44
Antigüedad: 10 años, 6 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