Estructura de Memoria de Segmentación

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 3

ESTRUCTURA DE MEMORIA DE SEGMENTACIÓN:

El 8086 usa un esquema llamado segmentación, para acceder


correctamente a un megabyte completo de memoria, con referencias
de direcciones de sólo 16 bits, y todo esto gracias a la utilización de
registros de segmento que dividen esencialmente el espacio de
memoria en segmentos de 64K de longitud, que pueden estar
separados entre sí, adyacentes o superpuestos, y que comienzan en
una dirección divisible por 16.

La forma en que se completan los 20 bits del bus de direcciones,


disponiendo en la CPU, solamente, registros de 16 bits, se consigue
de la siguiente manera:

Se parte del contenido de uno de los registros de segmento, que


actúan como base. Después, se multiplica por 16 el contenido del
registro de segmento, lo que, en binario, significa añadirle 4 ceros a
la derecha y convertirlo en una magnitud de 20 bits. Finalmente, se
suma un desplazamiento al resultado de la multiplicación anterior.
Abreviadamente, la fórmula para calcular una dirección de memoria
es:

Dirección Física = 16 * (registro de segmento) + desplazamiento.

De esta manera, sobre la dirección base que apunta el registro de


segmento multiplicado por 16, existe un margen de 64K bytes,
controlado por un desplazamiento de 16 bits.
Después de haber visto de una forma general el funcionamiento de la
estructura de la memoria de segmentación vamos a ver cómo, más
concretamente, el 8086 y en función de los registros de segmento y
el resto de registros, calcula las direcciones completas de las
instrucciones, posiciones de pila y datos.

Las direcciones completas de las instrucciones y de las posiciones de


la pila se forman sumando el contenido de los registros IP y SP con el
segmento de código (CS) y el segmento de pila (SS) respectivamente.

La dirección de un dato puede formarse mediante la suma de los


contenidos de los registros BX ó BP, los contenidos de SI ó DI, y un
desplazamiento. El resultado de este cálculo se denomina dirección
efectiva (EA) ó desplazamiento de segmento.
La dirección definitiva del dato, sin embargo, se determina mediante
la EA y el registro de segmento apropiado, el segmento de datos (DS),
el segmento extra (ES) ó el segmento de pila (SS).

El uso de los diferentes segmentos significa que hay áreas de trabajo


separadas para el programa, la pila y los datos. Cada área de trabajo
tiene un tamaño máximo de 64K bytes y un mínimo de 0. Dado que
hay cuatro registros de segmento, uno de programa (CS), uno de pila
(SS), uno de datos (DS) y uno extra (ES) el área de trabajo puede
llegar hasta 256K.

El programador puede determinar la posición de estos segmentos,


cargando el apropiado registro de segmentación de 16 bits con la
dirección de segmento apropiada. Esto se realiza normalmente al
inicio del programa, pero se puede fácilmente hacer en cualquier
momento mientras al programa se ejecuta, cambiando
dinámicamente la dirección de estos segmentos.
Cambiando el desplazamiento, el programador puede acceder a
cualquier punto de segmento. Se puede pensar en el segmento como
una ampliación de memoria que forma un área de trabajo. El
desplazamiento es la única parte de la dirección que aparece
normalmente en los programas en lenguaje ensamblador durante las
referencias a direcciones del área de trabajo.

También podría gustarte