Programación General > ASM (Ensamblador)
RLE en ensamblador MIPS
m0skit0:
--- Cita de: "manurodri189" ---Que quieres decir con perdida de rango?
--- Fin de la cita ---
¿Qué diferencia hay entre un número de un byte y uno de una palabra?
--- Cita de: "manurodri189" ---Osea antes de meterlo a encode, directamente no lo meto y listo, no?
--- Fin de la cita ---
No puedes evitar que se meta, puesto que tú no controlas lo que hace la llamada al sistema. Lo único que te queda es quitarlo después de que la llamada al sistema lo hay metido en el buffer.
manurodri189:
--- Cita de: "m0skit0" ---¿Qué diferencia hay entre un número de un byte y uno de una palabra?.
--- Fin de la cita ---
Pues no lo se tío, el tamaño seguro, porque una palabra son 4 bytes, pero no se la diferencia a la hora de operar.
Salu2
m0skit0:
El tamaño, evidentemente, por tanto en 4 bytes podemos tener números más grandes que en un byte, ¿no? A la hora de operar no tienes ninguna diferencia.
manurodri189:
Despues de unos dias ocupado con otras cosas, he vuelto a la carga con esto, a ver si ya lo acabo que creo que queda poquito.
Al final me decidí por la perdida de rango, entoces solamente tendria que hacer la siguiente modificacion:
--- Código: ASM ---almacenar: sb $a0,0($a3) #meto el caracter en la primera direccion de a3 sb $a1,0($a2) #meto el contador en la primera direccion de a4 #avanzo el puntero addiu $a3,$a3,1 addiu $a2,$a2,1
Osea almacenar un byte en vez de una palabra, y el desplazamiento 1 en vez de 4, cierto?
Otra cosa, me dices que para eliminar el caracter "enter" seria una vez lo tengo en el buffer quitarlo, y que es relativamente facil, mira tengo esto:
--- Código: ASM ---#Almacenar el String en la matriz# Número de syscall ori $v0,$zero,8# $a0 = buffer para guardar la cadena la $a0,Entrance# $a1 = tamaño a leer ori $a1,$zero,80 syscall
Ahora mismo tengo la cadena en Entrance, incluyendo el caracter "enter", no se me ocurre como, o almenos una manera sencilla, se me ocurre, que una vez tenga la cadena medita en Entrance, calcular el tamaño de entrance, y volver a leer pero ahora desde Entrance, a una nueva matriz, donde el tamaño sea el tamaño de Entrance-1, pero esto no se me ocurre como hacerlo y menos de manera sencilla, alguna solución mas factible?
Salu2
PD: Muchas gracias de nuevo.
manurodri189:
Por cierto para almacenar en encode la salida final, he hecho algo así:
--- Código: ASM ---almacenar_salida: sb encode1,0($a0) sb encode2,0($a1) sb encode,0($a3) while: beq $a0, $zero, finwhile #si es el caracter vacio acabo lbu $a3,0($a1) #cargo el primer numero en encode addiu $a3,$a3,1 #avanzo el puntero de encode lbu $a3,0($a0) #cargo el caracter en encode #avanzo todos los punteros addiu $a3,$a3,1 addiu $a2,$a2,1 addiu $a1,$a1,1 jal while #llamo a while de nuevo finwhile: # Volvemos de la función jr $ra nop
Que te parece?
Salu2
Edito: para almacenar la direccion hay que usar esto que se me habia pasado:
--- Código: ASM ---almacenar_salida: la $a0,encode1 la $a1,encode2 la $a3,encode
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa