jueves, 31 de julio de 2014

Diferencia entre iteración y recursión en ensamblador (MIPS)

Buenas gente. Últimamente os tenemos demasiado abandonados. Mea culpa. Estamos los dos de viajes a todos lados (me fuí a Valencia a la DreamHack) y a la vuelta empecé a trabajar en una academia. No tengo tiempo para nada. Es totalmente estresante. Trabajo de mañana y de tarde pero bueno.., hay que comer no?

Hoy os traigo un code simple en MIPS tanto en forma iterativa como recursiva para que veais las diferencias entre ambos así como el uso de la pila. Debo decir que (en éste codigo concreto) la versión iterativa es más eficiente que la recursiva, pero no siempre es así.
El código lo único que hace es coger y multiplicar los registros $4 y $5 y guardar el resultado en $2, pero lo hace simando $5 veces $4.
Dicho ésto, aquí vuestro código iterativo:

Y aquí vuestro código recursivo:


Espero que veais la diferencia. Hay que añadir que en todos los códigos recursivos (ya que hay que usar la pila) es necesario hacer push y pop, donde push siempre es restar un múltiplo de 4 a $29 ($sp) y guardar los valores con sw en esa memoria; y pop es la operación inversa.

Espero que os haya quedado claro y que nos perdoneis por no ser puntuales :P
Un saludo y gracias ;)

No hay comentarios:

Publicar un comentario