La pila en MC9S08Q128 y su uso

De Wikitronica
Saltar a: navegación, buscar
Este artículo está incompleto. Necesita trabajo adicional. Revisar la discusión.


El microcontrolador MC9S08QE128 incluye un registro denominado "Stack pointer" o "Apuntador a pila", el cual sirve para controlar la función de pila que incluye éste. La pila cumple un papel extremadamente importante para la programación dentro del microcontrolador, pues permite guardar direcciones de memoria al momento de entrar en interrupciones, y permite guardar variables temporales o locales. Su buen uso es vital para poder crear códigos bien estructurados y sin tener que declarar variables globales una y otra vez. El uso de la pila puede hacer la diferencia entre un código ordenado y un completo desastre en programas con muchas subrutinas, pues esta sirve como una especie de "registro temporal" donde se pueden declarar un grupo de variables temporales que pueden ser limpiadas y utilizadas posteriormente para declarar otro grupo de variables.

¿Qué es la pila?:

La pila (Conocida en inglés como Stack) es un tipo de dato abstracto, donde predominan dos operaciones, insertar (Push) y retirar (Pop). La pila sigue el principio LIFO (Acrónimo para last in, first out) en el cual el último dato insertado es el primero que se puede retirar. Se puede representar de la siguiente manera: Cada dato es una hoja de papel, y se van acumulando los datos uno sobre otro. Solamente se puede retirar la hoja de papel que se encuentra en el tope de la pila, es decir, el dato que se insertó de ultimo.

El registro SP y su inicialización

Ver: Registro SP

Instrucciones del HCS08 relacionadas a la pila

Instrucción Descripción
1 PSHA / PSHH / PSHX

Toma el dato guardado en acumulador (A), en el registro H (H) o en el registro X (X) y lo guarda en la dirección apuntada por el Stack Pointer. Posteriormente, decrementa el valor del registro SP en uno

2 PULA / PULH / PULX

Se incrementa el valor del registro SP en uno, y posteriormente se guarda el dato guardado en la dirección de memoria a la cual apunta SP en el acumulador (A), en el registro H (H) o en el registro X (X). Finalmente, la dirección de memoria de donde se tomó el dato se define como espacio sin declarar.

3 LDA 'operando',SP

Se carga el valor de la dirección de memoria "operando + SP". Muy util para poder movernos a traves de cada una de las variables temporales definidas en pila sin tener que hacer varias operaciones de Pull.

4 STA 'operando',SP

Se guarda el dato almacenado en acumulador en la dirección de memoria "operando + SP". Al igual que su contraparte LDA, es muy util para modificar variables almacenadas en pila sin realizar Pull y Push varias veces

5 AIS #


Suma un valor # inmediato al registro SP, permitiendo desplazar el apuntador a la pila hacia arriba o hacia abajo y limpiar un gran grupo de variables rapidamente

6 TSX

Transfiere el contenido del registro SP al registro HX. Es muy util a la hora de guardar la dirección de una cierta variable y mover el apuntador a pila a la vez.


7 TXS

Transfiere el contenido del registro HX al registro SP


8 RSP

Escribe 0xFF sobre el registro bajo de SP. Si se inicializa el registro SP en 0x17FF y no se insertan más de 255 variables se puede utilizar esta instrucción para resetear el apuntador a su posición inicial (Pasamos de 0x17XX a 0x17FF)


Advertencias

Ejemplos de códigos que emplean la pila