Tengo bastantes dudas sobre el uso del stack en procedimientos recursivos, y sobre el diseño mismo de dichos procedimientos.
Me gustaría que alguien pueda aclararme la situación explicándome un poco o mediante alguna bibliografía que hable sobre eso específicamente, porque he googleado pero no encuentro mucha info.
Voy a citar un ejemplo de mi material de estudio para que quede claro, es el procedimiento recursivo asociado a el cálculo de la función factorial.
Código:
fact proc
cmp ax,0 ; comparo n con cero
je esCero
dec ax ; ajusto par·metro para la invocaciÛn
call fact ; realizo la llamada recursiva
inc ax
mov cx,ax ; guardo ax pues mul lo modifica
mul bx ; calculo el paso recursivo
mov bx,ax ; asigno el resultado del paso
; recursivo
mov ax,cx ; restauro ax
jmp fin
esCero:
mov bx,1 ; asigno el resultado del paso base
fin:
ret
fact endp
Algunas dudas:
- Cuando se llama recursivamente al procedimiento, no es igual que un salto con jmp no? Qué se hace al llamar a un procedimiento?
- Cuál es la función del stack al llamar a la recursión? Qué es lo que se almacena en el stack? (supongo que es la dirección de la instrucción siguiente a la línea que contiene la llamada recursiva, y que cuando se hace "ret" se estaría regresando a dicho lugar, pero no estoy seguro)
Esto se procesa automáticamente mediante la Unidad de Control?
Les agradezco cualquier ayuda que puedan brindarme .
Saludos.