NOMBRE

:

JORGE DAVID YAÑEZ GONZALEZ. ZULMA MARIELA GONZALEZ RAMOS.

CATEDRATICO:
ING. OMAR VEGA ARRIAGA.

MATERIA: CARRERA:

SOFTWARE DE SISTEMAS.

LIC. EN INFORMATICA.

TURNO NOCTURNO.

FECHA:

13/ABRIL/2008.

1 JORGE DAVID YAÑEZ GONZALEZ.

ZULMA MARIELA GONZALEZ RAMOS.

Instrucciones Stack (pila). "Stack" significa pila en inglés, pila en el sentido de "apilar cosas", no de batería eléctrica. Es una zona de la memoria en donde se guardan cosas. Por ejemplo las variables locales de las subrutinas y funciones, los parámetros, algunos resultados intermedios de cálculos complejos, etc. Todo el manejo del stack lo realiza el compilador de forma automática, así que no hace falta preocuparse salvo cuando se acaba el lugar y el programa genera un error ("stack overflow"). Lo más importante de esta estructura es que en cada momento sólo se tiene acceso a la parte superior del stack (no a las cosas que están apiladas debajo). Entonces cada subrutina puede guardar sus datos en el stack, y las subrutinas a las que llame no los afectarán. La pila es una zona de la memoria sobre la que se pueden escribir y leer datos de forma convencional. Esta zona tiene una posición especial que se denomina “la cima de la pila”. El procesador contiene dos instrucciones de su lenguaje máquina para realizar las operaciones de “apilar” y “des apilar” datos de la pila. Los datos que se pueden apilar y des apilar, en el caso del Intel Pentium son siempre de tamaño 4 bytes.

2 JORGE DAVID YAÑEZ GONZALEZ.

ZULMA MARIELA GONZALEZ RAMOS.

El puntero de pila Del funcionamiento de las instrucciones push y pop se deduce que en algún lugar del procesador debe estar almacenada la dirección de la cima de la pila y que dicho valor es modificado por ambas instrucciones. En el caso del Intel Pentium, esta dirección de memoria está guardada por defecto en el registro de propósito general %esp. Las dos últimas letras del nombre de este registro corresponden con las iníciales de las palabras stack pointer o “apuntador de pila”. La primera consecuencia de esta característica del procesador es que, a pesar de que dichos registros están, en principio, disponibles para almacenar valores de forma temporal, el caso de %esp es especial, pues es donde las instrucciones de manipulación de la pila asumen que se encuentra la dirección de la cima. El tamaño de este registro es de 32 bits que coincide con el tamaño de toda dirección de memoria del Intel Pentium.

3 JORGE DAVID YAÑEZ GONZALEZ.

ZULMA MARIELA GONZALEZ RAMOS.

Ejecución de instrucciones de pila El que la dirección de la pila esté contenida en un registro de propósito general permite que su contenido sea manipulado como cualquier otro registro. Un programa, por tanto, puede leer y escribir cualquier valor de %esp, tan sólo se debe tener en cuenta que el procesador obtiene de ese registro la dirección de memoria necesaria para ejecutar las instrucciones push y pop. Supóngase que se ha depositado un cierto dato en la pila mediante la instrucción push y que se encuentra, por tanto en la cima. La instrucción pop deposita ese valor en el lugar especificado pero, ¿es posible ejecutar la instrucción pop sin ningún operando? En otras palabras, la operación que se quiere ejecutar no es la de copiar el dato de la cima, sino simplemente corregir el valor de la cima al igual que haría pop pero sin depositar el dato en ningún lugar. La instrucción pop, por definición, debe incluir un único operando, con lo que no se puede utilizar para hacer esta operación. La solución se deriva del hecho de que la instrucción ADD $4, esp su valor incrementado en cuatro unidades. El efecto que esta instrucción tiene sobre la pila es el deseado. La siguiente instrucción asume que la cima está en la nueva posición contenida en %esp.

4 JORGE DAVID YAÑEZ GONZALEZ.

ZULMA MARIELA GONZALEZ RAMOS.

Operaciones
En lenguajes modernos, la pila es generalmente aplicada con más de las operaciones de solo "push" y "pop". La duración de una pila puede ser devuelta a menudo como un parámetro. Otra operación de ayuda de arriba [1] (también conocido como mirar o pico) puede devolver el elemento actual superior de la pila sin eliminarlo de la pila. En esta sección se ofrecen pseudocódigo para añadir o eliminar nodos de una serie, así como la duración y las funciones arriba. A lo largo vamos a usar nula para referirse a un final de la lista de marcadores o valor centinela, que puede aplicarse de varias maneras usando punteros.

Registro de datos Nodo (/ / Los datos están almacenados en el nodo siguiente / / Una referencia al siguiente nodo; nulo para el último nodo) Registro Stack Node stackPointer (/ / apunta a la 'top' nodo; nulo para una pila vacía) Función push (Pila pila, elemento de elemento) (/ / push nuevo elemento en la pila (newNode) / / Asignar la memoria de celebrar nuevo nodo newNode.data: = elemento newNode.next: = stack.stackPointer stack.stackPointer: = newNode) Función pop (Pila pila) (/ / incrementar el puntero de pila y volver 'top' de nodo / / Se puede comprobar si stack.stackPointer aquí es nula. / / Si es así, puede que desee error, citando la pila underflow. Nodo: = Stack.stackPointer stack.stackPointer: = node.next elemento: = node.data regreso elemento) Función arriba (Pila pila) (/ / retorno 'top' nodo regreso stack.stackPointer.data) Función longitud (Pila pila) (/ / devolver la cantidad de nodos en la pila longitud: = 0 nodo: = stack.stackPointer mientras nodo no nulo (longitud: = longitud + 1 nodo: = node.next regreso longitud))

5 JORGE DAVID YAÑEZ GONZALEZ.

ZULMA MARIELA GONZALEZ RAMOS.

Aplicación
Un requisito típico de almacenamiento de una pila de n elementos es O (n). El requisito típico tiempo de O (1) operaciones también es fácil de satisfacer con un arreglo dinámico o vinculadas (por separado) la lista de ejecución. C + + 's Biblioteca de plantillas estándar proporciona una "pila" templated clase que se limita a sólo empujar / pop operaciones. Java contiene una biblioteca de la clase Pila que es una especialización de Vector. Esto podría ser considerado como un defecto, porque el diseño heredado get () de Vector método LIFO ignora la limitación de la Pila. Este es un ejemplo sencillo de una pila con las operaciones descritas anteriormente (pero no hay comprobación de errores) en Python. Clase Stack (objeto): def __init__ (self): libre. Stack_pointer = None def push (self, elemento): libre. Stack_pointer = Nodo (elemento, la libre. Stack_pointer) ganó pop (libre): e = libre. Stack_pointer. Elemento Libre. Stack_pointer = libre. Stack_pointer. Próxima retorno e ganó a mirar (self): return libre. Stack_pointer. Elemento def __len__ (self): i = 0 = libre sp. Stack_pointer mientras sp: i + = 1 sp = sp. Próxima retorno I clase Node (objeto): def __init__ (self, elemento = None, siguiente = None): libre. Elemento = elemento libre. Próxima = próximo si __name__ == '__main__': # pequeño ejemplo uso s = Stack (s) [ . Empuje (i) para i en xrange (10)] imprimir [art pop () para i en xrange (len (s))]

6 JORGE DAVID YAÑEZ GONZALEZ.

ZULMA MARIELA GONZALEZ RAMOS.

ARQUITECTURA BASICA DE UNA PILA.

7 JORGE DAVID YAÑEZ GONZALEZ.

ZULMA MARIELA GONZALEZ RAMOS.