Examen Dic 2012-Prob 1

Examen Dic 2012-Prob 1

de Guillermo Dufort Y Alvarez Zorrilla De San Martin -
Número de respuestas: 8

Buenas,

En la solucion al problema 1 parte B, al hacer los respaldos de los registros realiza:

; Se ubica el ip para el retorno

mov SI, [BP+2]
mov [BP+6], SI

Con esas instrucciones copia el IP, que se encuentra en el stack debido al CALL del procedimiento, hacia abajo en el stack. Cual es la razon de hacer eso? Por que no simplemente dejar el IP en el lugar original del stack y asegurarse al terminar el procedimiento que el SP apunte al mismo para que el RET funcione correctamente?

Gracias por la respuesta.

Saludos

En respuesta a Guillermo Dufort Y Alvarez Zorrilla De San Martin

Re: Examen Dic 2012-Prob 1

de Anthony Martin Cabrera Gonzalez -

Porque el ejercicio dice (y en general se hace) que se deben retirar los parametros del stack.

"Debe preservar el valor de los registros y se deben retirar los parámetros del stack."

si no hicieras:

mov SI, [BP+2]

mov [BP+6], SI

El stack te quedaría

*   IP         * <-- SP

*  PARAM1 *

*  PARAM2 *

* //////////  *

Y la idea es que te quede algo parecido a esto:

*      IP       * 

*  PARAM1 *

*       IP     *  <-- SP

* //////////  *

En respuesta a Anthony Martin Cabrera Gonzalez

Re: Examen Dic 2012-Prob 1

de Diego Pereira Barneche -

No me queda claro el uso del registro BP, tiene la base de la pila no el tope, como sabemos que es lo que esta en la base? 
Para salvaguardar el valor de los registros, en este caso el que se va a usar el AX no es valido este código?

PUSH AX
mov AX,[SS:6]  \\ agarras el primer parametro


Saludos

En respuesta a Diego Pereira Barneche

Re: Examen Dic 2012-Prob 1

de Federico Rivero -

Estimado:

No es correcto porque el tope de la pila no se encuentra en SS*16, sino en

SS:SP = SS * 16 + SP. Es necesario usar BP, porque SS:[SP+nn] no es una instrucción válida de 8086. Claro que como bien mencionás, BP apunta a la base de la pila, por eso es que se hace:

PUSH BP

MOV BP, SP

; se accede al lugar del stack que se desee

MOV AX, [BP + 4]

Saludos!

         Federico

En respuesta a Federico Rivero

Re: Examen Dic 2012-Prob 1

de Jose Ignacio Aguirrezabal Pintos -
Otra duda, en la solución (en el ejemplo de invocación) dice "PUSH color" pero debería decir "PUSH cant_oficinas", ¿no?
En respuesta a Jose Ignacio Aguirrezabal Pintos

Re: Examen Dic 2012-Prob 1

de Leonardo Alfredo Levy Garrido -

Si a mi también me parece que era cant_oficinas.

Además tengo otra duda y es que dentro del procedimiento cambiar_luces hacen un push AX por lo tanto AL deberia haber perdido el color no? porque en la documentación del push dice que "transfiere" un elemento al stack por lo que AX deberia quedar con algo indeterminado no?

 

Saludos!

En respuesta a Leonardo Alfredo Levy Garrido

Re: Examen Dic 2012-Prob 1

de Matias Rodal Medina -

Si, seguro es cant_oficinas.

No, el push tranfiere pero deja lo que esta sin tocarlo, mantiene lo que estaba en el origen.

Saludos