Skip to content

Instantly share code, notes, and snippets.

@rnovec
Last active April 11, 2025 19:55
Show Gist options
  • Select an option

  • Save rnovec/e79b0bf1def492761572f0d7dd4ddeef to your computer and use it in GitHub Desktop.

Select an option

Save rnovec/e79b0bf1def492761572f0d7dd4ddeef to your computer and use it in GitHub Desktop.
Microprocesadores Intel. CAPÍTULO 2 - El microprocesador y su arquitectura

Microprocesadores Intel -

8086/8088, 80186/80188, 80286, 80386, 80486, Pentium, Procesador Pentium Pro, Pentium II, Pentium III, Pentium 4

Arquitectura, Programación e Interfaz

CAPÍTULO 2 - El microprocesador y su arquitectura

Resumen

1. Modelo de Programación

  • 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

  • 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.

Registros multipropósito

  • 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.

Bit bandera

  • 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.

Registros de segmento

  • 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.

2. Modo Real

  • 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.

3. Modo Protegido

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. image

  1. 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.
@Helio49
Copy link

Helio49 commented Nov 30, 2024

Hola.
¿Me podrías facilitar el capítulo 1 de este tutorial, por favor? No lo encuentro por ningún sitio.
Muchas gracias.
Un saludo.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment