Está en la página 1de 5

LA PILA

La pila sirve para almacenamiento temporal de información de datos y


direcciones. La forma de almacenamiento y recuperación de la
información de la pila utiliza la secuencia LIFO (Last Input First
Output), última en entrar primera en salir.
Cuando se ejecuta una instrucción CALL, el 8088 ingresa los valores
que contienen CS e IP a la pila.
Como parte de la subrutina, es posible colocar en la pila el contenido
de otros registros ejecutando la instrucción PUSH.
Ejemplo:
PUSH SI
Luego de ejecutarse la instrucción, el contenido del registro SI será
ingresado en la pila. Al finalizar la subrutina, mediante la instrucción
POP se pueden recuperar los datos ingresados a la pila a sus
correspondientes registros.
Ejemplo:
POP SI
Al ejecutarse la instrucción, el contenido del registro SI, guardado en la
pila, será tomado del tope de la pila para ingresarlo al registro SI.
Al finalizar la subrutina, la ejecución de una instrucción de retorno,
RET, permitirá que los valores de CS e IP salgan de la pila y regresen a
los registros internos de donde originalmente se encontraban.
La pila es de 64KB y desde el punto de vista de software se organiza
como 32K palabras, cada palabra tiene 2 bytes. La palabra de dirección
más baja de la pila está indicada mediante el contenido del registro de
segmento de pila SS. Los contenidos de los registros SP y BP se utilizan
como offset al interior del segmento de pila.
La dirección obtenida del contenido de los registros de SS y SP (SS:SP)
es la dirección física en la que se ubicó el último almacenamiento en la
pila. Esta dirección se conoce como tope de pila (TOS).
Al arrancar el microcomputador el valor del registro del puntero de
pila, SP, se lo inicializa con FFFEH. Combinando este valor con el valor
del registro SS, (SS:FFFEH), obtenemos la ubicación de la dirección
más alta de la pila (BOS).
El 8088 ingresa en la pila los datos y direcciones de palabra en palabra.
Cada vez que el contenido de un registro se va a ingresar al tope de la
pila, el valor en el registro de puntero de pila SP automáticamente es
disminuido en dos y luego se escribe el contenido del registro en la
pila. De esta forma se ve que la dirección de la pila varía
decrecientemente desde su valor más alto, esto es, desde SS:FFFEH.

Ejercicio 1:

Dados los valores de los registros AX, SS y SP, encontrar las direcciones de:
Inicio, fin y tope de pila. Considerar que los valores están expresados en
hexadecimal.
RAM
<-- 16 bits --
>

1153E 12 23 Inicio de la pila (BOS)


14 23
Dirección de BOS . .
1540 + FFFE = 1153E . .
. .
AX 78 08 28 29
31 33
34 36
47 48

SP 00 08 1548 49 57 Tope de la pila (TOS)


Dirección de TOS 1546 58 59
01540 + 0008
= 1548 1544 AA AB
1542 CD EF

SS 01 54 1540 63 41 Fin de la pila (EOS)

El último valor que ingresó a la pila es 5749.

Los valores que se encuentran entre TOS Y BOS son valores válidos de
pila, mientras que los que están entre TOS Y EOS ya no son válidos,
aunque estén presentes en la pila. Si se ingresa nueva información a la
pila, ésta reemplazará a la no válida.
Ejercicio 2:

¿Cuáles son los valores almacenados en BOS, TOS y EOS en el ejercicio anterior?

BOS ---> 2312


TOS ---> 5749
EOS ---> 4163
Ejercicio 3:

a) Mostrar el valor de la palabra ubicada en TOS

57 49
1549H 1548H

b) ¿Cuál es la dirección física de pila en la que se almacenaría el contenido


del próximo registro?

TOS - 2

1548-2 = 1546

c) Ingresar a la pila el valor de AX e indicar el nuevo valor de SP.

PUSH AX

1546 08 78

SP = TOS - 2

SP 00 06

Cuando se recupera el contenido de un registro desde el tope de la pila,


la secuencia de este proceso se revierte. Se recupera el valor contenido
en la pila y se lo ubica en el registro respectivo y el SP
automáticamente se aumenta en dos. El valor del tope de la pila ahora
corresponde al que tenía antes de ingresar el contenido de un registro.
d) Recuperar de la pila el valor de AX e indicar el nuevo valor de SP.

POP AX

AX 78 08

SP = TOS + 2

SP 00 08

ESPACIO DE DIRECCIONES PARA ENTRADA Y SALIDA (INPUT/OUTPUT)

El 8088 cuenta con memoria de 64KB (desde 0000H a FFFFH),


separada para direcciones de entrada/salida (I/O). En este espacio se
implementan las interfaces de I/O, como pórticos de impresoras y de
terminales. Las direcciones I/O son de 16bits.
La parte del mapa, entre 0000H y 00FFH se la denomina página 0.
Algunas instrucciones de I/O del 8088 pueden ejecutar operaciones
para dispositivos de I/O ubicados únicamente en esta parte del
espacio de direcciones. Otras instrucciones de I/O pueden poner o
sacar datos desde los dispositivos localizados en cualquier parte del
espacio de direcciones de I/O. Las ocho direcciones de memoria
ubicadas desde 00F8H a 00FFH son reservadas por el fabricante Intel
Corporation y no deben usarse.

También podría gustarte