Programación General > ASM (Ensamblador)

 RLE en ensamblador MIPS

<< < (12/17) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa