Publicado el 9 de Julio del 2019
756 visualizaciones desde el 9 de Julio del 2019
981,2 KB
17 paginas
Creado hace 7a (02/11/2016)
La pila y funciones
© Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la
Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción,
puesta a disposición del público y en general cualquier otra forma de explotación de toda o parte
de la misma.
La utilización no autorizada de esta obra, así como los perjuicios ocasionados en los derechos de
propiedad intelectual e industrial de la Universidad Europea de Madrid, S.L.U., darán lugar al
ejercicio de las acciones que legalmente le correspondan y, en su caso, a las responsabilidades
que de dicho ejercicio se deriven.
La pila y funciones
Contenido
Presentación ........................................................................................................................ 4
Funciones (o rutinas) ........................................................................................................... 5
Declaración de una función ................................................................................................. 6
Llamada a una función......................................................................................................... 7
La pila (STACK) ..................................................................................................................... 9
Instrucciones para manejar la pila .................................................................................... 11
Invocación: Instrucciones CALL Y RCALL ............................................................................ 13
Retorno de funciones: instrucción RET (RETorno de la rutina) ......................................... 14
Uso de registros en funciones ........................................................................................... 15
Resumen ............................................................................................................................ 17
© Universidad Europea de Madrid. Todos los derechos reservados.
3
La pila y funciones
Presentación
La programación estructurada, base de cualquier otra metodología de programación, también está
soportada en ensamblador, aunque de una manera muy simple pero robusta.
La programación estructurada está fundamentada en las funciones, trozos de código independiente,
autónomo y reutilizable. Es decir, trazos de código que resuelven un problema y que son independientes
del resto de código del programa, lo que lo hace muy portable y reutilizable. La única comunicación que
mantiene con el resto del programa es a través de parámetros, por los que se le pasa la información de
entrada y por la que sale la información calculada.
Las funciones, además, fundamentan su funcionamiento en la pila. Un concepto de almacenamiento de
información, cuyo principio de funcionamiento es “último en entrar, primero en salir (LIFO)”. Es decir,
podemos entender una pila, como un almacenamiento donde
los elementos están apilados
verticalmente, de manera que solo la cima de la pila es accesible, siendo solo el elemento último en
poner en la pila, el único que puede ser sacado. Los demás elementos (aunque visibles) no pueden ser
sacados de la pila, mientras encima de ellos haya otros elementos.
Objetivos
Los objetivos que se pretenden alcanzar con este recurso son los siguientes:
Analizar el funcionamiento de la pila software que incluyen todos los procesos.
Reproducir el manejo de la pila software en ensamblador.
© Universidad Europea de Madrid. Todos los derechos reservados.
4
La pila y funciones
Funciones (o rutinas)
Cuanto mayor es una organización empresarial, más crecen las responsabilidades y el volumen de ésas.
Por tanto, la evolución natural de las organizaciones les lleva a ir repartiendo las responsabilidades sobre
las actividades que se van desarrollando.
Las rutinas y funciones (que se diferencian porque las primeras no tienen parámetros y las segundas
sí) son conceptos básicos en todos los lenguajes de programación y base de la programación
estructurada.
Permiten la reutilización de código, la separación/división de problemas y la reutilización de una manera
muy simple. Las funciones se pueden agrupar, formado bibliotecas, de modo que puedan volver a ser
utilizadas en el futuro, sin necesidad de reescribir el código que las implementa de forma directa en
nuestro propio proyecto.
Además, las funciones (o rutinas) son la base de la división de trabajo en equipos de desarrollo de varios
programadores. Permitiendo una división del trabajo y una fácil unificación posterior. Dando lugar, al
primer elemento básico necesario para un primer nivel de abstracción en el diseño de software (Software
Engineering)
Sea cual sea el lenguaje de programación que se use, o el nivel de abstracción que permita, por ejemplo,
en programación orientado a objetos, al final, todo el código es traducido a estas pequeñas instrucciones
de código máquina y a sus simples, pero efectivas funciones. No importan el tamaño del objeto, la forma
de los parámetros de una función u otras abstracciones, que al final, serán la pila y las llamadas a las
funciones las encargadas de dar soporte a todo este código de alto nivel.
5
© Universidad Europea de Madrid. Todos los derechos reservados.
La pila y funciones
Declaración de una función
Una función, es sólo un grupo de instrucciones que realizan una tarea determinada y fija, y luego de
terminar su labor, la ejecución del programa vuelve al punto de llamada.
Por tanto, el uso típico que se le da a una función, es el de solucionar un problema aislado, o el de
encapsular un trozo de código que se va a repetir muchas veces a lo largo de nuestro programa.
Ejemplo de repetición
Crear una rutina (no tiene parámetros de entrada ni salida) que permita:
Borrar todos los bits del puerto B.
Inicializar el temporizador 0.
Activar la interrupción de tiempo.
Si esta fuese una tarea que se realiza varias veces en el programa, es buena idea encapsularlo en una
rutina, de manera que cada vez que se quiera hacer esta actividad, solo haya que invocar (llamar) la
función, no teniendo que reescribir el código de nuevo.
La declaración de funciones en ensamblador, no existe, es simplemente una dirección de memoria de
programa, que coincide con a la primera instrucción que componen el grupo de instrucciones. Para
simplificar este cálculo de la primera instrucción, generalmente se identifica con una etiqueta para que el
cálculo y la memorización de la funciona sea más simple. Esta etiqueta representa el nombre de la rutina.
© Universidad Europea de Madrid. Todos los derechos reservados.
6
La pila y funciones
Llamada a una función
La llamada a una función, desde el punto de vista del microprocesador, es solo un salto (incondicional) a
un punto del código. Por tanto, se podría implementar con instrucciones tipo JMP.
Pero entonces, ¿cómo se podría gestionar el regreso al punto de llamada? Hay que tener en cuenta que
una misma función puede ser llamada desde varios puntos de código, por lo que saber desde el punto que
ha sido llamada, para luego continuar desde ahí, se convierte en un problema.
Una posible solución, es almacenar el punto de llamada de alguna manera (se recuerda que el punto
desde el que se llama una función es el valor del registro PC antes del salto), por ejemplo en un registro,
luego, consultando ese punto valor almacenado, se puede saber cuál es el punto de retorno. El problema,
es que una función puede ser invocada desde otra función, con lo que ya hay que recordar dos puntos de
retorno (¿dos registros?).
La solución a esto es la pila de datos. De manera que ya no solo se puede almacenar todos los que se
necesiten (mientras se tenga memoria libre), sino que además se tienen organizados los puntos de
retorno del más actual al más antiguo. De manera que se puede deshacer el camino de llamadas a
funciones deshaciendo los elementos guardados en la pila.
La solución, pasa, porque cada vez que se llama a una rutina, la dirección de memoria del punto de
programa en ejecución (dirección de retorno) debe ser almacenado. Recordemos que ese punto de
retorno, es el valor del contador de programa justo antes de hacer el salto a la función.
La instrucción en ensamblador que hace estas dos tareas es la función call:
Almacenar el valor actual del contador de programa.
Saltar al inicio de la función.
© Universidad Europea de Madrid. Todos los derechos reservados.
7
La pila y funciones
Como el almacenamiento del punto de retorno, ya se realiza en memoria, da la posibilidad de manejar
una
lista
ilimitada de
llamadas de rutina,
incluyendo también
la recursividad (llamando a un
procedimiento desde si mismo).
Memoria
Este espacio de memoria, funcionará como una pila (stack en inglés), donde los nuevos datos se
amontonan en la cima (push) sobre los datos anteriores, manteniendo el orden de llegada. Al recuperar
datos (pop), el primer valor obtenido es el de la parte superior de la pila (cima), que coincide con el
último valor en ser almacenado.
© Universidad Europea de Madrid. Todos los derechos reservados.
8
Comentarios de: La pila y funciones (0)
No hay comentarios