Programación General > ASM (Ensamblador)

 RLE en ensamblador MIPS

<< < (10/17) > >>

manurodri189:
Lo de s3 es que se me ha pasado, en el segundo queria poner s4.

Vale lo de a0 lo entiendo, es ciero que se pasaban por esos registros, aunque el caracter este también en s1.

Pero lo de a1, no, en a1 esta el siguiente caracter y no el contador, que, no? osea si es asi, entonces en no_iguales tendria que guardar el $t1 en un registro aX como puede ser el a4, no?

Salu2

m0skit0:

--- Código: Text ---add $a0,$zero,$s1  #El carácter en $a0jal almacenar     # Llamamos a la función almacenar()add $a1,$zero,$v0  # Ponemos el número de caracteres en $a1 En a0 el carácter, en a1 el número de caracteres. A ver si leemos  :P


--- Cita de: "manurodri189" ---Vale lo de a0 lo entiendo, es ciero que se pasaban por esos registros, aunque el caracter este también en s1.
--- Fin de la cita ---
Sí, pero te tienes que atener a los parámetros de la función. Si usas la función en otro programa por ejemplo, $s1 no tiene por qué tener ese carácter. Piensa en la función como un programa aparte  ;)

manurodri189:
:ouch: vaya paciencia la tuya  :D

Salu2

manurodri189:
Ahora me pasa una cosa rarisima.

Dejo la funcion así:


--- Código: ASM ---almacenar:    la $t3, encode1  #almaceno la direccion de encode1 en s3, s3 es el puntero    la $t4, encode2  #almaceno la direccion de encode2 en s4, s4 es el puntero     sb $a0,0($t3)   #meto el caracter en la primera direccion de s3    sw $a1,0($t4)   #meto el contador en la primera direccion de s4     #avanzo el puntero     addiu $t3,$zero,1    addiu $t4,$zero,1 # Volvemos de la función    jr $ra    nop 
y para finalizar el programa e imprimir asi:


--- Código: ASM ---fin:     ori $v0,$zero,4    la $a0,encode1    syscall     ori $v0,$zero,4    la $a0,encode2    syscall     ori $v0,$zero,10   # Terminamos con exit    syscall 
Pues bien cuando lo ejecuto todo de golpe, no hace nada, se queda seco.

Y cuando lo ejecuto paso por paso, cuando acaba empieza a dar excepciones del tipo:



Se supone que lo tengo guardado en encode1 y encode2, no?

Salu2

m0skit0:
Sigues cometiendo varios errores, incluído el del syscall  <_<

Empecemos por la función:


--- Código: Text --- #avanzo el puntero     addiu $t3,$zero,1    addiu $t4,$zero,1 ¿Avanzas el puntero? Yo sólo veo que asignas t3 = 1  y t4 = 1. Eso no es avanzar el puntero. Además, el avance de los punteros tendrías devolver los punteros actualizados al programa principal, para no sobreescribir siempre el mismo valor. Y evidentemente actualizarlos en el programa principal.


--- Código: Text ---ori $v0,$zero,4la $a0,encode2syscall La función 4 de syscall imprime una cadena de caracteres, no un array de números  <_<

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa