Programación General > ASM (Ensamblador)
RLE en ensamblador MIPS
m0skit0:
En
--- Código: Text --- add $a0,$zero,$s1 #El carácter en $a0 jal almacenar # Llamamos a la función almacenar() add $a1,$zero,$v0 # Ponemos el número de caracteres en $a1 Ten en cuenta que $v0 lleva el número de caracteres repetidos tras el primero leído, por tanto el número de caracteres iguales es $v0 + 1.
manurodri189:
Corregido de la siguiente maner:
--- Código: ASM ---add $a0,$zero,$s1 #El carácter en $a0 jal almacenar # Llamamos a la función almacenar() addiu $v0,$v0,1 #sumamos 1 a v0 add $a1,$zero,$v0 # Ponemos el número de caracteres en $a1
Tiene que haber más errores. porque sucede lo mismo. Muchas gracias de verdad.
Salu2
m0skit0:
--- Cita de: "manurodri189" ---Corregido de la siguiente maner:
--- Fin de la cita ---
:huh: Mal again: add $a1,$zero,$v0 no se ejecuta antes de saltar a la función, sino una vez ejecutada... <_<
--- Cita de: "manurodri189" ---Tiene que haber más errores
--- Fin de la cita ---
Sí, hay unos cuantos, pero sinceramente no te voy a hacer todo y me estoy cansando un poco... La de codificar funciona, así que vuelve a mirar las funciones que has hecho, sobre todo la de decodificar. Sólo tiene que hacer el proceso inverso a codificar, así que es sencillo. La vas a tener que hacer tú solito :brickwall:
PD: repites siempre los mismos errores, concéntrate en lo que haces y déjate de prisas ;)
manurodri189:
Ok, tio la verdad es que llevas razon, pero aunque creo que le estoy cogiendo la dinamica a esto estoy un poco verdad, todavia.
Mira he actualizado asi, para que si se ejecute ese comando:
--- Código: ASM ---add $a0,$zero,$s1 #El carácter en $a0 addiu $v0,$v0,1 #sumamos 1 a v0 jal almacenar # Llamamos a la función almacenar() add $a1,$zero,$v0 # Ponemos el número de caracteres en $a1
Debajo de la llamada a decodifcar, me ocurria lo mismo así que también he puesto un nop.
Me has dicho que codificar funciona, pero creo que el almacenamiento en encode, no porque lo imprimo y no hace nada.
También he puesto el nop debajo de beq, porque tambien consume 8 al igual que jal.
--- Código: ASM ---almacenar_salida: la $a0,encode1 la $a1,encode2 la $a3,encode while: beq $a0,$zero,finwhile #si es el caracter vacio acabo nop 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 $a0,$a0,1 addiu $a1,$a1,1 b while #llamo a while de nuevo finwhile: # Volvemos de la función jr $ra nop
Y en decodificar lo mismo.
--- Código: ASM ---decodificar: la $a0,encode1 la $a1,encode2 la $a3,decode while2: beq $a0,$zero,finwhile2 #si es el caracter vacio acabo nop lbu $a3,0($a0) #cargo el caracter en decode addiu $a3,$a3,1 #avanzo el puntero decode addiu $a1,$a1,-1 #a1-1 #le resto 1 al primer numero bnez $a1,while2 #repito el while2 si $a1 es distinto de 0 nop #avanzo todos los punteros addiu $a3,$a3,1 addiu $a0,$a0,1 addiu $a1,$a1,1 b while2 finwhile2: # Volvemos de la función jr $ra nop
La verdad es que no se por donde cogerlo, ten en cuenta que es mi primera vez, no digo que me lo hagas, si no un poco de ayuda, si no te importa, mas que nada para los conceptos, y luego yo localizo los errores y los intento arreglar, porque sigo pensando que estoy en la dinamica, o no?
Salu2
Edito: acabo de modifcar lo de la instruccion de debajo porque veo que lo uso en el bnez.
manurodri189:
Por cierto, por más que lo miro, sigo pensando que la lógica está bien, pero falla algo de Mips que no controlo.
Salu2
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa