[2014][Diciembre][Problema 2]

[2014][Diciembre][Problema 2]

de Gaston Daniel Barreto Sugliani -
Número de respuestas: 4

https://eva.fing.edu.uy/pluginfile.php/44683/mod_folder/content/0/2014/solExAC201412.pdf?forcedownload=1


Cuando se hace en Assembler ( IF (indice ==0)) Esta bien compararlo con BP+6? no sería  BP+14?

10 bytes de contexto, 2 de la reserva, 2 de la direccion de retorno?


En respuesta a Gaston Daniel Barreto Sugliani

Re: Examen diciembre 2014 problema 2

de Gaston Daniel Barreto Sugliani -

en la parte b de consumo de stack, no son 3 bytes para el caso base, en vez de 4? El indice no cupa un byte por ser un char?

En respuesta a Gaston Daniel Barreto Sugliani

Re: Examen diciembre 2014 problema 2

de Gustavo Brown -

Para saber cuánto sumarle a BP tenés que ver a dónde está apuntando ese registro.

Al comienzo de la rutina el stack tiene lo siguiente:

  indice
  dir_retorno <- SP

Si te fijas, la rutina lo primero que hace es restar 2 a SP, por lo tanto el stack queda así:

   indice
   dir_retorno
   espacio_reservado <- SP

Luego se hace PUSH BP, por lo tanto el mapa queda asi:

   indice
   dir_retorno
   espacio_reservado 
   viejo BP    <- SP

y por ultimo se hace MOV BP, SP, por lo tanto BP apunta al "viejo BP":

   indice
   dir_retorno
   espacio_reservado 
   viejo BP    <- SP, BP

Cada elemento en el stack ocupa 1 palabra (2 bytes) por lo tanto:

   SS:[BP] apunta a viejo_BP, 
   SS:[BP+2] apunta a espacio_reservado
   SS:[BP+4] apunta a dir_retorno
   SS:[BP+6] apunta a indice

Saludos,
  Gustavo