8086/8088, 80186/80188, 80286, 80386, 80486, Pentium, Procesador Pentium Pro, Pentium II, Pentium III, Pentium 4
- El modelo de programación de los microprocesadores del 8086 al 80286 contiene registros de 8 y de 16 bits.
- El modelo de programación de los microprocesadores 80386 y superiores contiene registros extendidos de 8, 16 y 32 bits, así como dos registros de segmento de 16 bits adicionales: FS y GS.
- Los registros de 8 bits son AH, AL, BH, BL, CH, CL, DH y DL.
- Los registros de 16 bits son AX, BX, CX, DX, SP, BP, DI y SI.
- Los registros de segmento son CS, DS, ES, SS, FS y GS.
- Los registros extendidos de 32 bits son EAX, EBX, ECX, EDX, ESP, EBP, EDI y ESI.
- Además el microprocesador contiene un apuntador de instrucciones (IP/EIP) y un registro de bandera (FLAGS o EFLAGS).
- Registros de 8 bits: AH, AL, BH, BL, CH, CL, DH y DL
- Registros de 16 bits: AX, BX, CX, DX, SP, BP, DI, SI, IP, FLAGS, CS, DS, ES, SS, FS y GS.
- Registros de 32 bits: EAX, EBX, ECX, EDX, ESP, EBP, EDI, ESI, EIP y EFLAGS.
- EAX, AX, AH, AL (acumulador): El acumulador se utiliza para instrucciones tales como multiplicación, división, puede guardar también la dirección de desplazamiento de una posición en el sistema de memoria.
- EBX, BX, BH, BL (índice base): guarda la dirección de desplazamiento de una posición en el sistema de memoria, también puede direccionar datos de la memoria.
- ECX, CX, CH, CL (Conteo): es un registro de propósito general que también guarda la cuenta de varias instrucciones, también puede guardar la dirección de desplazamiento de datos de la memoria. Las instrucciones que utilizan un conteo son las instrucciones de cadena repetida y las instrucciones desplazamiento, rotación y LOOP/LOOPD.
- EDX, DX, DH, DL (Datos): es un registro de propósito general que guarda una parte del resultado de una multiplicación, o parte del dividendo antes de una división, también puede direccionar datos de la memoria
- EBP, BP (apuntador de la base): apunta a una posición de memoria en todas las versiones del microprocesador para las transferencias de datos de memoria.
- EDI, DI (índice de destino): direcciona datos de destino de cadena para las instrucciones de cadenas.
- ESI, SI (índice de origen): A menudo el registro de índice de origen direcciona datos de cadena de origen para las instrucciones de cadenas. Registros de propósito especial
- EIP, IP (apuntador de instrucciones): El apuntador de instrucciones, que apunta a la siguiente instrucción en un programa, se utiliza por el microprocesador para encontrar la siguiente instrucción secuencial en un programa ubicado dentro del segmento de código.
- ESP, SP (apuntador de la pila): direcciona un área de la memoria llamada pila. La memoria de la pila almacena datos a través de este apuntador
- EFLAGS, FLAGS (banderas): Este registro indica la condición del microprocesador y controla su operación.
- C (acarreo): Éste guarda el valor del acarreo después de la suma, o la sustracción después de la resta. La bandera de acarreo también indica condiciones de error.
- P (paridad): La paridad es un 0 lógico para paridad impar y un 1 lógico para paridad par. La paridad es el conteo de los unos en un número expresado como par o impar.
- A (acarreo auxiliar): El acarreo auxiliar guarda el acarreo (medio acarreo) después de la suma, o la sustracción después de la resta entre las posiciones de bit 3 y 4 del resultado.
- Z (cero): La bandera cero indica que el resultado de una operación aritmética o lógica es cero. Si Z = 1, el resultado es cero; si Z = 0, el resultado no es cero.
- S (signo): La bandera de signo guarda el signo aritmético del resultado después de la ejecución de una instrucción aritmética o lógica.
- T (trampa): La bandera de trampa habilita el atrapamiento que depura, es decir, encontrar un error o bug.)
- I (interrupción): La bandera de interrupción controla la operación de la terminal de entrada INTR (petición de interrupción). Si I = 1, se habilita la terminal INTR; si I = 0, se deshabilita la terminal INTR. El estado del bit de bandera I se controla mediante las instrucciones STI (establecer bandera I) y CLI (borrar bandera I).
- D (dirección): La bandera de dirección selecciona el modo de incremento o de decremento para los registros DI y/o SI durante las instrucciones de cadena. Si D = 1, los registros se decrementan automáticamente; si D = 0, los registros se incrementan automáticamente.
- O (desbordamiento): Un desbordamiento ocurre cuando se suman o restan números con signo. Un desbordamiento indica que el resultado ha excedido la capacidad de la máquina.
- CS (código): El segmento de código es una sección de la memoria que guarda el código utilizado por el microprocesador. define la dirección inicial de la sección de memoria que guarda el código.
- DS (datos): El segmento de datos es una sección de memoria que contiene la mayor parte de los datos utilizados por un programa. Se accede mediante una dirección de desplazamiento.
- ES (extra): El segmento extra es un segmento de datos adicional utilizado para guardar datos de destino.
- SS (pila): El segmento de pila define el área de memoria utilizada para la pila. El punto de entrada de la pila se determina mediante los registros segmento de pila y apuntador de pila.
- FS y GS: Los segmentos FS y GS son registros de segmento suplementario, para que los programas puedan acceder a dos segmentos de memoria adicionales.
-
Todas las direcciones de memoria en modo real son una combinación de una dirección de segmento más una dirección de desplazamiento.
-
La posición inicial de un segmento se define mediante el número de 16 bits en el registro de segmento al que se adjunta un cero hexadecimal en el extremo derecho. La dirección de desplazamiento es un número de 16 bits que se suma a la dirección de segmento de 20 bits (1 Mbyte) para formar la dirección de memoria en modo real.
-
Una dirección física en modo real es válida si: 0 <= Segmento x 10H + Desplazamiento <= FFFFFH
-
Todas las instrucciones (código) se acceden mediante la combinación de CS (dirección de segmento) más IP o EIP (dirección de desplazamiento).
-
Por lo general se hace referencia a los datos a través de una combinación del DS (segmento de datos) y una dirección de desplazamiento o el contenido de un registro que contenga la dirección de desplazamiento. Los microprocesadores del 8086 al Pentium 4 utilizan BX, DI y SI como registros de desplazamiento predeterminados para los datos si se seleccionan registros de 16 bits. El 80386 y superiores pueden usar los registros de 32 bits EAX, EBX, ECX, EDX, EDI y ESI como registros de desplazamiento predeterminados para los datos.
Una dirección física en modo protegido es válida si se encuentra entre: Base <= Base + Desplazamiento <= Base + Limite
- La operación en modo protegido permite acceder a la memoria que está por encima del primer 1 Mbyte en los microprocesadores del 80286 al Pentium 4.
- Este sistema de memoria extendida (XMS) se accede a través de una dirección de segmento más una dirección de desplazamiento, justo igual que en el modo real. La diferencia es que la dirección de segmento no se guarda en el registro de segmento.
-
En el modo protegido, la dirección de inicio de segmento se almacena en un descriptor que se selecciona mediante el registro de segmento.
-
Un descriptor de modo protegido contiene una dirección base, un límite y un byte de derechos de acceso.
-
La dirección base localiza la dirección inicial del segmento de memoria; el límite define la última posición del segmento.
-
El byte de derechos de acceso define cómo se accede al segmento de memoria mediante un programa.
-
El microprocesador 80286 permite que un segmento de memoria empiece en cualquiera de sus 16 Mbytes de memoria mediante el uso de una dirección base de 24 bits.
-
El 80386 y superiores permiten que un segmento de memoria empiece en cualquiera de sus 4 Gbytes de memoria, mediante el uso de una dirección base de 32 bits.
-
El límite es un número de 16 bits en el 80286 y un número de 20 bits en el 80386 y superiores. Esto permite al 80286 un límite de 64 Kbytes en el segmento de memoria, y al 80386 y superiores un límite de 1 Mbyte (G = 0) o de 4 Gbytes (G = 1) en el segmento de memoria.
-
El registro de segmento (Selector) contiene tres campos de información en el modo protegido. Los 13 bits de más a la izquierda del registro de segmento direccionan uno de 8192 descriptores de una tabla de descriptores.
-
El bit TI accede a la tabla de descriptores globales (TI = 0) o a la tabla de descriptores locales (TI = 1).
-
Los 2 bits de más a la derecha del registro de segmento seleccionan el nivel de prioridad (RPL) solicitado para el acceso al segmento de memoria.
El contenido de un registro de segmento durante la operación en modo protegido de los microprocesadores del 80286 al Pentium 4.
- Los microprocesadores 80286 y superiores utilizan los registros invisibles para los programas para acceder a las tablas de descriptores. Cada registro de segmento contiene una porción de caché que se utiliza en modo protegido para guardar la dirección base, el límite y los derechos de acceso adquiridos de un descriptor. La caché permite al microprocesador acceder al segmento de memoria sin tener que volver a hacer referencia a la tabla de descriptores, hasta que se cambie el contenido del registro de segmento.
CAPÍTULO 2 - El microprocesador y su arquitectura
Preguntas y problemas
1. ¿Qué son los registros visibles para los programas?
2. El 80286 direcciona registros que son de 8 y de:
3. ¿Cuáles microprocesadores pueden direccionar los registros extendidos?
4. El registro extendido BX se direcciona como:
5. ¿Cuál registro guarda la cuenta para algunas instrucciones?
6. ¿Cuál es el propósito del registro IP/EIP?
7. ¿Cuáles son las operaciones aritméticas que no modifican el bit de bandera de acarreo?
8. ¿Ocurrirá un desbordamiento si se suma un FFH con signo a un 01H con signo?
9. Se dice que un número que contiene 3 bits uno tiene paridad:
10. ¿Cuál bit de bandera controla la terminal INTR en el microprocesador?
11. ¿Cuáles microprocesadores contienen un registro de segmento FS?
12. ¿Cuál es el propósito de un registro de segmento en la operación en modo real del microprocesador?
13. En el modo real, muestre las direcciones inicial y final de cada segmento localizado por los siguientes valores del registro de segmento:
14. Encuentre la dirección en memoria de la siguiente instrucción ejecutada por el microprocesador, cuando opera en el modo real, para las siguientes combinaciones de CS:IP:
15. ¿Las direcciones de memoria en modo real permiten el acceso a la memoria que está debajo de cuál dirección de memoria?
16. ¿Qué registro o registros se utiliza(n) como una dirección de desplazamiento para el destino de la instrucción de cadena en el microprocesador?
17. ¿Qué registro o registros de 32 bits se utiliza(n) para guardar una dirección de desplazamiento para los datos del segmento de datos en el microprocesador Pentium 4?
18. La memoria de la pila se direcciona mediante una combinación del segmento SS más el desplazamiento SP o ESP
19. Si el apuntador base (BP) direcciona memoria, el segmento Stack contiene los datos SS
20. Determine la posición de memoria que se direcciona mediante las siguientes combinaciones de registros del 80286 en modo real:
21. Determine la posición de memoria que se direcciona mediante las siguientes combinaciones de registros del Pentium 4 en modo real:
22. ¿A cuál área de la memoria permite el acceso el direccionamiento de memoria en modo protegido en el microprocesador 80286?
23. ¿A cuál área de la memoria permite el acceso el direccionamiento de memoria en modo protegido en el microprocesador Pentium 4?
24. ¿Cuál es el propósito del registro de segmento en un direccionamiento de memoria en modo protegido?
25. ¿Cuántos descriptores son accesibles en la tabla de descriptores globales en modo protegido?
26. ¿Cuáles son las posiciones inicial y final que se direccionan sobre la base de un descriptor del 80286 que contiene una dirección base de A00000H y un límite de 1000H?
Dirección base = inicio = A00000H (la base debe ser de 24 bits o agregar un 0 al final)
Límite: 1000H
Dirección final = Dirección base + límite = A01000H
Respuesta final: A00000H - A01000H
27. ¿Cuáles son las posiciones inicial y final que se direccionan sobre la base de un descriptor del Pentium 4 que contiene una dirección base de 01000000H, un límite de 0FFFFH y G = 0?
Dirección base = inicio = 01000000H
Límite: 0FFFFH
Granularidad: 0
Dirección final = Dirección base + límite = 0100FFFFH
Repuesta final: 01000000H - 0100FFFFH
28. ¿Cuáles son las posiciones inicial y final que se direccionan sobre la base de un descriptor del Pentium 4 que contiene una dirección base de 00280000H, un límite de 00010H y G = 1?
Dirección base = inicio = 00280000H
Límite: 00010H
Granularidad: 1
Dirección final = Dirección base + límite * FFFH = 00290FFFH
Repuesta final: 00280000H - 00290FFFH
29. Si el registro DS contiene 0020H en un sistema en modo protegido, ¿qué tabla de descriptores globales es la que se accesa?
DS: 0020H (Debemos pasarlo a binario)
0020H = 0000 0000 0010 0000
Usamos la tablita de la figura 2-8
Respuesta final: Accesa al selector 4
30. Si DS = 0103H en un sistema en modo protegido, el nivel de privilegio solicitado es **3**.
31. Si DS = 0105H en un sistema en modo protegido, ¿qué entrada, tabla y nivel de privilegio solicitado se seleccionan?
DS: 0105H (Lo pasamos a binario)
0105H = 0000 0001 0000 0101
Usamos la tablita de la figura 2-8
RPL = 01, entonces nivel de privilegio 1
TI = 1, entonces tabla de descriptores globales
Selector = 0000000100000, entonces selector 32
32. ¿Cuál es la máxima longitud de la tabla de descriptores globales en el microprocesador Pentium 4?
33. Codifique un descriptor que describa un segmento de memoria que empiece en la posición 210000H y termine en la posición 21001FH. Este segmento de memoria es un segmento de código que puede leerse. El descriptor es para un microprocesador 80286.
Dirección base = inicio = 210000H
Dirección final = 21001FH
Límite = Dirección final – Dirección base = 210000H - 21001FH = 00001FH
Ahora pasamos la dirección base y el limite a binario
Base = 210000H = 0010 0001 0000 0000 0000 0000
Límite = 00001FH = 0000 0000 0000 0000 0001 1111
Usando la tablita 2-6 y la 2-7 para derechos de acceso llenamos la tablita, los números binarios se cuentan de derecha a izquierda
34. Codifique un descriptor que describa un segmento de memoria que empiece en la posición 03000000H y termine en la posición 05FFFFFFH. Este segmento de memoria es un segmento de datos que crece hacia arriba en el sistema de memoria y puede escribirse en él. El descriptor es para un microprocesador Pentium 4.
Dirección base = inicio = 03000000H
Dirección final = 05FFFFFFH
Límite = Dirección final – Dirección base = 05FFFFFFH - 03000000H = 02FFFFFFH
Si el limite es mayor de 20 bits, es decir de granularidad 1, entonces debemos quitarle al final FFFH
Límite = 02FFFFFFH / FFFH = 02FFFH
Ahora pasamos la dirección base y el limite a binario
Base = 03000000H = 0000 0011 0000 0000 0000 0000 0000 0000
Límite = 02FFFH = 0000 0010 1111 1111 1111
Usando la tablita 2-6 y la 2-7 para derechos de acceso llenamos la tablita, los números binarios se cuentan de derecha a izquierda
35. ¿Qué registro localiza la tabla de descriptores globales?
36. ¿Cómo se direcciona la tabla de descriptores globales en el sistema de memoria?
37. Describa lo que ocurre cuando se carga un nuevo número en un registro de segmento cuando el microprocesador se opera en el modo protegido.
38. ¿Qué son los registros invisibles para los programas?
39. ¿Cuál es el propósito del GDTR?