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