[2018][Diciembre][Problema 2] Parte a

[2018][Diciembre][Problema 2] Parte a

de Lucas Alfonso Talin Alvarez -
Número de respuestas: 3

En la función partition cuando devuelve el valor en el stack haciendo MOV [BP + 8], DI ;¿por qué es BP + 8?.

Y a continuación donde dice "acomodo IP"  ¿a que se refiere con acomodar el IP? y ¿por qué es BP + 6?.


Desde ya muchas gracias.


En respuesta a Lucas Alfonso Talin Alvarez

Re: Examen diciembre 2018, problema 2 parte a).

de Federico Rivero -

Estimado,

Como la rutina recibe tres parámetros por stack, al momento de ingresar a la rutina y ejecutar las primeras dos instrucciones, se tiene lo siguiente:


Stack

        BP                  <------ SS:SP   =   SS;BP

        IP                               (dirección SS:BP + 2)

        parámetro 3               (dirección SS:BP + 4)     

        parámetro 2               (dirección SS:BP + 6)

        parámetro 1               (dirección SS:BP + 8)


Esto es porque primero se realiza el push de los parámetros, luego el call coloca el IP al tope del stack, y la primera instrucción es un PUSH BP. Es importante entender que como se reailza MOV BP, SP, y luego el BP no se modifica, las posiciones relativas del IP y parámetros con respecto a SS:BP, no cambian. El SP sí varía su valor con cada PUSH, pero no BP. Por lo tanto, SS:BP + 2 apunta al IP de donde se invocó a la rutina, y SS:BP + 8 apunta al primer parámetro.

Por otro lado, al momento de retornar desde el procedimiento, se debe retornar un único parámetro, es decir que le programa que realizó la llamada debe simplemente hacer un POP del resultado, y luego el stack se debe  ver exactamente igual que al realizar la llamada. Sigan las instrucciones de la parte que dice 'acomodo stack', y verifiquen que lo que se hace es colocar el parámetro resultado en la posición de 'parámetro 1', y el IP en la posición de 'parámetro 2', cuestión de que realizando ADD SP 4, el RET, y luego el POP (que lo realiza el programa invocador), el stack queda en la mismo estado que previo a la llamada.

Saludos,  

          Federico