Salto a dato cuando se hace POP en el stack

Salto a dato cuando se hace POP en el stack

de Hugo Sebastian Rodriguez Reyes -
Número de respuestas: 3

Buenas, me surgio la siguiente duda:

Cada vez que se quiere devolver un resultado en el stack lo que debe quedar en el tope siempre es IP y luego el dato a devolver no?

La duda me surge porque si quedara en el tope el dato, el RET estaria saltando al dato, cosa que me parece esta mal.

Entonces, para devolver el resultado en el stack hay que acomodar el mismo para que en el tope quede IP (para que el RET haga un POP al stack y salte a la direccion de retorno) y luego el dato?

En respuesta a Hugo Sebastian Rodriguez Reyes

Re: Salto a dato cuando se hace POP en el stack

de Andres Bello Ureta -

Claro es como decís vos, si en el tope del stack te queda el dato cuando hagas el ret te quedaría "IP = dato". Eso esta mal.

El stack debería quedar:
+-------------+
|        dato   |
+------------+
|      IP        |
+------------+

Entonces cuando haces el ret el registro IP queda con el valor adecuado y luego en el tope te queda el dato para que puedas hacer pop de el.

En respuesta a Andres Bello Ureta

Re: Salto a dato cuando se hace POP en el stack

de Hugo Sebastian Rodriguez Reyes -
En esa pila cuando haces un POP estarias subiendo no?
En respuesta a Hugo Sebastian Rodriguez Reyes

Re: Salto a dato cuando se hace POP en el stack

de Andres Bello Ureta -

Claro, sumas dos al SP.
Acordate que cuando haces push restas y colocas.


SP -> +-------------+ 0
           |        dato   |
            +------------+ 2
 Un push hace SP - 2 (baja una celda, porque cada celda es de 2 byte) y coloca el valor rel registro. Osea que un call te deja el stack:

          +-------------+ 0
          |        dato   |
SP->  +------------+ 2
           |      IP        |
          +------------+  4 

Cuando haces el pop es lo inverso. Graba el valor y luego suma 2, es decir, "sube". Entonces cuando haces el ret SP queda apuntando a 0. Donde esta el dato.