REGISTROS DE SEGMENTOS
Unos registros adicionales, a los que se le da el nombre de registro de segmentos, generan direcciones en la memoria juntos con otros registros en el microprocesador. Hay 4 o 6 registros de segmentos en las diversas versiones de microprocesadores 8086 – 80486. Un registro de segmento funciona de una manera diferente en el modo real, por comparación con el funcionamiento del microprocesador en modo protegido. Lista de cada registro de segmento junto con su función en el sistema: CS (código: El segmento de código es una sección de la memoria que tiene los programas y procedimientos utilizados por los programas. El registro de segmento de código define la dirección inicial de la sección de memoria que tiene el código. En el funcionamiento en modo real, define el inicio de una sección de memoria de 64k bytes y en el modo protegido seleccion a un descriptor que describe la dirección inicial y la longitud de la sección de memoria que tiene el código. El segmento de código es limitado a 64k bytes de longitud en el 8086 – 80286 y a 4G bytes en el 80386/80486. DS (datos): El segmento de datos es una sección de la memoria que contiene la mayor parte de los datos utilizados por un programa. Se les accesa en el segmento de datos con un desplazamiento o con el contenido de otros registros que tienen la dirección del desplazamiento. ES (extra o adicional): El segmento extra o adicional de datos lo utilizan algunas instrucciones para cadenas. SS (pila): El segmento de la pila define la superficie de la memoria utilizada para la pila. La ubicación del punto inicial de entrada a la pila, se determina por el registro apuntador de la pila. El registro BP (Apuntador de base) también direcciona los datos que hay dentro del segmento de pila. FS y CS: Estos registros de segmentos adicionales están disponibles en los microprocesadores 80386 y 80486.
REGISTRO DE SEGMENTO Y DESPLAZAMIENTO DESPLAZAMIENTO PREDETERMINADO
El microprocesador tiene un grupo de reglas que se aplican siempre que se direcciona a la memoria. Estas reglas, que se aplican en el modo real o en el protegido, definen la combinación de registro de segmento y de desplazamiento, que se utilizan en ciertos modos de direccionamiento. Por ejemplo, el registro de segmento de código se emplea siempre con el apuntador de instrucciones para direccionar la siguiente instrucción a ejecutar en un programa. Esta combinación es CS:IP o CS:EIP, según sean el microprocesador y el modo de
funcionamiento. El registro de segmento de código define el principio de un segmento de código y el apuntador de instrucciones apunta a la siguiente instrucción dentro del segmento de código a ejecutar por el microprocesador. Por ejemplo, si CS= 1400H IP/EIP = 1200H, el microprocesador busca y lee la siguiente instrucción en la localidad 14000H + 1200H o sea 15200H en la memoria. Otro direccionamiento implícito es el de la pila. Se hace referencia a los datos de la pila por medio del segmento de pila y por localidad de la memoria a la cual direcciona el apuntador de la pila (SP/ESP) o el apuntador de base. Esta combinaciones se refieren como SS:SP (SS:ESP) o SS:BP (SS:EBP). Por ejemplo, si SS= 2000H y BP/EBP= 3000H, el microprocesador direcciona a la localidad 23000H en la memoria del segmento de la pila direccionada por el registro BP/EBP. Se debe tener en cuenta que en el modo real, solo los 16 bits en la extrema derecha del registro extendido direccionan a una localidad dentro del segmento de memoria. Nunca ponga un número mayor que FFFFH en un registro de desplazamiento si el microprocesador funciona en el modo real. Si en el modo real se direcciona a una memoria mayor que 100000H ocasionará que el microprocesador interrumpa el programa e indique un error.
Direccionamiento implícitos para la memoria para microprocesadores 8086 - 80286. Segmento Desplazamiento CS IP SS SP o BP DS BX, DI, SI o un numero de 16 bits ES DI para instrucciones para cadenas
Direccionamiento implícitos para la memoria para microprocesadores 80386 - 80486. Segmento
Desplazamiento
CS SS DS ES
EIP ESP o EBP EAX, EBX, ECX, EDX, EDI, ESI, un numero de 8 bits o de 32 bits DI para instrucciones para cadenas
FS
No implícito
GS
No implícito
Los 8086 - 80286 permiten tener 4 segmentos de memoria; el 80386 y 80486 permiten 6 segmentos de memoria.
DIRECCIONAMIENTO DE LA MEMORIA EN MODO REAL
Los microprocesadores 80286 - 80486 funcionan en el modo real o en el modo protegido. Los 8086, 8088 y 80186 solo funcionan en el modo real. El funcionamiento en el modo real permite que el microprocesador solo direccione al primer 1M bytes de espacio en la memoria, aunque sea un microprocesador 80486. En los sistemas de funcionamiento MSDOS o PCDOS se supone que el microprocesador funciona en el modo real en todo momento. El funcionamiento en el modo real permite que el software de aplicación escrito para el 8086 u 8088 que sólo contienen 1M bytes de memoria, funcionen en los microprocesadores 80286, 80386 y 80486. En todos los casos, cada uno de los microprocesadores empieza a funcionar en modo real en forma implícita (default), siempre que se le aplica la corriente o se restablece el microprocesador. Todas las direcciones en la memoria en modo real consisten de un segmento y un desplazamiento. El segmento ubicado en uno de los registros de segmento, define la dirección inicial de cualquier segmento de memoria de 64K bytes. La dirección de desplazamiento selecciona una localidad dentro del segmento de memoria de 64K bytes. DIRECCIONAMIENTO DE LA MEMORIA EN MODO PROTEGIDO
El direccionamiento de la memoria en modo protegido (solo 80286, 8038 y 80486) permite acceso a los datos y programas ubicados arriba del primer Mbytes de memoria. El direccionamiento de esta sección extendida del sistema de memoria (la memoria encima del prime Mbytes de memoria se denomina memoria extendida o XMS), requiere un cambio en el sistema de direccionamiento de segmento y desplazamiento, utilizando con el direccionamiento de la memoria en modo real. Cuando se direcciona a los datos y programa en la memoria ampliada, todavía se utilizan la dirección de desplazamiento para accesar la información ubicada dentro del segmento. La dirección del segmento, que se describió en relación con el direccionamiento de la memoria en modo real, ya no está presente en el modo protegido. En lugar de la dirección de segmento, el registro del segmento contiene un selector que selecciona un descriptor; este describe la ubicación, longitud, y derechos de acceso al segmento de memoria. Debido a que el registro de segmento y la dirección de desplazamiento todavía accesan a la memoria, las instrucciones en el modo protegido se ven iguales que en el modo real. La diferencia entre los modos está en la forma en que el registro de segmento accesa el segmento de memoria. MODOS DE DIRECCIONAMIENTOS DE DATOS Direccionamiento por registro: Transfiere un bytes o palabra desde el registro fuente o localidad en la memoria, hasta el registro o localidad destino en la memoria. Ejemplo: la instrucción MOV CX,DX copia el contenido del registro DX y lo pasa al registro CX. Direccionamiento inmediato: Transfiere un bytes o palabra de datos inmediatos hacia el registro o localidad en la memoria en el destino. Ejemplo: la instrucción MOV AL,22H copia el 22H al registro AL.
Direccionamiento directo: Mueve un bytes o palabra entre una localidad de la memora y un registro. Direccionamiento indirecto por registro: Transfiere un bytes o palabra entre un registro y una localidad de memoria direccionada por un registro índice o base. Los registros in dice y base son BP, EX, DI Y SI. Ejemplo: la instrucción MOV AX,[BX] copia los datos de una dirección del segmento de datos con un desplazamiento dado por BX y lo pasa al registro AX. Direccionamiento base e índice: Transfiere un bytes o palabra entre un registro y la localidad de memoria direccionada por un registro base ( BP o BX) más un registro índice (DI o SI ). Ejemplo: MOV [BX + DI], CL copia el contenido del registro CL y lo pasa a la localidad de memoria direccionada por BX más DI en el segmento de dato. Direccionamiento relativo por registro: Transfiere un bytes o una palabra entre un registro y una localidad en la memoria direccionada por un registro índice o un registro base y además un desplazamiento. Ejemplo: MOV AX,[BX + 4] o MOV AX,ARREGO[BX]. La primera instrucción copia una palabra de dato de una dirección en el segmento de datos, formada por el contenido de BX más 4, y la pone en el registro AX. La segunda instrucción transfiere el contenido de la localidad de memoria de una matriz ARREGLO más el contenido de BX en el registro AX. Direccionamiento relativo base mas índice: Transfiere un bytes o una palabra entre un registro y la localidad en la memoria direccionada por un registro base mas índice más un desplazamiento. Ejemplo: MOV AX,ARREGLO[BX + DI] o MOV AX,[BX + DI + 4]. Ambas instrucciones copian una palabra de datos de una localidad de memoria y la colocan en el registro AX. En la primera instrucción se emplea una dirección formada al sumar ARREGLO,BX y DI y la segunda al sumar BX, DI y 4. Direccionamiento de índice escalado: Esta disponible en los microprocesadores 80386 y 80486. PAGINACION DE MEMORIA
Es una técnica de manejo de memoria, en la cual el espacio de memoria se divide en secciones físicas de igual tamaño, denominadas marcos de página. Los programas se dividen en unidades lógicas: Denominadas páginas; las paginas sirven como unidad de almacenamiento de información y transferencia entre la memoria principal y la memoria secundaria.