Hola, buenas tardes.
Para la parte (a) de este problema, llegué a la siguiente solución:
short M(short n)
{
if(n > 100)
return n-10;
short recursive_parameter = M(n+11);
return M(recursive_parameter);
}
M proc:
pop BX ; BX = dir ret
pop AX ; AX = n
push BX ; Devuelvo la dirección de retorno al stack
cmp AX, 100 ;
JA fin ; Si n > 100, saltamos a fin
add AX, 11 ; AX = n+11
push AX ;
call M ; M(n+11) guarda el resultado en el stack
call M ; M(M(n+11))
fin:
sub AX, 10
push AX
ret
M endp
Luego vi la propuesta de solución y encontré algunas diferencias. Entre ellas, que en la solución se salvan los registros en el stack antes de comenzar la ejecución de la función, a pesar de que esto no es explicitamente solicitado en la letra. ¿Tengo que asumir que solo toman como válidas aquellas soluciones que salven los registros, a pesar de que esto último no este solicitado en la letra?
También, si encuentran errores en mi código, agradezco que los compartan por este medio, para poder rectificar.
Gracias de antemano! saludos.