Programación General > ASM (Ensamblador)
RLE en ensamblador MIPS
manurodri189:
Cierto, tengo que coger soltura con esto, vamos a ver:
Lo de avanzar el puntero, error tonto,
--- Código: ASM --- #avanzo el puntero addiu $t3,$t3,1 addiu $t4,$t4,1
Y lo del syscall error tonto tambien, solamente tengo que cambiar el 4 por un 1.
Y ahora creo que lo otro te he entendido, pongo lo que he modificado:
--- Código: ASM ---start: la $s0, Entrance la $s3, encode1 #almaceno la direccion de encode1 en s3, s3 es el puntero la $s4, encode2 #almaceno la direccion de encode2 en s4, s4 es el puntero or $a3,$zero,s3 or $a4,$zero,s4
Como aqui solo entra una vez, pues preparo los registros, no es asi?
--- Código: ASM ---almacenar: sb $a0,0($a3) #meto el caracter en la primera direccion de s3 sw $a1,0($a4) #meto el contador en la primera direccion de s4 #avanzo el puntero addiu $a3,$a3,1 addiu $a4,$a4,1 # Volvemos de la función jr $ra nop
Lo unico que me da errores en los or, no se hacia asi? independientemente de los errores en los or, la idea es esa, verdad?
Salu2
m0skit0:
Primero, te has olvidado de sw guarda 4 bytes y no 1, por tanto hay que avanzar el puntero 4 bytes y no 1 :P
--- Código: Text --- #avanzo el puntero addiu $a3,$a3,1 addiu $a4,$a4,4
--- Cita de: "manurodri189" ---solamente tengo que cambiar el 4 por un 1
--- Fin de la cita ---
Eso te imprime 1 número, no un vector de números. Tendrías que hacer un bucle de impresión. La cuestión es cuándo parar :lol:
--- Cita de: "manurodri189" ---independientemente de los errores en los or, la idea es esa, verdad?
--- Fin de la cita ---
El error de los or es porque te has olvidado el $. Y la idea es algo así, aunque personalmente no lo haría de esa manera. Pero creo que así funcionaría. Ya me cuentas.
PD: ¿qué paso con $a2? xD
manurodri189:
Pues el 2 lo he acabado usando porque con el 4 no me dejaba.
Pues lo que esta hecho funciona, al menos con los caracteres, ya que estos si me los imprime correctamete.
Lo de la impresion de los numeros de momento, como era de prueba no lo voy a hacer. Asi que supongo que en encode1, tengo los caracteres, y en encode2, las veces que se repite.
Ahora he creado un nuevo "vector" encode, tendria que almacenar un numero, una letra, y asi, hasta que no sea final de caracter, no es asi? algo como el siguiente caracter, no?
Por cierto recuerdo que el enter me lo contaba, como lo puedo eliminar de encode 1 y de encode2?
Salu2
m0skit0:
--- Cita de: "manurodri189" ---Pues el 2 lo he acabado usando porque con el 4 no me dejaba.
--- Fin de la cita ---
Normal, no existe el registro $a4 :P
--- Cita de: "manurodri189" ---Asi que supongo que en encode1, tengo los caracteres, y en encode2, las veces que se repite.
--- Fin de la cita ---
¿Supones? No necesitas suponer nada, tienes el contenido de la memoria a la vista, hombre...
--- Cita de: "manurodri189" ---Ahora he creado un nuevo "vector" encode, tendria que almacenar un numero, una letra, y asi, hasta que no sea final de caracter, no es asi?
--- Fin de la cita ---
Sí, pero tu problema ahora va a ser el alineamiento. Es decir, si guardas un byte y una palabra, la palabra no va a estar alineada en una dirección múltiplo de 4 bytes y te va a dar error de alineamiento. Esto lo puedes solucionar de 2 formas: o bien convirtiendo los bytes en palabras (con el consiguiente gasto de memoria) o bien conviertes los números en bytes (con la consiguiente pérdida de rango).
--- Cita de: "manurodri189" ---Por cierto recuerdo que el enter me lo contaba, como lo puedo eliminar de encode 1 y de encode2?
--- Fin de la cita ---
Mejor elimínalo al principio, justo tras guardar la cadena en Encode. Ya que es el penúltimo carácter, debería ser algo sencillo.
manurodri189:
--- Cita de: "m0skit0" ---Sí, pero tu problema ahora va a ser el alineamiento. Es decir, si guardas un byte y una palabra, la palabra no va a estar alineada en una dirección múltiplo de 4 bytes y te va a dar error de alineamiento. Esto lo puedes solucionar de 2 formas: o bien convirtiendo los bytes en palabras (con el consiguiente gasto de memoria) o bien conviertes los números en bytes (con la consiguiente pérdida de rango).
--- Fin de la cita ---
Que quieres decir con perdida de rango? si lo pmeto como byte, no podre operar con el como numero? porque lo necesitaria para decodificarlo, no? y si lo meto como palabra, a la hora de imprimirlo chungo, no? que me recomiendas?
--- Citar ---Mejor elimínalo al principio, justo tras guardar la cadena en Encode. Ya que es el penúltimo carácter, debería ser algo sencillo.
--- Fin de la cita ---
Osea antes de meterlo a encode, directamente no lo meto y listo, no? esa es la idea verdad? Y para la decodificacion posterior algo parecido, no?
Salu2
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa