Practico 8 | Ejercicio 10

Practico 8 | Ejercicio 10

de Daniel Padron Simon -
Número de respuestas: 6

Buenas noches, una consulta

Entiendo que la idea es que los parámetros (en nuestro caso x, y , z) debe ser pasados por medio de la stack.

Pero no entiendo la parte de: 

"La subrutina que implementa la función coloca los argumentos en el stack y devuelve el resultado en el registro AX. Se deben mantener los valores de los demás registros."

¿la idea es que la subrutina, en este caso AND, deje los parámetros en el stack? 


Saludos y gracias 

Daniel


En respuesta a Daniel Padron Simon

Re: Practico 8 | Ejercicio 10

de Gustavo Brown -

La letra no aclara si los parámetros los debe retirar del stack la propia rutina o el llamador.

Ese ejercicio es uno de los que publicamos su solución. Allí decidimos que los parámetros los retira el llamador.

Es decir, para llamar a la rutina se colocan los parámetros en el stack. Al volver de la rutina todos los registros deben mantener el valor que tenían antes del llamado salvo AX donde queda el resultado. Luego el llamador puede retirar los parámetros del stack.

O sea, la llamada se haría así:

  ... 
 PUSH AX 
 PUSH BX 
 PUSH CX 
 CALL AND ; en AX queda el resultado de (AX and BX and CX) 
 ADD SP, 6 ; retiro parámetros del stack ...

Saludos,
  Gustavo

En respuesta a Gustavo Brown

Re: Practico 8 | Ejercicio 10

de Alfonso Dario Medina Carballal -
Cuando se hace AND AX , BP +6 para el AND con x , no deberia ser BP +8 ?
En respuesta a Alfonso Dario Medina Carballal

Re: Practico 8 | Ejercicio 10

de Gustavo Brown -
Si, el segundo AND es con [BP+8]. Sino te queda dos veces el mismo AND (idempotente) y no se aplica el AND con x

Saludos,
Gustavo
En respuesta a Gustavo Brown

Re: Practico 8 | Ejercicio 10

de Santiago Roberto Cancela Cardona -
Buenas tardes,

Yo estoy teniendo problemas para visualizar el stack en este ejercicio. 
Se dice que los argumentos de la función se cargan en orden en el stack, entonces en el tope voy a tener a "z". En el ejercicio el tope lo declaran como BP. ¿"z" no debería de estar en esa posición en vez de BP + 4? Análogo con "x" e "y" que se escapan del rango en donde yo creo que estarían.
Quizás me puedan ayudar mejor partiendo de lo que yo tengo en mente:

Como podrán ver, está visualización (como varias otras que pensé) no me queda congruente con el ejercicio.
Si podrían ayudarme a entender la mecánica del stack o ver en donde estoy fallando estaría muy agradecido.

Saludos.

En respuesta a Santiago Roberto Cancela Cardona

Re: Practico 8 | Ejercicio 10

de Federico Rivero -
Santiago,

Cómo estás? Te faltan dos cosas: la primera es considerar el IP. A la rutina se la invoca de la siguiente manera:

PUSH AX
PUSH BX
PUSH CX
CALL AND

El CALL lo que hace es realizar un PUSH del IP, y luego un JMP a esa dirección, por lo tanto al ingresar a la rutina, el tope del stack contiene el IP y no Z. Por otro lado, la primer instrucción que se ejecuta es PUSH BP, y luego recién el MOV BP, SP, por lo tanto, una vez que se copia el SP al BP, el stack se ve como a continuación
BP     -> BP
BP + 2 -> IP
BP + 4 -> Z
BP + 6 -> Y
BP + 8 -> X
Habiendo explicado eso, el resto del ejercicio se entiende?

Saludos!
Federico