Duda preservar contexto 8086

Duda preservar contexto 8086

de Valentina Pereira Ciaffone -
Número de respuestas: 1

Hola! 

No me termina de quedar claro cuándo debo de preservar contexto en códigos en 8086. Entiendo que en los casos que estamos trabajando con máquina no dedicadas hay que hacerlo. 

Pero cuando estamos haciendo pasaje de funciones a 8086 cómo me doy cuenta qué preservar?.

Por ejemplo en el examen de febrero 2023 en el problema 1 (recursión en 8086) se dan dos soluciones, en una se rpeserva el contexto que es cuando se usa BP y en la otra no que es cuando se hace POP de los parametros. ¿Qué es lo que nos hace preservar en uno y no en el otro?


En respuesta a Valentina Pereira Ciaffone

Re: Duda preservar contexto 8086

de Gustavo Brown -

Valentina,

  Deberás preservar el contexto toda vez que sea requerimiento de la letra (por ejemplo que diga que se debe preservar el valor de los registros) o para garantizar el correcto funcionamiento del sistema. En los demás casos queda a criterio tuyo. 

Por lo tanto el contexto es la dirección de retorno y eventualmente el valor de los registros que la rutina modifica.

En particular para el problema 1 de febrero de 2023 no es un requerimiento de la letra preservar todo el contexto y dado que la solución nuestra es "tail recursive" (es decir que al volver de una llamada recursiva simplemente se retorna el resultado de dicha llamada) el contexto mínimo que debe preservarse es la dirección de retorno de la rutina. Si te fijas en la primer solución vas a ver que al comenzar coloca en AX el valor de la dirección de retorno, luego obtiene los parámetros de la rutina del stack y preserva AX (la dirección de retorno). Al volver de la llamada recursiva intercambia las últimas 2 palabras del stack (quita el resultado del tope del stack y lo pone debajo de la dirección de retorno).

La otra solución es más conservadora y preserva el valor de los registros que la rutina modifica.

Saludos,
  Gustavo