[2014][Febrero][Problema 1] Parte b

[2014][Febrero][Problema 1] Parte b

de Tamara Dalmar Techera Gomez -
Número de respuestas: 3

Hola,

mi duda es cuando se calcula el consumo del stack. Creo que tengo mal el concepto. En el paso base, consume 4 palabras: IP y argumentos, y en la llamada recursiva tambien guarda el contexto haciendo un push SI. Para mi quedaria, para el paso recursivo:

ip

indice

offset

sem

y luego de hacer:

pop dx

pop bx

pop d,

pop es

push dx

pop dx

push bx

push dx

push si

la pila queda:

si

dx

bx

por lo que el consumo del stack alcanzo su maximo con 4 palabras, entonces el consumo en el caso recursivo es: C(n) = 8 + C(n-1)

Ahora, en la solucion dice:

llamada recursiva: 2 palabras (dir de retorno, contexto)

llamada final: 4 palabras (dir de retorno y argumentos)

consumo del stack = n recursivas + final

No entiendo, por que ese 2? Yo entiendo como que en la solución, no se está tomando en cuenta, que en los pasos recursivos no solo se consume 2 palabras en el stack, sino 8, porque hay que pasar los parametros en cada llamada.

Gracias,

Slds!


En respuesta a Tamara Dalmar Techera Gomez

Re: [2014][Febrero][Problema 1] Parte b

de Eduardo David Gastelu Leivas -

Tengo la misma duda, ¿No debería contar en el consumo de los pasos recursivos los bytes que consumen los parámetros que utiliza? Tenia entendido que se debería que tomar en cuenta cada iteración recursiva los Bytes consumidos por parámetros, por IP, y para preservar el Contexto, en la solucion de este ejercicio sólo se cuenta los Bytes de los parámetros solo en el paso final y no me queda muy claro la razón, en la solución veo que solo guardan 'por contexto' 1 byte a la vez, dibujandome la pila varias veces, creo que cuando se hace el CALL ambas veces hay 2 parámetros solamente en ese momento en la pila parados en dicha instrucción (IP y el offset la 1º recursión y el profIzq en la 2º recursión), y el resto de PUSH ocupan el lugar que ocuparon los parámetros que al inicio del procedimiento se les hizo POP, pero, ¿sería por eso que no cuentan los parámetros entonces? ¿porque al iniciar el procedimiento recursivo inmediatamente hace pop? ¿o cuál seria la razón?

Saludos y gracias

En respuesta a Eduardo David Gastelu Leivas

Re: [2014][Febrero][Problema 1] Parte b

de Federico Rivero -

Hola Eduardo!

Es esa la razón, sí. En este caso, los parámetros son retirados del stack al comienzo de la función, por lo cual en ningún momento de la recursión se encuentran al mismo tiempo, en el stack, los parámetros de 2 llamadas recursivas diferentes. 

Este es un buen ejemplo de que para estos ejercicios no hay que seguir una receta sino ejecutar el código a mano y verificar qué es lo que se agrega o quita en el stack. Habiendo dicho eso, la estrategia de comenzar la función realizando pops, si bien puede realizarse en ocasiones (cuando no se solicita que se preserven los parámetros), puede llegar a complicar la programación y el cálculo del stack, como en este caso.

Saludos,

          Federico