MANUALES

Programación Ensamblador

9. Los segmentos

La arquitectura de los procesadores x86 obliga al uso de segmentos de memoria para manejar la información, el tamaño de estos segmentos es de 64kb.

El motivo es que teniendo en cuenta que el tamaño máximo de un número que puede manejar el procesador esta dado por una palabra de 16 bits o registro, no sería posible accesar a más de 65536 localidades de memoria utilizando uno solo de estos registros, ahora, si se divide la memoria de la pc en grupos o segmentos, cada uno de 65536 localidades, y utilizamos una dirección en un registro exclusivo para localizar cada segmento, y entonces cada dirección de una casilla específica la formamos con dos registros, nos es posible accesar a una cantidad de 4294967296 bytes de memoria, lo cual es, en la actualidad, más memoria de la que veremos instalada en una PC.

Aunque pueda parecer que se puedan producir errores, no es asi, el sistema de funcionamiento es muy sencillo:

Tenemos 3 segmentos de memoria, por que teniamos 170 Kb de memoria y entonces los hemos dividido de forma que podamos acceder a todos ellos, para esto hemos creado 2 segmentos de 64 Kb que son 128 y un tercer segmento de 42 Kb.

Y ahora tenemos que accedemos a la posicion 40000, pero tenemos tres posiciones una en el segmento uno, en el dos y en el tres, para diferenciar cual de las tres es, tenemos los registros de segmento que me indican que segmento contiene la direccion correcta.

Con esta operacion tan sencilla, solo necesitamos saber cual es la direccion y de que segmento para poder guardar o sacar un dato , pero con esto podemos acceder a toda la memoria que tengamos.

1CB0:0102 MOV AX,BX

En donde el primer número, 1CB0, corresponde al segmento de memoria que se está utilizando, el segundo se refiere la la dirección dentro de dicho segmento, y a continuación aparecen las instrucciones que se almacenaran a partir de esa dirección.

La forma de indicarle al ensamblador con cuales de los segmentos se va a trabajar es por medio de las directivas .CODE, .DATA y .STACK.

El ensamblador se encarga de ajustar el tamaño de los segmentos tomando como base el número de bytes que necesita cada instrucción que va ensamblando, ya que sería un desperdicio de memoria utilizar los segmentos completos. Por ejemplo, si un programa unicamente necesita 10kb para almacenar los datos, el segmento de datos unicamente sera de 10kb y no de los 64kb que puede manejar.

Páginas:
1 2 3 4 5 6 7 8 9 10 11