WARNING:
JavaScript is turned OFF. None of the links on this concept map will
work until it is reactivated.
If you need help turning JavaScript On, click here.
Este Cmap, tiene información relacionada con: SOPORTE PARA PROCEDIMIENTOS, PILA ES La pila es una estrutura LIFO (Last In First Out): – Apilar (push): guarda un registro o constante en la cima de la pila – Desapilar (pop): carga en un registro el contenido de la cima de la pila, El lenguaje ensamblador debe proporcionar lo siguiente Algún mecanismo para la devolución de los resultados. – Los registros se usan para 2 y 3, pero no son suficientes El número de parámetros y variables locales de un procedimiento (o de llamadas anidadas entre procedimientos) en un programa puede ser arbitrariamente grande, mientras que el número de registros del procesador es muy limitado. – Se necesita una estructura de datos en memoria para soportar procedimientos: la pila., Soporte para procedimientos (6/6) destacamos 3 • Registro RBP (Base Pointer): apunta a un lugar fijo de la pila durante la ejecución de cada rutina (al comienzo de su marco de pila), para poder direccionar a partir de él los posibles parámetros y/o variables locales., Soporte para procedimientos (5/6) destaca Subrutina funcion llamada desde main (continuación), El lenguaje ensamblador debe proporcionar lo siguiente 2. Proporcionar una estructura de datos en memoria donde: a) Realizar el paso de parámetros b) Almacenar las variables locales c) Guardar la dirección de retorno (para poder volver luego a la instrucción siguiente a la llamada al procedimiento)., El lenguaje ensamblador debe proporcionar lo siguiente 1. Instrucciones que permitan cambiar el flujo del programa (saltar al principio del procedimiento y regresar) call misubrutina # Guarda RIP (dirección de retorno) y salta a misubrutina ret # Regresa de la llamada al poner en RIP la dirección de # retorno guardada por la instrucción call correspondiente, Soporte para procedimientos (6/6) destacamos 3 Registro RSP (Stack Pointer): apunta (almacena) la dirección de la cima de la pila (último elemento válido). Modificado por las instrucciones call, ret, push, pop. La pila crece y decrece continuamente durante la ejecución del proceso, pero no puede crecer indefinidamente (stack overflow), Soporte para procedimientos (4/6) destaca • En ensamblador, las funciones C se mapean a “subrutinas” • Subrutina = secuencia de instrucciones que pueden (o no) recibir unos parámetros de entrada, realizan alguna acción y pueden (o no) devolver un resultado (valor de retorno)., Soporte para procedimientos este se divide en 6 partes Soporte para procedimientos (6/6), Soporte para procedimientos (6/6) destacamos 3 PILA, Soporte para procedimientos (3/6) DESTACA El lenguaje ensamblador debe proporcionar, PILA ES zona de memoria normal gestionada de una manera especial., Soporte para procedimientos este se divide en 6 partes Soporte para procedimientos (2/6), Soporte para procedimientos este se divide en 6 partes Soporte para procedimientos (1/6), Soporte para procedimientos este se divide en 6 partes Soporte para procedimientos (4/6), Soporte para procedimientos (2/6) DESTACA • Una llamada a función supone un cambio en el flujo de ejecución de un programa, con los siguientes pasos: 1. Se le pasan parámetros a la función (i en el ejemplo). 2. Se pasan a ejecutar las instrucciones correspondientes a la función. 3. Se devuelve un resultado. 4. Se sigue ejecutando la siguiente instrucción posterior a la llamada., Soporte para procedimientos este se divide en 6 partes Soporte para procedimientos (3/6), Soporte para procedimientos (1/6) DESTACA • En C, todo código forma parte de una función (la principal es siempre main, que puede llamar a otras con nombres cualesquiera). • La división en funciones mejora la modularidad y legibilidad de los programas • Por ejemplo, una modificación sobre nuestro programa de ejemplo podría ser (equivalente al anterior):, Soporte para procedimientos este se divide en 6 partes Soporte para procedimientos (5/6), PILA ES Empleada para: – Pasar posibles parámetros adicionales a subrutina (si registros insuficientes). – Almacenar el valor de los registros que pueden ser machacados por la subrutina, de forma que su valor pueda ser restaurado al acabar la misma. – Almacenar variables que se usarán localmente a una subrutina, de forma que este espacio temporal se pueda recuperar al acabar la subrutina. – Almacenar dirección de retorno a la instrucción posterior a la llamada.