[Examen 2011 - Diciembre] Funcion de McCarthy

[Examen 2011 - Diciembre] Funcion de McCarthy

de Martin Pacheco -
Número de respuestas: 1

He visto que una pregunta sobre este mismo ejercicio ya fue hecha hace unos años https://eva.fing.edu.uy/mod/forum/discuss.php?d=40761 pero aun tengo dudas sobre el ejercicio.

Yo lo pensé sin respaldar en el stack BP y SP porque no lo consideré necesario teniendo en mente lo siguiente:
- Asumo el parametro de la funcion lo tengo en AX.
- Antes de invocar a la funcion, hago push AX.
- Dentro de la funcion hago pop AX al comienzo.
- Para devolver el parametro al final de la funcion, hago push AX nuevamente, con AX teniendo el valor de retorno de la funcion.

Entonces al finalizar todas las invocaciones recursivas, en el stack solo voy a tener el resultado de la funcion.

El codigo sería este:
Para invocar:

push ax
call M

La funcion:
M PROC
   pop ax
   cmp ax, 100
   ja else
   add ax, 11
   push ax
   call M
   call M
   jmp fin
else:
   sub ax, 10
   push ax
fin:
   ret
M ENDP

En respuesta a Martin Pacheco

Re: [Examen 2011 - Diciembre] Funcion de McCarthy

de Gustavo Brown -

Te estas olvidando que al hacer un call se guarda en el stack automáticamente la dirección de retorno del llamador. Por lo tanto el pop ax que ejecutas al comienzo de tu rutina lo que quita del stack es la dirección de retorno y no el parámetro.

Por otro lado la combinacion push ax + ret  , con ax conteniendo cualquier otra cosa que no sea una dirección de retorno va a hacer que el programa falle porque el ret quita del stack la dirección de retorno y salta a esa dirección.

Saludos,
  Gustavo