Arquitectura del Microprocesador

     



    Es necesario conocer la arquitectura interna visible para el programa, correspondiente a los microprocesadores 8086 al pentiun II. También veremos las funciones y objetivos de estos registros internos.

    El modelo de programación de los microprocesadores 8086 al Pentium II se considera visible para el programa, ya que sus registros son utilizados durante la programación de aplicaciones y son especificados por las instrucciones. Otros registros se consideran como invisibles para el programa debido a que no están accesibles directamente durante la programación de las aplicaciones, aunque pueden ser usados indirectamente durante el programación del sistema. únicamente el 80286 y posteriores contienen registros invisibles para el programa que se utilizan para controlar y operar el sistema de memoria en modo protegido .

    El modelo de programación de los microprocesadores del 8086 al Pentium II. (Los antiguos 8086,8088 y 80286 poseen arquitecturas internas de 16 bits, un subconjunto de los registros mostrados en la figura. Los microprocesadores 80386,80486, Pentium, Pentium Pro y Pentium II poseen arquitecturas internas completas de 32 bits. Las arquitecturas de los antiguos 8086 al 80286 son totalmente compatibles con los 80386 y Pentum II.

    El modelo de programación contiene registros de 8,16 y 32 bits. Los registros de 8 bits son AH, AL, BH, BL,CH,CL,DH y DL y son especificados cuando una instrucción se forma utilizando estas denominaciones de dos letras. Los registros de 16 bits son AX, BX, CX, DX, SP, BP, DI, SI, IP, FLAGS, CS, DS, ES, SS, FS y GS. Estos registros también se especifican con denominaciones de dos letras. Los registros extendidos de 32 bits son EAX, EBX,ECX,EDX,ESP,EBP,EDI,ESI,EIP, y EFLAGS. Los registros extendidos de 32 bits, y los de 16 bits FS y GS, están disponibles solamente en los microprocesadores 80386 y posteriores.

Regitros de propósito múltiples

EAX (acumulador): EAX es especificado como un registro de 32 bits, como un registro de 16 bits AX o como un de 8 bits AH o AL. El acumulador se utiliza para instrucciones tales como la división, la multiplicación y algunas instrucciones de formato. En los microprocesadores 80386 y posteriores, el registro EAX puede contener también la direccioón de desplazamiento de una localidad en el sistema de memoria.

EBX (índice de base):El EBX puede ser direccionado como EBX,BX,BH o BL. El registro BX en ocaciones contiene la dirección de desplazamiento de una localidad en el sistema de memoria para todas las versiones de microprocesadores. En los 80386 y posteriores, EBX también puede direccionar datos de memoria.

ECX (cuenta): El ECX es un registro de próposito general que también contiene el contador para las distintas instrucciones. En los 80386 y posteriores, el registro ECX también puede contener la dirección de desplazamiento de los datos en memoria. Las instrucciones que usan un contador son las instrucciones de cadena repetidas, las instrucciones de desplazamiento , rotacion y LOOP/LOOPD. Las instrucciones de desplazamiento y rotación utilizan al CL como contador, las instrucciones de cadenas repetidas usan a CX y las instrucciones LOOP/LOOPD, usan ya sea a CX o a ECX.

EDX (datos): es un registro de próposito general que contiene parte del producto de una multiplicación o parte del dividendo de una división. En el 80386 y posteriores este registro también puede direccionar datos en memoria.

EBP (apuntador de base): EBP apunta hacia una localidad de memoria, para la transferencias de datos de memoria, en todas las versiones del microprocesador. Este registro se direcciona ya sea como BP o como EBP.

EDI (índice de destino): A menudo, EDI direcciona datos del destino de las cadenas para las instrucciones de cadena. También funciona como registro de propósito general tanto de 32 bits (EDI), como de 16 (DI).

ESI (índice de fuente): El ESI puede utilizarse ya sea como ESI o como SI. El registro del índice fuente con frecuencia direcciona datos del origen de las cadenas para las intrucciones de cadena. Al igual que EDI, ESI también funciona como un registro de propósito general. Como registro de 16 bits, se direcciona como SI; como registro de 32 bits, se direcciona como ESI.

Registros de segmento

Los registros de segmento son registros adicionales que generan direcciones de memoria al combinarse con otros registros del microprocesador. Existen ya sea cuatro o seis registros de segmento en diferentes versiones del microprocesador. Un registro de segmento funciona de manera diferente dependiendo de si el microprocesador opera en modo real o en modo protegido. A continuación encontrará una lista de cada registro de segmento, con su función en el sistema:

CS (código): El segmento de código es una sección de la memoria que contiene el código (programas y procedimientos) utilizados por el microprocesador. El registro del segmento de código define la dirección inicial de la sección de memoria que contiene el código. En operación de modo real, define el principio de una sección de 64 KB de memoria; en modo protegido, selecciona un descriptor que muestra la dirección de inicio y la longitud de una sección de memoria que contiene código. El segmento de código está limitado a 64 Kb en los 8088 al 80286 y a 4 GB en los 80386 y posteriores, cuando estos microprocesadores operan en modo protegido.

DS (datos): el segmento de datos es una sección de memoria que contiene la mayoría de los datos utilizados por un programa. En este segmento, se accede a los datos por medio de un desplazamiento o a través del contenido de otros registros que contienen la dirección de desplazamiento. Al igual que los segmentos de código y otros segmentos, su longitud está limitada a 64 Kb en los 8086 al 80286 y a 4 GB en los 80386 y posteriores.

ES (extra): el segmento extra es un segmento de datos adicional utilizado por algunas instrucciones de cadena para constituir el destino de los datos.

SS (pila): el segmento de pila define el área de memoria utilizada para la pila. El punto de entrada de la pila está determinado por los registros de este segemento, así como por los registros de los apuntadores de pila. El registro BP también direcciona datos dentro del segmento de pila.

FS y GS: los segmentos FS y GS son los registros de segmento complementarios que están disponibles en los microprocesadores 80386,80486, Pentium y Pentium Pro y que permiten que los programas accedan a dos segmentos de memoria adicionales.

Puntero de instrucciones

El puntero de instrucciones es un registro de 32 bits llamado EIP, el cual mantiene el offset de la próxima instrucción a ejecutar. El offset siempre es relativo a la base del segmento de código (CS). Los 16 bits menos significativos de EIP conforman el puntero de instrucciones de 16 bits llamado IP, que se utiliza para direccionamiento de 16 bits.

Registros de direcciones del sistema

Existen cuatro registros de direcciones del sistema, pensados para refereciar las tablas o segmentos soportados por el modelo de protección de la CPU 286 y 386 DX. Estas Tablas o Segmentos son:

GDT (Global Descriptor Table)
IDT (Interrupt Descriptor Table)
LDT (Local Descriptor Table)
TSS (Task State Segment)

Las direcciones de estas tablas y segmentos se encuentran en registros especiales, Direcciones del Sistema y Registros de Segmentos del Sistema, los mismos son: GDTR, IDTR, LDTR y TR, respectivamente.

GDTR e IDTR: estos registros almacenan la dirección lineal de la base en 32 Bits y el límite en 16 Bits. Ambos datos referidos a la tabla de descriptores globales y a la tabla de descriptores de interrupciones, respectivamente. Como ambos registros se refieren a un segmento global a todas las tareas en el sistema, deben referenciarse a travéz de una dirección base lineal de 32 Bits y un límite de 16 Bits (sujetos a la traducción necesaria si la paginaci&ocute;n se encuentra activada).

LDTR y TR: estos registros almacenan un selector de 16 Bits, referido a un descriptor de la tabla de descriptores locales o a uno del segmento de estado de tareas, respectivamente. Como ambos se refieren a una tarea en particular, se los puede referenciar a travéz de un selector almacenado en un registro de segmentos del sistema. Notese que existe un descriptor de segmento oculto (invisible para el programador) relacionado con cada registro de segmentos del sistema, el cuál se carga al asignarle un selector al registro.

TSS (Task-State Segment):
Una tarea posee dos elementos básicos, un espacio de ejecución y una TSS. El espacio de ejecución está compuesto por un segmento de código, un segmento para su stack o pila y uno o más segmentos de datos. En general si usa un mecanismo de potección para distintos niveles de privilegios entre las tareas se le da un stack o pila a cada una de estas.
Por otro lado se encuentra la TSS que es una tabla en memoria que almacena el entorno de ejecución o el estado de la tarea.
La TSS tiene la siguiente estructura:


32-Bit Task-State Segment (TSS)
31 15 0
 
I/O Map Base Address   T
100
  LDT Segment Selector
96
  GS
92
  FS
88
  DS
84
  SS
80
  CS
76
  ES
72
EDI
68
ESI
64
EBP
60
ESP
56
EBX
52
EDX
48
ECX
44
EAX
40
EFLAGS
36
EIP
32
CR3 (PDBR)
28
  SS2
24
ESP2
20
  SS1
16
ESP1
12
  SS0
8
ESP0
4
  Previous Task Link
0
 
 
  Bits Reservados. Setearlos a 0.

Cada TSS posee uno o varios descriptores de la misma que se encuentra en la GDT. También puede posee un Task-Gate Descriptor. La TSS debe ser única para cada proceso. El micro no permite recursividad de una tarea.


TSS 16-BITS
15 0
 
Task LDT Selector
42
DS Selector
40
SS Selector
38
CS Selector
36
ES Selector
34
DI
32
SI
30
BP
28
SP
26
BX
24
DX
22
CX
20
AX
18
Flag Word
16
IP (Entry Point)
14
SS2
12
SP2
10
SS1
8
SP1
6
SS0
4
SP0
2
Previous Task Link
0


Registros de Control

En el 80386 aparece una nueva serie de registros, no encontrados anteriormente en los microprocesadores Intel, como son los registros para control, depuración y verificación. Los registros de control CR0-CR3 controlan varias características, DR0-DR7 facilitan la depuraci&ocute, y los registros TR6 y TR7 se utilizan para verificar la paginación y el uso de la memoria caché.
El registro de control 0 (CR0) es igual al MSW (palabra de estado de máquina) encontrado en el microprocesador 80286, excepto que es de 32 bits, en lugar de 16. El CR1,CR2 y CR3 son registros de control adicionales. El registro de control CR1 no se utiliza en el 80386, pero está reservado para productos posteriores. El registro de control CR2 contiene la dirección lineal de página accedida antes de que ocurriera una interrupción por falla de página. Por uacute;ltimo, el registro de control CR3 contiene la dirección base del directorio de tablas de páginas.Los 12 bits del extremo derecho de la dirección de tabla de páginas de 32 bits contiene ceros y concatenan con el restro del registro para ubicar el inicio de la tabla de páginas de 4 KB de longitud.
El registro CR0 contiene un número de bits de control especiales definidos en el 80386 como sigue:
PG : selecciona la traducción por tabla de páginas de la dirección lineal a una dirección física cuando PG=1. La traducción por tabla de páginas permite asignar cualquier localidad de memoria física a cualquier dirección lineal.
ET: selecciona el coprocesador 80287 cuando ET=0 y al coprocesador 80387 cuando ET=1. TS: indica que el 80386 ha conmutado tareas (en el modo protegido, el cambio del contenido del TR coloca un 1 en TS). Si TS=1, una instrucción del coprocesador numérico ocasiona la interrupción tipo 7 (coprocesador no disponible).
EM: es establecido para ocacionar una interrupción tipo 7 para cada instrucción ESC. Frecuentemente utilizamos esta interrupción para emular, con software, la función del coprocesador. La emulación reduce el costo del sistema, pero frecuentemente requiere por lo menos 100 veces más tiempo para ejecutar las instrucciones emuladas del coprocesador.
MP: es establecido para indicar que el coprocesador aritmético está instalado en el sistema.
PE: es establecido para seleccionar el modo de operación protegido del 80386. Puede también limpiarse para reingresar al modo real. Este bit solamente puede establecese en el 80286. El 80286 no podía regresar al modo real sin una instrucción por hardware, lo que imposibilita su uso en la mayoría de los sistemas que emplean en modo protegido.


Registros de depuración y verificación

Los primeros 4 registros de depuración contienen direcciones lineales de 32 bits de puntos de detención (una dirección lineal es una dirección de 32 bits generada por una instrucción del microprocesador que puede, o no, ser igual a la dirección física). Las direcciones de punto de detección, que pueden ubicar una instrucción o un dato, son constantemente comparadas con las direcciones de punto de detección, que pueden ubicar una instrucción o un dato, son constantemente comparadas con las direcciones que genera el programa. Si ocurre coincidencia, el 80386 ocasionará una interrupción tipo 1 (TRAP o interrupción de depuración), si es instruido por los registros de depuración DR6 y DR7. Esta característica es una versión muy ampliada de la trampa o trazado básico permitido por los microprocesadores anteriore a Intel, por medio de la interrupción tipo 1. Las direcciones de punto de detección son muy útiles para la depuración de software defectuoso. Los bits de control DR6 y DR7 son definidos como sigue:
BT: si está establecido(1), la interrupción de depuración fue ocasionada por una conmutación de tarea.
BS: si está establecido(1), la interrupción de depuración fue ocasionada por el bit TF en el registro de banderas.
BD: si está establecido, la interrupción de depuración fue ocasionada por un intento de lectura del registro de depuración con el bit GD establecido. El bit GD protege a los registros de depuración contra acceso.
B3-B0: indican cuál de las cuatro direcciones de punto de detección ocasionó la interrupción de depuración.
LEN: cada uno de los cuatro campos de longitud pertenece a cada una de las cuatro direcciones de punto de detección almacenadas en DR0-DR3. Estos bits definen el tamaño del acceso en la direccioón del punto de detección como 00 (byte), 01 (palabra) u 11(doble palabra).
RW: cada uno de los cuatro campos de lectura/escritura pertenece a cada una de las 4 direcciones de punto de detección almacenadas en DR0-DR3. El campo RW selecciona la causa de la acción que habilitó una dirección de punto de detección como 00 (acceso a instrucción), 01 (escritura de dato) y 11 (escritura y lectura de dato).
GD: si está establecido, GD evita cualquier lectura o escritura de un registro de depuración, generando la interrupción de depuración. Este bit se limpia automáticamente durante la interrupción de depuración, para que los registros de depuración puedan leerse o cambiarse, si fuera necesario.
GE: si está establecido, selecciona una dirección global de punto de detección para cualquiera de los cuatro registros de dirección, para que los registros de dirección de punto de detención.
LE: si está establecido, selecciona una dirección local de punto de detección para cualquiera de los cuatro registros de dirección, para que los registros de dirección de punto de detención.


Los registros de verificación, TR6 y TR7, se utilizan para examinar el buffer de traducción de página (TLB). El TLB se utiliza con la unidad de paginación del 80386. El TLB contiene las traducciones de direcciones de páginas utilizadas con mayor frecuencia. El TLB contiene las traducciones de direcciones de páginas utilizadas con mayor frecuencia. El TLB reduce el número de lecturas de memoria requeridas para localizar direcciones de páginas traducidas en las tablas de traducción de páginass. El TLB contiene las 32 entradas más comunes de la tabla de páginas, y es verificado con los registros de verificación TR6 y TR7. El regitro TR6 contiene el campo de etiqueta (dirección lineal) del TLB y TR7 contiene la dirección física del TLB.
Para escribir a un elemento del TLB, siga los pasos descritos a continuación:
-Escriba TR7 para la dirección física deseada,PL y los valores de REP.
-Escriba TR6 con la dirección lineal, asegurándose de que C=0.
Para leer un elemento del TLB:
-Escriba TR6 con la dirección lineal,asegurándose que C=1. -Lea tanto a TR6, como a TR7. Si el bit PL indica una coincidencia, entonces los valores deseados de TR6 y TR7 indican el contenido del TLB.

Los bits encontrados en TR6 y TR7 indican las siguientes condiciones:
V Muestra que el elemento en el TLB es válido.
D Indica que el elemento del TLB es inválido o está modificado.
U Un bit para le TLB.
W Indica que el área direccionada por el elemento del TLB puede ser escrita.
C Selecciona una escritura (0) o consulta inmediata (1) para el TLB.
PL Indica una coincidencia si tiene el valor 1 lógico.
REP Selecciona cuál bloque del TLB es escrito.

Compatibilidad

Algunos bits de ciertos registros del 80386 no están definidos. Cuando se obtienen estos bits, deben tratarse como completamente indefinidos. Esto es esencial para la compatibilidad con procesadores futuros. Para ello deben seguirse las siguientes recomendaciones:
- No depender de los estados de cualquiera de los bits no definidos. Estos deben ser enmascarados (mediante la instrucción AND con el bit a enmascarar a cero) cuando se utilizan los registros.
- No depender de los estados de cualquiera de los bits no definidos cuando se los almacena en memoria u otro registro.
- No depender de la habilidad que tiene el procesador de retener información escrita en bits marcados como indefinidos.
- Cuando se cargan registros siempre se deben poner los bits indefinidos a cero.
- Los registros que se almacenaron previamente pueden ser recargados sin necesidad de enmascarar los bits indefinidos.

Los programas que no cumplen con estas indicaciones, pueden llegar a no funcionar en 80486, Pentium y siguientes procesadores, donde los bits no definidos del 80386 poseen algún significado en los otros procesadores.