Una función es un conjunto de código que realiza una tarea específica y se puede usar cuando sea necesario con solo llamarla.
Al usar múltiples llamadas de función o recursividad , es muy necesario conocer el concepto de una llamada de función, para una mejor comprensión del código.
Ahora, comprendamos el funcionamiento de la llamada de función.
Antes de comprender el funcionamiento de la llamada de función, necesita algunos conocimientos previos sobre la ejecución del programa en la CPU , la pila del programa, el marco de la pila (registro de activación).
- Pila de programas: La pila de programas es la pila que contiene todas las llamadas a funciones, con los elementos inferiores como la función principal.
- Stack Frame: Stack Frame es en realidad una memoria intermedia que es un elemento de la pila del programa y tiene datos de la función llamada, es decir
- Dirección del remitente
- Parámetro de entrada
- Variables locales
- Registrar Ahorros
- Puntero de pila: Puntero de pila es el puntero que apunta a la parte superior de la pila del programa, es decir, la función llamada más reciente.
Ahora, cada vez que se llama a una función, se crea un nuevo marco de pila con todos los datos de la función y este marco de pila se empuja en la pila del programa, y el puntero de la pila que siempre apunta a la parte superior de la pila del programa señala el marco de la pila empujado tal como está. en la parte superior de la pila de programas.
Serie de operaciones cuando llamamos a una función:
- Stack Frame se empuja hacia la pila.
- Se ejecutan las instrucciones de la subrutina.
- Stack Frame se extrae de la pila.
- Ahora Program Counter tiene la dirección de retorno.
Nota: la instrucción POP en lenguaje ensamblador elimina la parte superior de la pila y la asigna al contador del programa.
Entendamos con la ayuda de un ejemplo:
En el caso anterior de llamar a una función.
- El contador de programa apunta a la siguiente ubicación de memoria de instrucciones, es decir, 104 antes de ejecutar una función, mientras que 100 es la ubicación de memoria de la función de llamada.
- Para restaurar la dirección de retorno, el contenido del Contador de programa se coloca en la pila. Ahora la dirección almacenada en la parte superior de la pila es 104.
- Función de llamada Ejecución: ahora el contador de programa apunta a 2000, que es la dirección inicial de la subrutina. Después de la ejecución de todas las instrucciones sucesivas en la subrutina, la dirección se extrae de la pila.
- Hacer estallar la pila se refiere a quitar la parte superior de la pila y asignarla al Contador de programa. Ahora Program Counter tiene la dirección de retorno, es decir, 104.
El motivo principal detrás de este artículo es comprender la razón detrás de colocar la dirección de retorno en la pila. Sin embargo, solo insertar la dirección de retorno en la pila no es suficiente en la implementación moderna de una función. Necesitamos presionar los parámetros reales y formales antes de presionar la dirección de retorno.