los microprocesadores 8086 y 8088

157
Los microprocesadores 8086 y 8088 Historia del 8086/8088 En junio de 1978 Intel lanzó al mercado el primer microprocesador de 16 bits: el 8086. En junio de 1979 apareció el 8088 (internamente igual que el 8086 pero con bus de datos de 8 bits) y en 1980 los coprocesadores 8087 (matemático) y 8089 (de entrada y salida). El primer fabricante que desarrolló software y hardware para estos chips fue la propia Intel. Reconociendo la necesidad de dar soporte a estos circuitos integrados, la empresa invirtió gran cantidad de dinero en un gran y moderno edificio en Santa Clara, California, dedicado al diseño, fabricación y venta de sus sistemas de desarrollo que, como se explicó anteriormente, son computadoras autosuficientes con el hardware y software necesario para desarrollar software de microprocesadores. Los sistemas de desarrollo son factores clave para asegurar las ventas de una empresa fabricantes de chips. La inmensa mayoría de ventas son a otras empresas, las cuales usan estos chips en aparatos electrónicos, diseñados, fabricados y comercializados por ellas mismas. A estas empresas se las llama "fabricantes de equipo original", o en inglés, OEM (Original Equipment Manufacturer). El disminuir el tiempo de desarrollo de hardware y software para las OEM es esencial, ya que el mercado de estos productos es muy competitivo. Necesitan soporte pues los meses que les puede llevar el desarrollo de las herramientas apropiadas les puede significar pérdidas por millones de dólares. Además quieren ser los primeros fabricantes en el mercado, con lo cual pueden asegurarse las ventas en dos áreas importantes: a corto plazo, ya que al principio la demanda es mucho mayor que la oferta, y a largo plazo, ya que el primer producto marca a menudo los estándares. De esta manera la empresa Intel había desarrollado una serie completa de software que se ejecutaba en una microcomputadora basada en el 8085 llamada "Intellec Microcomputer Development System". Los programas incluían ensambladores cruzados (éstos son programas que se ejecutan

Upload: icenler

Post on 27-Jun-2015

524 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Los Microprocesadores 8086 y 8088

Los microprocesadores 8086 y 8088

Historia del 8086/8088

En junio de 1978 Intel lanzó al mercado el primer microprocesador de 16 bits: el 8086. En junio de 1979 apareció el 8088 (internamente igual que el 8086 pero con bus de datos de 8 bits) y en 1980 los coprocesadores 8087 (matemático) y 8089 (de entrada y salida). El primer fabricante que desarrolló software y hardware para estos chips fue la propia Intel. Reconociendo la necesidad de dar soporte a estos circuitos integrados, la empresa invirtió gran cantidad de dinero en un gran y moderno edificio en Santa Clara, California, dedicado al diseño, fabricación y venta de sus sistemas de desarrollo que, como se explicó anteriormente, son computadoras autosuficientes con el hardware y software necesario para desarrollar software de microprocesadores.

Los sistemas de desarrollo son factores clave para asegurar las ventas de una empresa fabricantes de chips. La inmensa mayoría de ventas son a otras empresas, las cuales usan estos chips en aparatos electrónicos, diseñados, fabricados y comercializados por ellas mismas. A estas empresas se las llama "fabricantes de equipo original", o en inglés, OEM (Original Equipment Manufacturer). El disminuir el tiempo de desarrollo de hardware y software para las OEM es esencial, ya que el mercado de estos productos es muy competitivo. Necesitan soporte pues los meses que les puede llevar el desarrollo de las herramientas apropiadas les puede significar pérdidas por millones de dólares. Además quieren ser los primeros fabricantes en el mercado, con lo cual pueden asegurarse las ventas en dos áreas importantes: a corto plazo, ya que al principio la demanda es mucho mayor que la oferta, y a largo plazo, ya que el primer producto marca a menudo los estándares.

De esta manera la empresa Intel había desarrollado una serie completa de software que se ejecutaba en una microcomputadora basada en el 8085 llamada "Intellec Microcomputer Development System". Los programas incluían ensambladores cruzados (éstos son programas que se ejecutan en un microprocesador y generan código de máquina que se ejecuta en otro), compiladores de PL/M, Fortran y Pascal y varios programas de ayuda. Además había un programa traductor llamado CON V86 que convertía código fuente 8080/8085 a código fuente 8086/8088. Si se observan de cerca ambos conjuntos de instrucciones, queda claro que la transformación es sencilla si los registros se traducen así: A -> AL, B -> CH, C -> CL, D -> DH, E -> DL, H -> BH y L -> BL. Puede parecer complicado traducir LDAX B (por ejemplo) ya que el 8088 no puede utilizar el registro CX para direccionamiento indirecto, sin embargo, se puede hacer con la siguiente secuencia: MOV SI, CX; MOV AL, [SI]. Esto aprovecha el hecho que no se utiliza el registro SI. Por supuesto el programa resultante es más largo (en cantidad de bytes) y a veces más lento de correr que en su antecesor 8085. Este programa de conversión sólo servía para no tener que volver a escribir los programas en una primera etapa. Luego debería reescribirse el código fuente en assembler para poder obtener las ventajas de velocidad ofrecidas por el 8088. Luego debía correr el programa en la iSBC 86/12 Single Board Computer basado en el 8086. Debido al engorro que resultaba tener dos plaquetas diferentes, la empresa Godbout Electronics (también de California) desarrolló una placa donde estaban el 8085 y el 8088, donde se utilizaba un ensamblador cruzado provisto por la compañía Microsoft. Bajo control de software, podían conmutarse los microprocesadores. El sistema operativo utilizado era el CP/M (de Digital Research).

Page 2: Los Microprocesadores 8086 y 8088

El desarrollo más notable para la familia 8086/8088 fue la elección de la CPU 8088 por parte de IBM (International Business Machines) cuando en 1981 entró en el campo de las computadoras personales. Esta computadora se desarrolló bajo un proyecto con el nombre "Acorn" (Proyecto "Bellota") pero se vendió bajo un nombre menos imaginativo, pero más correcto: "Computadora Personal IBM", con un precio inicial entre 1260 dólares y 3830 dólares según la configuración (con 48KB de memoria RAM y una unidad de discos flexibles con capacidad de 160KB costaba 2235 dólares). Esta computadora entró en competencia directa con las ofrecidas por Apple (basado en el 6502) y por Radio Shack (basado en el Z-80).

Arquitectura de los procesadores 8088 y 8086:

El 8086 es un microprocesador de 16 bits, tanto en lo que se refiere a su estructura como en sus conexiones externas, mientras que el 8088 es un procesador de 8 bits que internamente es casi idéntico al 8086. La única diferencia entre ambos es el tamaño del bus de datos externo. Intel trata esta igualdad interna y desigualdad externa dividiendo cada procesador 8086 y 8088 en dos sub-procesadores. O sea, cada uno consta de una unidad de ejecución (EU: Execution Unit) y una unidad interfaz del bus (BIU: Bus Interface Unit). La unidad de ejecución es la encargada de realizar todas las operaciones mientras que la unidad de interfaz del bus es la encargada de acceder a datos e instrucciones del mundo exterior. Las unidades de ejecución son idénticas en ambos microprocesadores, pero las unidades de interfaz del bus son diferentes en varias cuestiones, como se desprende del siguiente diagrama en bloques:

Page 3: Los Microprocesadores 8086 y 8088

La ventaja de esta división fue el ahorro de esfuerzo necesario para producir el 8088. Sólo una mitad del 8086 (el BIU) tuvo que rediseñarse para producir el 8088.

La explicación del diagrama en bloques es la siguiente:

Registros de uso general del 8086/8088:

Tienen 16 bits cada uno y son ocho:1. AX = Registro acumulador, dividido en AH y AL (8 bits cada uno).

Usándolo se produce (en general) una instrucción que ocupa un byte menos que si se utilizaran otros registros de uso general. Su parte más baja, AL, también tiene esta propiedad. El último registro mencionado es el equivalente al acumulador de los procesadores anteriores (8080 y 8085). Además hay instrucciones como DAA; DAS; AAA; AAS; AAM; AAD; LAHF; SAHF;

Page 4: Los Microprocesadores 8086 y 8088

CBW; IN y OUT que trabajan con AX o con uno de sus dos bytes (AH o AL). También se utiliza este registro (junto con DX a veces) en multiplicaciones y divisiones.

2. BX = Registro base, dividido en BH y BL.Es el registro base de propósito similar (se usa para direccionamiento indirecto) y es una versión más potente del par de registros HL de los procesadores anteriores.

3. CX = Registro contador, dividido en CH y CL.Se utiliza como contador en bucles (instrucción LOOP), en operaciones con cadenas (usando el prefijo REP) y en desplazamientos y rotaciones (usando el registro CL en los dos últimos casos).

4. DX = Registro de datos, dividido en DH y DL.Se utiliza junto con el registro AX en multiplicaciones y divisiones, en la instrucción CWD y en IN y OUT para direccionamiento indirecto de puertos (el registro DX indica el número de puerto de entrada/salida).

5. SP = Puntero de pila (no se puede subdividir).Aunque es un registro de uso general, debe utilizarse sólo como puntero de pila, la cual sirve para almacenar las direcciones de retorno de subrutinas y los datos temporarios (mediante las instrucciones PUSH y POP). Al introducir (push) un valor en la pila a este registro se le resta dos, mientras que al extraer (pop) un valor de la pila este a registro se le suma dos.

6. BP = Puntero base (no se puede subdividir).Generalmente se utiliza para realizar direccionamiento indirecto dentro de la pila.

7. SI = Puntero índice (no se puede subdividir).Sirve como puntero fuente para las operaciones con cadenas. También sirve para realizar direccionamiento indirecto.

8. DI = Puntero destino (no se puede subdividir).Sirve como puntero destino para las operaciones con cadenas. También sirve para realizar direccionamiento indirecto.

Cualquiera de estos registros puede utilizarse como fuente o destino en operaciones aritméticas y lógicas, lo que no se puede hacer con ninguno de los seis registros que se verán más adelante.

Además de lo anterior, cada registro tiene usos especiales:

Unidad aritmética y lógica

Es la encargada de realizar las operaciones aritméticas (suma, suma con "arrastre", resta, resta con "préstamo" y comparaciones) y lógicas (AND, OR, XOR y TEST). Las operaciones pueden ser de 16 bits o de 8 bits.

Indicadores (flags)

Hay nueve indicadores de un bit en este registro de 16 bits. Los cuatro bits más significativos están indefinidos, mientras que hay tres bits con valores determinados: los bits 5 y 3 siempre valen cero y el bit 1 siempre vale uno (esto también ocurría en los procesadores anteriores).

Registro de indicadores (16 bits)

Page 5: Los Microprocesadores 8086 y 8088

Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Flag -- -- -- -- OF DF IF TF SF ZF 0 AF 0 PF 1 CF

CF (Carry Flag, bit 0): Si vale 1, indica que hubo "arrastre" (en caso de suma) hacia, o "préstamo" (en caso de resta) desde el bit de orden más significativo del resultado. Este indicador es usado por instrucciones que suman o restan números que ocupan varios bytes. Las instrucciones de rotación pueden aislar un bit de la memoria o de un registro poniéndolo en el CF.

PF (Parity Flag, bit 2): Si vale uno, el resultado tiene paridad par, es decir, un número par de bits a 1. Este indicador se puede utilizar para detectar errores en transmisiones.

AF (Auxiliary carry Flag, bit 4): Si vale 1, indica que hubo "arrastre" o "préstamo" del nibble (cuatro bits) menos significativo al nibble más significativo. Este indicador se usa con las instrucciones de ajuste decimal.

ZF (Zero Flag, bit 6): Si este indicador vale 1, el resultado de la operación es cero.

SF (Sign Flag, bit 7): Refleja el bit más significativo del resultado. Como los números negativos se representan en la notación de complemento a dos, este bit representa el signo: 0 si es positivo, 1 si es negativo.

TF (Trap Flag, bit 8): Si vale 1, el procesador está en modo paso a paso. En este modo, la CPU automáticamente genera una interrupción interna después de cada instrucción, permitiendo inspeccionar los resultados del programa a medida que se ejecuta instrucción por instrucción.

IF (Interrupt Flag, bit 9): Si vale 1, la CPU reconoce pedidos de interrupción externas enmascarables (por el pin INTR). Si vale 0, no se reconocen tales interrupciones. Las interrupciones no enmascarables y las internas siempre se reconocen independientemente del valor de IF.

DF (Direction Flag, bit 10): Si vale 1, las instrucciones con cadenas sufrirán "auto-decremento", esto es, se procesarán las cadenas desde las direcciones más altas de memoria hacia las más bajas. Si vale 0, habrá "auto-incremento", lo que quiere decir que las cadenas se procesarán de "izquierda a derecha".

OF (Overflow flag, bit 11): Si vale 1, hubo un desborde en una operación aritmética con signo, esto es, un dígito significativo se perdió debido a que tamaño del resultado es mayor que el tamaño del destino.

Sistema de control de la unidad de ejecución

Es el encargado de decodificar las instrucciones que le envía la cola y enviarle las órdenes a la unidad aritmética y lógica según una tabla que tiene almacenada en ROM llamada CROM (Control Read Only Memory).

Cola de instrucciones

Page 6: Los Microprocesadores 8086 y 8088

Almacena las instrucciones para ser ejecutadas. La cola se carga cuando el bus está desocupado, de esta manera se logra una mayor eficiencia del mismo. La cola del 8086 tiene 6 bytes y se carga de a dos bytes por vez (debido al tamaño del bus de datos), mientras que el del 8088 tiene cuatro bytes. Esta estructura tiene rendimiento óptimo cuando no se realizan saltos, ya que en este caso habría que vaciar la cola (porque no se van a ejecutar las instrucciones que van después del salto) y volverla a cargar con instrucciones que se encuentran a partir de la dirección a donde se salta. Debido a esto las instrucciones de salto son (después de multiplicaciones y divisiones) las más lentas de este microprocesador.

Registros de la unidad de interfaz con el bus:

El programador puede acceder a cinco registros de 16 bits cada uno, siendo cuatro de ellos registros de segmento y el restante el puntero de instrucción (IP).

Los registros de segmento se llaman:

CS: Registro de segmento de código.DS: Registro de segmento de datos.ES: Registro de segmento extra.SS: Registro de segmento de pila.

La utilización de estos registros se explica más adelante, en la sección que trata de direccionamiento a memoria.

Lógica de control del bus:

El cometido de este bloque es poder unir los bloques anteriormente mencionados con el mundo exterior, es decir, la memoria y los periféricos.

El 8088 tiene un bus de datos externo reducido de 8 bits. La razón para ello era prever la continuidad entre el 8086 y los antiguos procesadores de 8 bits, como el 8080 y el 8085. Teniendo el mismo tamaño del bus (así como similares requerimientos de control y tiempo), el 8088, que es internamente un procesador de 16 bits, puede reemplazar a los microprocesadores ya nombrados en un sistema ya existente.

El 8088 tiene muchas señales en común con el 8085, particularmente las asociadas con la forma en que los datos y las direcciones están multiplexadas, aunque el 8088 no produce sus propias señales de reloj como lo hace el 8085 (necesita un chip de soporte llamado 8284, que es diferente del 8224 que necesitaba el microprocesador 8080). El 8088 y el 8085 siguen el mismo esquema de compartir los terminales correspondientes a los 8 bits más bajos del bus de direcciones con los 8 bits del bus de datos, de manera que se ahorran 8 terminales para otras funciones del microprocesador. El 8086 comparte los 16 bits del bus de datos con los 16 más bajos del bus de direcciones.

El 8085 y el 8088 pueden, de hecho, dirigir directamente los mismos chips controladores de periféricos. Las investigaciones de hardware para sistemas basados en el 8080 o el 8085 son, en su mayoría, aplicables al 8088.

En todo lo recién explicado se basó el éxito del 8088.

Page 7: Los Microprocesadores 8086 y 8088

Terminales (pinout) del 8088

Este microprocesador está encapsulado en el formato DIP (Dual Inline Package) de 40 patas (veinte de cada lado). La distancia entre las patas es de 0,1 pulgadas (2,54 milímetros), mientras que la distancia entre patas enfrentadas es de 0,6 pulgadas (15,32 milímetros).

Nótese en el gráfico el semicírculo que identifica la posición de la pata 1. Esto sirve para no insertar el chip al revés en el circuito impreso.

El 8086/8088 puede conectarse al circuito de dos formas distintas: el modo máximo y el modo mínimo. El modo queda determinado al poner un determinado terminal (llamado MN/MX) a tierra o a la tensión de alimentación. El 8086/8088 debe estar en modo máximo si se desea trabajar en colaboración con el Procesador de Datos Numérico 8087 y/o el Procesador de Entrada/Salida 8089 (de aquí se desprende que en la IBM PC el 8088 está en modo máximo). En este modo el 8086/8088 depende de otros chips adicionales como el Controlador de Bus 8288 para generar el conjunto completo de señales del bus de control. El modo mínimo permite al 8086/8088 trabajar de una forma más autónoma (para circuitos más sencillos) en una manera casi idéntica al microprocesador 8085.

Los 40 pines del 8088 en modo mínimo tienen las siguientes funciones:

1. GND (Masa) 2. A14 (Bus de direcciones) 3. A13 (Bus de direcciones) 4. A12 (Bus de direcciones) 5. A11 (Bus de direcciones) 6. A10 (Bus de direcciones) 7. A9 (Bus de direcciones) 8. A8 (Bus de direcciones) 9. AD7 (Bus de direcciones y datos) 10. AD6 (Bus de direcciones y datos) 11. AD5 (Bus de direcciones y datos) 12. AD4 (Bus de direcciones y datos) 13. AD3 (Bus de direcciones y datos) 14. AD2 (Bus de direcciones y datos)

Page 8: Los Microprocesadores 8086 y 8088

15. AD1 (Bus de direcciones y datos) 16. AD0 (Bus de direcciones y datos) 17. NMI (Entrada de interrupción no enmascarable) 18. INTR (Entrada de interrupción enmascarable) 19. CLK (Entrada de reloj generada por el 8284) 20. GND (Masa) 21. RESET (Para inicializar el 8088) 22. READY (Para sincronizar periféricos y memorias lentas) 23. /TEST 24. /INTA (El 8088 indica que reconoció la interrupción) 25. ALE (Cuando está uno indica que salen direcciones por AD, en caso contrario,

es el bus de datos) 26. /DEN (Data enable: cuando vale cero debe habilitar los transceptores 8286 y

8287 (se conecta al pin de "output enable"), esto sirve para que no se mezclen los datos y las direcciones).

27. DT/R (Data transmit/receive: se conecta al pin de dirección de los chips recién indicados).

28. IO/M (Si vale 1: operaciones con ports, si vale 0: operaciones con la memoria) 29. /WR (Cuando vale cero hay una escritura) 30. HLDA (Hold Acknowledge: el 8088 reconoce el HOLD) 31. HOLD (Indica que otro integrado quiere adueñarse del control de los buses,

generalmente se usa para DMA o acceso directo a memoria). 32. /RD (Cuando vale cero hay una lectura) 33. MN/MX (Cuando esta entrada está en estado alto, el 8088 está en modo

mínimo, en caso contrario está en modo máximo) 34. /SSO (Junto con IO/M y DT/R esta salida sirve para determinar estados del

8088) 35. A19/S6 (Bus de direcciones/bit de estado) 36. A18/S5 (Bus de direcciones/bit de estado) 37. A17/S4 (Bus de direcciones/bit de estado) 38. A16/S3 (Bus de direcciones/bit de estado) 39. A15 (Bus de direcciones) 40. Vcc (+5V)

En modo máximo (cuando se aplica +5V al pin 33) hay algunos pines que cambian de significado:

24.- QS1: Estado de la cola de instrucciones (bit 1).25.- QS0: Estado de la cola de instrucciones (bit 0).26.- S0: Bit de estado 0.27.- S1: Bit de estado 1.28.- S2: Bit de estado 2.29.- /LOCK: Cuando vale cero indica a otros controladores del bus (otros microprocesadores o un dispositivo de DMA) que no deben ganar el control del bus. Se activa poniéndose a cero cuando una instrucción tiene el prefijo LOCK.30.- RQ/GT1: Es bidireccional y tiene la misma función que HOLD/HLDA en modo mínimo.31.- RQ/GT0: Como RQ/GT1 pero tiene mayor prioridad.34.- Esta salida siempre está a uno.

Page 9: Los Microprocesadores 8086 y 8088

Por ser este microprocesador mucho más complejo que el 8085, tiene más bits de estado que el recién mencionado. A título informativo se detallan los bits de estado:

S2 IO/M DT/R /SSO

Significado S1 S0

1 0 0 0 Acceso a código (instrucciones)

1 0 0 1 Lectura de memoria

1 0 1 0 Escritura a memoria

1 0 1 1 Bus pasivo (no hace nada)

0 1 0 0 Reconocimiento de interrupción

0 1 0 1 Lectura de puerto de entrada/salida

0 1 1 0 Escritura a puerto de E/S

0 1 1 1 Estado de parada (Halt)

QS1 QS0 Significado

0 0 No hay operación

0 1 Primer byte del código de operación

1 0 Se vacía la cola de instrucciones

1 1 Siguiente byte de la instrucción

Modos de direccionamiento del 8086/8088:

Estos procesadores tienen 27 modos de direccionamiento (una cantidad bastante más grande que los microprocesadores anteriores) o reglas para localizar un operando de una instrucción. Tres de ellos son comunes a microprocesadores anteriores: direccionamiento inmediato (el operando es un número que se encuentra en la misma instrucción), direccionamiento a registro (el operando es un registro del microprocesador) y direccionamiento inherente (el operando está implícito en la instrucción, por ejemplo, en la multiplicación uno de los operandos siempre es el acumulador). El resto de los modos sirve para localizar un operando en memoria. Para facilitar la explicación de estos modos, se pueden resumir de la siguiente manera:

Deben sumarse cuatro cantidades: 1) dirección de segmento, 2) dirección base, 3) una cantidad índice y 4) un desplazamiento.

La dirección de segmento se almacena en el registro de segmento (DS, ES, SS o CS). En la próxima sección se indica la forma en que se hace esto. Por ahora basta con saber que el contenido del registro de segmento se multiplica por 16 antes de utilizarse para obtener la dirección real. El registro de segmentación siempre se usa para referenciar a memoria.

La base se almacena en el registro base (BX o BP). El índice se almacena en el registro índice (SI o DI). Cualquiera de estas dos cantidades, la suma de las dos o ninguna, pueden utilizarse para calcular la dirección real, pero no pueden sumarse dos bases o

Page 10: Los Microprocesadores 8086 y 8088

dos índices. Los registros restantes (AX, CX, DX y SP) no pueden utilizarse para direccionamiento indirecto. El programador puede utilizar tanto la base como el índice para gestionar ciertas cosas, tales como matrices de dos dimensiones, o estructuras internas a otras estructuras, esquemas que se utilizan en las prácticas comunes de programación. La base y el índice son variables o dinámicas, ya que están almacenadas en registros de la CPU. Es decir, pueden modificarse fácilmente mientras se ejecuta un programa.

Además del segmento, base e índice, se usa un desplazamiento de 16 bits, 8 bits o 0 bits (sin desplazamiento). Ésta es una cantidad estática que se fija al tiempo de ensamblado (paso de código fuente a código de máquina) y no puede cambiarse durante la ejecución del programa (a menos que el programa se escriba sobre sí mismo, lo que constituye una práctica no aconsejada).

Todo esto genera los 24 modos de direccionamiento a memoria que se ven a continuación:

- Registro indirecto: 1) [BX], 2) [DI]. 3) [SI].- Basado: 4) desp8[BX], 5) desp8[BP], 6) desp16[BX], 7) desp16[BP].- Indexado: 8) desp8[SI], 9) desp8[DI], 10) desp16[SI], 11) desp16[DI].- Basado-indexado: 12) [BX+SI], 13) [BX+DI], 14) [BP+SI], 15) [BX+DI].- Basado-indexado con desplazamiento: 16) desp8[BX+SI], 17) desp8[BX+DI], 18) desp8[BP+SI], 19) desp8[BX+DI], 20) desp16[BX+SI], 21) desp16[BX+DI], 22) desp16[BP+SI], 23) desp16[BX+DI].- Directo: 24) [desp16].

Aquí desp8 indica desplazamiento de 8 bits y desp16 indica desplazamiento de 16 bits. Otras combinaciones no están implementadas en la CPU y generarán error al querer ensamblar, por ejemplo, ADD CL,[DX+SI].

El ensamblador genera el tipo de desplazamiento más apropiado (0, 8 ó 16 bits) dependiendo del valor que tenga la constante: si vale cero se utiliza el primer caso, si vale entre -128 y 127 se utiliza el segundo, y en otro caso se utiliza el tercero. Nótese que [BP] sin desplazamiento no existe. Al ensamblar una instrucción como, por ejemplo, MOV AL,[BP], se generará un desplazamiento de 8 bits con valor cero. Esta instrucción ocupa tres bytes, mientras que MOV AL,[SI] ocupa dos, porque no necesita el desplazamiento.

Estos modos de direccionamiento producen algunos inconvenientes en el 8086/8088. La CPU gasta tiempo calculando una dirección compuesta de varias cantidades. Principalmente esto se debe al hecho de que el cálculo de direcciones está programado en microcódigo (dentro de la CROM del sistema de control de la unidad de ejecución). En las siguientes versiones (a partir del 80186/80188) estos cálculos están cableados en la máquina y, por lo tanto, cuesta mucho menos tiempo el realizarlos.

Veamos un ejemplo: MOV AL, ES:[BX+SI+6]. En este caso el operando de la izquierda tiene direccionamiento a registro mientras que el de la derecha indica una posición de memoria. Poniendo valores numéricos, supongamos que los valores actuales de los registros sean: ES = 3200h, BX = 200h, SI = 38h. Como se apuntó más arriba la dirección real de memoria será:

Page 11: Los Microprocesadores 8086 y 8088

ES * 10h + BX + SI + 6 = 3200h * 10h + 200h + 38h + 6 = 3223Eh

Estructura de memoria de segmentación: Como se ha mencionado anteriormente, el 8086/8088 usa un esquema ingenioso llamado segmentación, para acceder correctamente a un megabyte completo de memoria, con referencias de direcciones de sólo 16 bits.

Veamos cómo funciona. Cualquier dirección tiene dos partes, cada una de las cuales es una cantidad de 16 bits. Una parte es la dirección de segmento y la otra es el offset. A su vez el offset se compone de varias partes: un desplazamiento (un número fijo), una base (almacenada en el registro base) y un índice (almacenado en el registro índice). La dirección de segmento se almacena en uno de los cuatro registros de segmento (CS, DS, ES, SS). El procesador usa estas dos cantidades de 16 bits para calcular la dirección real de 20 bits, según la siguiente fórmula:

Dirección real = 16 * (dirección del segmento) + offset

Tal como veíamos antes, dado que 16 en decimal es 10 en hexadecimal, multiplicar por ese valor es lo mismo que correr el número hexadecimal a la izquierda una posición.

Hay dos registros de segmento que tienen usos especiales: el microprocesador utiliza el registro CS (con el offset almacenado en el puntero de instrucción IP) cada vez que se debe acceder a un byte de instrucción de programa, mientras que las instrucciones que utilizan la pila (llamados a procedimientos, retornos, interrupciones y las instrucciones PUSH y POP) siempre utilizan el registro de segmento SS (con el offset almacenado en el registro puntero de pila SP). De ahí los nombres que toman: CS es el segmento de código mientras que SS es el registro segmento de pila.

Para acceder a datos en la memoria se puede utilizar cualquiera de los cuatro registros de segmento, pero uno de ellos provoca que la instrucción ocupe un byte menos de memoria: es el llamado segmento por defecto, por lo que en lo posible hay que tratar de usar dicho segmento para direccionar datos. Este segmento es el DS (registro de segmento de datos) para todos los casos excepto cuando se utiliza el registro base BP. En este caso el segmento por defecto es SS.

Si se utiliza otro registro, el ensamblador genera un byte de prefijo correspondiente al segmento antes de la instrucción: CS -> 2Eh, DS -> 3Eh, ES -> 26h y SS -> 36h. El uso de estos diferentes segmentos significa que hay áreas de trabajo separadas para el programa, pila y los datos. Cada área tiene un tamaño máximo de 64 KBytes. Dado que hay cuatro registros de segmento, uno de programa (CS), uno de pila (SS) y dos de datos (segmento de datos DS y segmento extra ES) el área de trabajo puede llegar a 4 * 64 KB = 256 KB en un momento dado suponiendo que las áreas no se superponen.

Si el programa y los datos ocupan menos de 64 KB, lo que se hace es fijar los registros de segmento al principio del programa y luego se utilizan diferentes offsets para acceder a distintas posiciones de memoria. En caso contrario necesariamente deberán cambiarse los registros de segmento en la parte del programa que lo requiera. Los registros de segmento DS, ES y SS se cargan mediante las instrucciones MOV y POP, mientras que CS se carga mediante transferencias de control (saltos, llamadas, retornos, interrupciones) intersegmento.

Page 12: Los Microprocesadores 8086 y 8088

Estructura de interrupciones del 8086/8088

Hay tres clases de interrupción: por hardware, por software e internas (a las dos últimas también se las llama "excepciones").

Veremos primeramente el caso de interrupciones por hardware: Como se mencionó anteriormente, el 8086/8088 tiene dos entradas de petición de interrupción: NMI e INTR y una de reconocimiento (INTA). La gran mayoría de las fuentes de interrupción se conectan al pin INTR, ya que esto permite enmascarar las interrupciones (el NMI no). Para facilitar esta conexión, se utiliza el circuito integrado controlador de interrupciones, que tiene el código 8259A. Este chip tiene, entre otras cosas, ocho patas para sendas fuentes de interrupción (IRQ0 - IRQ7), ocho para el bus de datos (D0 - D7), una salida de INTR y una entrada de INTA. Esto permite una conexión directa con el 8088/8086. Al ocurrir una petición de alguna de las ocho fuentes, el 8259A activa la pata INTR. Al terminar de ejecutar la instrucción en curso, el microprocesador activa la pata INTA, lo que provoca que el 8259A envíe por el bus de datos un número de ocho bits (de 0 a 255) llamado tipo de interrupción (programable por el usuario durante la inicialización del 8259A), que el 8086/8088 utiliza para saber cuál es la fuente de interrupción. A continuación busca en la tabla de vectores de interrupción la dirección del manejador de interrupción (interrupt handler). Esto se hace de la siguiente manera. Se multiplica el tipo de interrupción por cuatro, y se toman los cuatro bytes que se encuentran a partir de esa dirección. Los dos primeros indican el offset y los dos últimos el segmento del manejador, como se muestra a continuación.

Posición memoria 00 02 04 06 08 0A 0C 0E 10 12

....

3FC 3FE

IP CS IP CS IP CS IP CS IP CS IP CS

Tipo de interrupción 00 01 02 03 04 FF

Como se puede observar, la tabla ocupa el primer kilobyte de memoria (256 tipos * 4 bytes/tipo = 1024 bytes).

Una vez que se pusieron en la pila los flags, CS e IP (en ese orden), la CPU hace IF <- 0 (deshabilita interrupciones) y TF <- 0 (deshabilita la ejecución de instrucciones paso a paso) para que el manejador de interrupción no sea interrumpido, y carga IP y CS con los valores hallados en la tabla, con lo que se transfiere el control al manejador de interrupción, que es el procedimiento encargado de atender la fuente de interrupción. Luego de haber hecho su trabajo, el manejador debe terminar indicándole al controlador de interrupciones que ya fue atendido el pedido y finalmente deberá estar la instrucción IRET, que restaura los valores de los registros IP, CS y el registro de indicadores. El manejador debe poner en la pila todos los registros que use y restaurar sus valores antes de salir (en orden inverso al de su introducción en la pila), en caso contrario el sistema corre peligro de "colgarse", ya que, al ocurrir la interrupción en cualquier momento de la ejecución del programa, se cambiarían los valores de los registros en el momento menos esperado, con consecuencias imprevisibles.

Las interrupciones por software ocurren cuando se ejecuta la instrucción INT tipo. De esta manera se pueden simular interrupciones durante la depuración de un programa. El tipo de interrupción (para poder buscar el vector en la tabla) aparece en la misma instrucción como una constante de 8 bits. Muchos sistemas operativos (programas que

Page 13: Los Microprocesadores 8086 y 8088

actúan a modo de interfaz entre los programas de los usuarios (llamados también "aplicaciones") y el hardware del sistema) utilizan esta instrucción para llamadas a servicios, lo que permite no tener que conocer la dirección absoluta del servicio, permitiendo cambios en el sistema operativo sin tener que cambiar los programas que lo ejecutan. De esta manera, una de las primeras operaciones que debe realizar dicho sistema operativo es inicializar la tabla de vectores de interrupción con los valores apropiados.

Existen algunas interrupciones predefinidas, de uso exclusivo del microprocesador, por lo que no es recomendable utilizar estos tipos de interrupción para interrupciones por hardware o software.

- Tipo 0: Ocurre cuando se divide por cero o el cociente es mayor que el valor máximo que permite el destino.

- Tipo 1: Ocurre después de ejecutar una instrucción si TF (Trap Flag) vale 1. Esto permite la ejecución de un programa paso a paso, lo que es muy útil para la depuración de programas.

- Tipo 2: Ocurre cuando se activa la pata NMI (interrupción no enmascarable).

- Tipo 3: Existe una instrucción INT que ocupa un sólo byte, que es la correspondiente a este tipo. En los programas depuradores (debuggers) (tales como Debug, CodeView, Turbo Debugger, etc.), se utiliza esta instrucción como punto de parada (para ejecutar un programa hasta una determinada dirección, fijada por el usuario del depurador, se inserta esta instrucción en la dirección correspondiente a la parada y se lanza la ejecución. Cuando el CS:IP apunte a esta dirección se ejecutará la INT 3, lo que devolverá el control del procesador al depurador). Debido a esto, si se le ordena al depurador que ejecute el programa hasta una determinada dirección en ROM (memoria de sólo lectura) (por ejemplo, para ver cómo funciona una subrutina almacenada en dicha memoria), la ejecución seguirá sin parar allí (ya que la instrucción INT 3 no se pudo escribir sobre el programa). En el 80386, con su elaborado hardware de ayuda para la depuración, se puede poner un punto de parada en ROM.

- Tipo 4: Ocurre cuando se ejecuta la instrucción de interrupción condicional INTO y el flag OF (Overflow Flag) vale 1.

Los tipos 5 a 31 (1F en hexadecimal) están reservados para interrupciones internas (también llamados "excepciones") de futuros microprocesadores.

Prioridad entre diferentes fuentes de interrupción:

1) Error de división, INT n (no enmascarable), INTO.2) NMI (no enmascarable).3) INTR (enmascarable mediante IF).4) Ejecución paso a paso (enmascarable mediante TF).

Cap tulo III: Microprocesadores 8086/88, 286, 386, 486 y Pentium.�

Page 14: Los Microprocesadores 8086 y 8088

3.1. - CARACTER STICAS GENERALES.�

     Los microprocesadores Intel 8086 y 8088 se desarrollan a partir de un procesador anterior, el 8080, que, en sus diversas encarnaciones -incluyendo el Zilog Z-80- ha sido la CPU de 8 bits de mayor xito.�

     Poseen una arquitectura interna de 16 bits y pueden trabajar con operandos de 8 y 16 bits; una capacidad de direccionamiento de 20 bits (hasta 1 Mb) y comparten el mismo juego de instrucciones.

     La filosof a de dise o de la familia del 8086 se basa en la compatibilidad y la � �creaci n de sistemas inform ticos integrados, por lo que disponen de diversos � �coprocesadores como el 8089 de E/S y el 8087, coprocesador matem tico de coma �flotante. De acuerdo a esta filosof a y para permitir la compatibilidad con los �anteriores sistemas de 8 bits, el 8088 se dise con un bus de datos de 8 bits, lo cual ��le hace m s lento que su hermano el 8086, pues ste es capaz de cargar una palabra � �ubicada en una direcci n par en un solo ciclo de memoria mientras el 8088 debe �realizar dos ciclos leyendo cada vez un byte.

     Disponen de 92 tipos de instrucciones, que pueden ejecutar con hasta 7 modos de direccionamiento. Tienen una capacidad de direccionamiento en puertos de entrada y salida de hasta 64K (65536 puertos), por lo que las m quinas construidas entorno a �estos microprocesadores no suelen emplear la entrada/salida por mapa de memoria, como veremos.

     Entre esas instrucciones, las m s r pidas se ejecutan en 2 ciclos te ricos de reloj � � �y unos 9 reales (se trata del movimiento de datos entre registros internos) y las m s �lentas en 206 (divisi n entera con signo del acumulador por una palabra extra da de � �la memoria). Las frecuencias internas de reloj t picas son 4.77 MHz en la versi n � �8086; 8 MHz en la versi n 8086-2 y 10 MHz en la 8086-1. Recu rdese que un MHz � �son un mill n de ciclos de reloj, por lo que un PC � est ndar� a 4,77 MHz puede ejecutar de 20.000 a unos 0,5 millones de instrucciones por segundo, seg n la �complejidad de las mismas (un 486 a 50 MHz, incluso sin memoria cach externa es �capaz de ejecutar entre 1,8 y 30 millones de estas instrucciones por segundo).

     El microprocesador Intel 80286 se caracteriza por poseer dos modos de funcionamiento completamente diferenciados: el modo real en el que se encuentra nada m s ser conectado a la corriente y el � modo protegido en el que adquiere capacidad de proceso multitarea y almacenamiento en memoria virtual. El proceso multitarea consiste en realizar varios procesos de manera aparentemente simult nea, con la ayuda del �sistema operativo para conmutar autom ticamente de uno a otro optimizando el uso de� la CPU, ya que mientras un proceso est esperando a que un perif rico complete una � �operaci n, se puede atender otro proceso diferente. La memoria virtual permite al �ordenador usar m s memoria de la que realmente tiene, almacenando parte de ella en �disco: de esta manera, los programas creen tener a su disposici n m s memoria de la � �

Page 15: Los Microprocesadores 8086 y 8088

que realmente existe; cuando acceden a una parte de la memoria l gica que no existe �f sicamente, se produce una interrupci n y el sistema operativo se encarga de � �acceder al disco y traerla.

     Cuando la CPU est en modo protegido, los programas de usuario tienen un acceso �limitado al juego de instrucciones; s lo el proceso � supervisor -normalmente el sistema operativo- est capacitado para realizar ciertas tareas. Esto es as para evitar que los � �programas de usuario puedan campar a sus anchas y entrar en conflictos unos con otros, en materia de recursos como memoria o perif ricos. Adem s, de esta manera, aunque� � un error software provoque el cuelgue de un proceso, los dem s pueden seguir �funcionando normalmente, y el sistema operativo podr a abortar el proceso � colgado. Por desgracia, con el DOS el 286 no est en modo protegido y el cuelgue de un solo �proceso -bien el programa principal o una rutina operada por interrupciones- significa la ca da inmediata de todo el sistema.�

     El 8086 no posee ning n mecanismo para apoyar la multitarea ni la memoria virtual� desde el procesador, por lo que es dif cil dise ar un sistema multitarea para el mismo� � y casi imposible conseguir que sea realmente operativo. Obviamente, el 286 en modo protegido pierde absolutamente toda la compatibilidad con los procesadores anteriores. Por ello, en este libro s lo trataremos el modo real, nico disponible bajo DOS, � �aunque veremos alguna instrucci n extra que tambi n se puede emplear en modo � �real.

     Las caracter sticas generales del 286 son: tiene un bus de datos de 16 bits, un bus �de direcciones de 24 bits (16 Mb); posee 25 instrucciones m s que el 8086 y admite 8 �modos de direccionamiento. En modo virtual permite direccionar hasta 1 Gigabyte. Las frecuencias de trabajo t picas son de 12 y 16 MHz, aunque existen versiones a 20 y 25� MHz. Aqu , la instrucci n m s lenta es la misma que en el caso del 8086, solo que � � �emplea 29 ciclos de reloj en lugar de 206. Un 286 de categor a media (16 MHz) �podr a ejecutar m s de medio mill n de instrucciones de estas en un segundo, casi � � �15 veces m s que un 8086 medio a 8 MHz. Sin embargo, transfiriendo datos entre �registros la diferencia de un procesador a otro se reduce notablemente, aunque el 286 es m s r pido y no s lo gracias a los MHz adicionales.� � �

     Versiones mejoradas de los Intel 8086 y 8088 se encuentran tambi n en los �procesadores NEC-V30 y NEC-V20 respectivamente. Ambos son compatibles Hardware y Software, con la ventaja de que el procesado de instrucciones est �optimizado, llegando a superar casi en tres veces la velocidad de los originales en algunas instrucciones aritm ticas. Tambi n poseen una cola de preb squeda mayor � � �(cuando el microprocesador est ejecutando una instrucci n, si no hace uso de los � �buses externos, carga en una cola FIFO de unos pocos bytes las posiciones posteriores a la que est procesando, de esta forma una vez que concluye la instrucci n en curso ya� � tiene internamente la que le sigue). Adem s, los NEC V20 y V30 disponen de las �mismas instrucciones adicionales del 286 en modo real, al igual que el 80186 y el 80188.

     Por su parte, el 386 dispone de una arquitectura de registros de 32 bits, con un bus de direcciones tambi n de 32 bits (direcciona hasta 4 Gigabytes = 4096 Mb) y m s � �modos posibles de funcionamiento: el modo real (compatible 8086), el modo protegido (relativamente compatible con el del 286), un modo protegido propio que permite -

Page 16: Los Microprocesadores 8086 y 8088

por fin!- romper la barrera de los tradicionales segmentos y el modo «virtual 86», en �el que puede emular el funcionamiento simult neo de varios 8086. Una vez m s, � �todos los modos son incompatibles entre s y requieren de un sistema operativo �espec fico: si se puede perdonar al fabricante la p rdida de compatibilidad del modo � �avanzados del 286 frente al 8086, debido a la l gica evoluci n tecnol gica, no se � � �puede decir lo mismo del 386 respecto al 286: no hubiera sido necesario a adir un �nuevo modo protegido si hubiera sido mejor construido el del 286 apenas un par de a os atr s. Normalmente, los 386 suelen operar en modo real (debido al DOS) por lo � �que no se aprovechan las posibilidades multitarea ni de gesti n de memoria. Por otra �parte, aunque se pueden emplear los registros de 32 bits en modo real, ello no suele hacerse -para mantener la compatibilidad con procesadores anteriores- con lo que de entrada se est tirando a la basura un 50% de la capacidad de proceso del chip, aunque �por fortuna estos procesadores suelen trabajar a frecuencias de 16/20 MHz (obsoletas) y normalmente de 33 y hasta 40 MHz.

     El 386sx es una variante del 386 a nivel de hardware, aunque es compatible en software. B sicamente, es un 386 con un bus de datos de s lo 16 bits -m s lento, al � � �tener que dar dos pasadas para un dato de 32 bits-. De hecho, podr a haber sido �dise ado perfectamente para mantener una compatibilidad hardware con el 286, �aunque el fabricante lo evit probablemente por razones comerciales.�

     El 486 se diferencia del 386 en la integraci n en un solo chip del coprocesador 387.� Tambi n se ha mejorado la velocidad de operaci n: la versi n de 25 MHz dobla en � � �t rminos reales a un 386 a 25 MHz equipado con el mismo tama o de memoria � �cach . La versi n � � 486sx no se diferencia en el tama o del bus, tambi n de 32 bits, � �sino en la ausencia del 387 (que puede ser a adido externamente). Tambi n existen � �versiones de 486 con buses de 16 bits, el primer fabricante de estos chips, denominados 486SLC, ha sido Cyrix. Una tendencia iniciada por el 486 fue la de duplicar la velocidad del reloj interno (pongamos por caso de 33 a 66 MHz) aunque en las comunicaciones con los buses exteriores se respeten los 33 MHz. Ello agiliza la ejecuci n de las instrucciones m s largas: bajo DOS, el rendimiento general del � �sistema se puede considerar pr cticamente el doble. Son los chips DX2 (tambi n hay � �una variante a 50 MHz: 25 x 2). La culminaci n de esta tecnolog a viene de la mano � �de los DX4 a 75/100 MHz (25/33 x 3).

     El Pentium, ltimo procesador de Intel en el momento de escribirse estas l neas, � �se diferencia respecto al 486 en el bus de datos (ahora de 64 bits, lo que agiliza los accesos a memoria) y en un elevad simo nivel de optimizaci n y segmentaci n que � � �le permite, empleando compiladores optimizados, simultanear en muchos casos la ejecuci n de dos instrucciones consecutivas. Posee dos cach s internas, tiene � �capacidad para predecir el destino de los saltos y la unidad de coma flotante experimenta elevadas mejoras. Sin embargo, bajo DOS, un Pentium b sico s lo es � �unas 2 veces m s r pido que un 486 a la misma frecuencia de reloj. Comenz en � � �60/90 MHz hasta los 166/200/233 MHz de las ltimas versiones (Pentium Pro y �MMX), que junto a diversos clones de otros fabricantes, mejoran a n m s el � �rendimiento. Todos los equipos Pentium emplean las t cnicas DX, ya que las placas �base t picas corren a 60 MHz. Para hacerse una idea, por unas 200000 pts de 1997 un �equipo Pentium MMX a 233 MHz es cerca de 2000 veces m s r pido en aritm tica � � �entera que el IBM PC original de inicios de la d cada de los 80; en coma flotante la �diferencia aumenta incluso algunos rdenes m s de magnitud. Y a una fracci n del � � �

Page 17: Los Microprocesadores 8086 y 8088

coste (un mill n de pts de aquel entonces que equivale a unos 2,5 millones de hoy en �d a). Aunque no hay que olvidar la revoluci n del resto de los componentes: 100 � �veces m s memoria (central y de v deo), 200 veces m s grande el disco duro... y � � �que un disco duro moderno transfiere datos 10 veces m s deprisa que la � memoria de aquel IBM PC original. Por desgracia, el software no ha mejorado el rendimiento, ni remotamente, en esa proporci n: es la factura pasada por las t cnicas de � �programaci n cada vez a un nivel m s alto (aunque nadie discute sus ventajas).� �

     Una caracter stica de los microprocesadores a partir del 386 es la disponibilidad de �memorias cach� de alta velocidad de acceso -muy pocos nanosegundos- que almacenan una peque a porci n de la memoria principal. Cuando la CPU accede a � �una posici n de memoria, cierta circuiter a de control se encarga de ir depositando el� � contenido de esa posici n y el de las posiciones inmediatamente consecutivas en la �memoria cach . Cuando sea necesario acceder a la instrucci n siguiente del � �programa, sta ya se encuentra en la cach y el acceso es muy r pido. Lo ideal � � �ser a que toda la memoria del equipo fuera cach , pero esto no es todav a posible � � �actualmente. Una cach de tama o razonable puede doblar la velocidad efectiva de � �proceso de la CPU. El 8088 carec a de memoria cach , pero s estaba equipado con� � � una unidad de lectura adelantada de instrucciones con una cola de preb squeda de 4 �bytes: de esta manera, se agilizaba ya un tanto la velocidad de proceso al poder ejecutar una instrucci n al mismo tiempo que iba leyendo la siguiente.�

3.2. - REGISTROS DEL 8086 Y DEL 286.

     Estos procesadores disponen de 14 registros de 16 bits (el 286 alguno m s, pero no �se suele emplear bajo DOS). La misi n de estos registros es almacenar las posiciones �de memoria que van a experimentar repetidas manipulaciones, ya que los accesos a memoria son mucho m s lentos que los accesos a los registros. Adem s, hay ciertas � �operaciones que s lo se pueden realizar sobre los registros. No todos los registros �sirven para almacenar datos, algunos est n especializados en apuntar a las direcciones �de memoria. La mec nica b sica de funcionamiento de un programa consiste en � �cargar los registros con datos de la memoria o de un puerto de E/S, procesar los datos y devolver el resultado a la memoria o a otro puerto de E/S. Obviamente, si un dato s lo �va a experimentar un cambio, es preferible realizar la operaci n directamente sobre la �memoria, si ello es posible. A continuaci n se describen los registros del 8086.�

AX SP CS IP

BX BP DS flags

CX SI SS  

DX DI ES  

Registros de datos

Registros punteros de

pila e ndices �

Registros de

segmento

Registro puntero de instrucciones

y flags

- Registros de datos:

Page 18: Los Microprocesadores 8086 y 8088

          AX, BX, CX, DX: pueden utilizarse bien como registros de 16 bits o como dos registros separados de 8 bits (byte superior e inferior) cambiando la X por H o L seg n� queramos referirnos a la parte alta o baja respectivamente. Por ejemplo, AX se descompone en AH (parte alta) y AL (parte baja). Evidentemente, cualquier cambio �sobre AH o AL altera AX!: valga como ejemplo que al incrementar AH se le est n �a adiendo 256 unidades a AX.�

     AX = Acumulador.

          Es el registro principal, es utilizado en las instrucciones de multiplicaci n y �divisi n y en algunas instrucciones aritm ticas especializadas, as como en ciertas � � �operaciones de car cter espec fico como entrada, salida y traducci n. Obs rvese � � � �que el 8086 es suficientemente potente para realizar las operaciones l gicas, la suma y �la resta sobre cualquier registro de datos, no necesariamente el acumulador.

     BX = Base.          Se usa como registro base para referenciar direcciones de memoria con direccionamiento indirecto, manteniendo la direcci n de la base o comienzo de tablas �o matrices. De esta manera, no es preciso indicar una posici n de memoria fija, sino la �n mero BX� (as , haciendo avanzar de unidad en unidad a BX, por ejemplo, se puede �ir accediendo a un gran bloque de memoria en un bucle).

     CX = Contador.          Se utiliza com nmente como contador en bucles y operaciones repetitivas de �manejo de cadenas. En las instrucciones de desplazamiento y rotaci n se utiliza como �contador de 8 bits.

     DX = Datos.          Usado en conjunci n con AX en las operaciones de multiplicaci n y divisi n � � �que involucran o generan datos de 32 bits. En las de entrada y salida se emplea para especificar la direcci n del puerto E/S.�

- Registros de segmento:

          Definen reas de 64 Kb dentro del espacio de direcciones de 1 Mb del 8086. �Estas reas pueden solaparse total o parcialmente. No es posible acceder a una �posici n de memoria no definida por alg n segmento: si es preciso, habr de � � �moverse alguno.

     CS = Registro de segmento de c digo (code segment).�          Contiene la direcci n del segmento con las instrucciones del programa. Los �programas de m s de 64 Kb requieren cambiar CS peri dicamente.� �

     DS = Registro de segmento de datos (data segment).          Segmento del rea de datos del programa.�

     SS = Registro de segmento de pila (stack segment).           Segmento de pila.

Page 19: Los Microprocesadores 8086 y 8088

     ES = Registro de segmento extra (extra segment).          Segmento de ampliaci n para zona de datos. Es extraordinariamente til � �actuando en conjunci n con DS: con ambos se puede definir dos zonas de 64 Kb, tan �alejadas como se desee en el espacio de direcciones, entre las que se pueden intercambiar datos.

- Registros punteros de pila:

     SP = Puntero de pila (stack pointer).          Apunta a la cabeza de la pila. Utilizado en las instrucciones de manejo de la pila.

     BP = Puntero base (base pointer).          Es un puntero de base, que apunta a una zona dentro de la pila dedicada al almacenamiento de datos (variables locales y par metros de las funciones en los �programas compilados).

- Registros ndices� :

     SI = ndice fuente (source index).�          Utilizado como registro de ndice en ciertos modos de direccionamiento �indirecto, tambi n se emplea para guardar un valor de desplazamiento en operaciones �de cadenas.

     DI = ndice destino (destination index).�          Se usa en determinados modos de direccionamiento indirecto y para almacenar un desplazamiento en operaciones con cadenas.

- Puntero de instrucciones o contador de programa:

     IP = Puntero de instrucci n (instruction pointer). �           Marca el desplazamiento de la instrucci n en curso dentro del segmento de �c digo. Es autom ticamente modificado con la lectura de una instrucci n.� � �

- Registro de estado o de indicadores (flags).

          Es un registro de 16 bits de los cuales 9 son utilizados para indicar diversas situaciones durante la ejecuci n de un programa. Los bits 0, 2, 4, 6, 7 y 11 son �indicadores de condici n, que reflejan los resultados de operaciones del programa; los �bits del 8 al 10 son indicadores de control y el resto no se utilizan. Estos indicadores pueden ser comprobados por las instrucciones de salto condicional, lo que permite variar el flujo secuencial del programa seg n el resultado de las operaciones.�

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

        OF DF IF TF SF ZF   AF   PF   CF

CF (Carry Flag): Indicador de acarreo. Su valor m s habitual es � lo que nos llevamos en una suma o resta.

Page 20: Los Microprocesadores 8086 y 8088

OF (Overflow Flag): Indicador de desbordamiento. Indica que el resultado de una operaci n no cabe en el tama o del operando destino.� �

ZF (Zero Flag): Indicador de resultado 0 o comparaci n igual.� SF (Sign Flag): Indicador de resultado o comparaci n negativa.� PF (Parity Flag): Indicador de paridad. Se activa tras algunas operaciones

aritm tico-l gicas para indicar que el n mero de bits a uno resultante es par.� � � AF (Auxiliary Flag): Para ajuste en operaciones BCD. DF (Direction Flag): Indicador de direcci n. Manipulando bloques de �

memoria, indica el sentido de avance (ascendente/descendente). IF (Interrupt Flag): Indicador de interrupciones: puesto a 1 est n permitidas.� TF (Trap Flag): Indicador de atrape (ejecuci n paso a paso).�

3.3. - REGISTROS DEL 386 Y PROCESADORES SUPERIORES.

     Los 386 y superiores disponen de muchos m s registros de los que vamos a ver �ahora. Sin embargo, bajo el sistema operativo DOS s lo se suelen emplear los que �veremos, que constituyen b sicamente una extensi n a 32 bits de los registros � �originales del 8086.

     Se ampl a el tama o de los registros de datos (que pueden ser accedidos en � �fragmentos de 8, 16 � 32 bits) y se a aden dos nuevos registros de segmento �multiprop sito (FS y GS). Algunos de los registros aqu mostrados son realmente de � �32 bits (como EIP en vez de IP), pero bajo sistema operativo DOS no pueden ser empleados de manera directa, por lo que no les consideraremos.

3.4. - MODOS DE DIRECCIONAMIENTO.

     Son los distintos modos de acceder a los datos en memoria por parte del procesador. Antes de ver los modos de direccionamiento, echaremos un vistazo a la sintaxis general de las instrucciones, ya que pondremos alguna en los ejemplos:

               INSTRUCCI N�      DESTINO, FUENTE

     Donde destino indica d nde se deja el resultado de la operaci n en la que pueden � �participar (seg n casos) FUENTE e incluso el propio DESTINO. Hay instrucciones, �sin embargo, que s lo tienen un operando, como la siguiente, e incluso ninguno: �

Page 21: Los Microprocesadores 8086 y 8088

               INSTRUCCI N�      DESTINO

     Como ejemplos, aunque no hemos visto a n las instrucciones utilizaremos un par �de ellas: la de copia o movimiento de datos (MOV) y la de suma (ADD).

3.4.1. - ORGANIZACI N DE DIRECCIONES: SEGMENTACI N.� �

     Como ya sabemos, los microprocesadores 8086 y compatibles poseen registros de un tama o m ximo de 16 bits que direccionar an hasta 64K; en cambio, la direcci n � � � �se compone de 20 bits con capacidad para 1Mb, hay por tanto que recurrir a alg n �artificio para direccionar toda la memoria. Dicho artificio consiste en la segmentaci n� : se trata de dividir la memoria en grupos de 64K. Cada grupo se asocia con un registro de segmento; el desplazamiento (offset) dentro de ese segmento lo proporciona otro registro de 16 bits. La direcci n absoluta se calcula multiplicando por 16 el valor del �registro de segmento y sumando el offset, obteni ndose una direcci n efectiva de 20 � �bits. Esto equivale a concebir el mecanismo de generaci n de la direcci n absoluta, � �como si se tratase de que los registros de segmento tuvieran 4 bits a 0 (imaginarios) a la derecha antes de sumarles el desplazamiento:

direcci n = segmento * 16 + offset�

     En la pr ctica, una direcci n se indica con la notaci n SEGMENTO:OFFSET; � � �adem s, una misma direcci n puede expresarse de m s de una manera: por ejemplo,� � � 3D00h:0300h es equivalente a 3D30:0000h. Es importante resaltar que no se puede acceder a m s de 64 Kb en un segmento de datos. Por ello, en los procesadores 386 y �superiores no se deben emplear registros de 32 bit para generar direcciones (bajo DOS), aunque para los c lculos pueden ser interesantes (no obstante, s ser a posible � � �configurar estos procesadores para poder direccionar m s memoria bajo DOS con los �registros de 32 bits, aunque no resulta por lo general pr ctico). �

3.4.2. - MODOS DE DIRECCIONAMIENTO.

     - Direccionamiento inmediato: El operando es una constante situada detr s del �c digo de la instrucci n. Sin embargo, como registro destino no se puede indicar uno � �de segmento (habr que utilizar uno de datos como paso intermedio). �

ADD AX,0fffh

          El n mero hexadecimal 0fffh es la constante num rica que en el � �direccionamiento inmediato se le sumar al registro AX. Al trabajar con �ensambladores, se pueden definir s mbolos � constantes (ojo, no variables) y es m s �intuitivo:

dato EQU 0fffh ; s mbolo constante� MOV AX,dato

          Si se referencia a la direcci n de memoria de una variable de la siguiente forma, �tambi n se trata de un caso de direccionamiento inmediato:�

dato DW 0fffh ; ahora es una variable MO AX,OFFSET dato ; AX = "direcci n de memoria" �de dato

Page 22: Los Microprocesadores 8086 y 8088

          Porque hay que tener en cuenta que cuando traduzcamos a n meros el s mbolo� � podr a quedar:�

17F3:0A11 DW FFF MOV AX,0A11

     - Direccionamiento de registro: Los operandos, necesariamente de igual tama o, �est n contenidos en los registros indicados en la instrucci n:� �

MOV DX,AX MOV AH,AL

     - Direccionamiento directo o absoluto: El operando est situado en la direcci n � �indicada en la instrucci n, relativa al segmento que se trate:�

MOV AX,[57D1h] MOV AX,ES:[429Ch]

     Esta sintaxis (quitando la 'h' de hexadecimal) ser a la que admite el programa �DEBUG (realmente habr a que poner, en el segundo caso, ES: en una l nea y el � �MOV en otra). Al trabajar con ensambladores, las variables en memoria se pueden referenciar con etiquetas simb licas:�

MOV AX,dato MOV AX,ES:dato

dato DW 1234h ; variable del programa

               En el primer ejemplo se transfiere a AX el valor contenido en la direcci n �apuntada por la etiqueta dato sobre el segmento de datos (DS) que se asume por defecto; en el segundo ejemplo se indica de forma expl cita el segmento trat ndose � �del segmento ES. La direcci n efectiva se calcula de la forma ya vista con �anterioridad: Registro de segmento * 16 + desplazamiento_de_dato (este desplazamiento depende de la posici n al ensamblar el programa). �

     - Direccionamiento indirecto: El operando se encuentra en una direcci n se alada � �por un registro de segmento*16 m s un registro base (BX/BP) o ndice (SI/DI). � �(Nota: BP act a por defecto con SS).�

MOV AX,[BP] ; AX = [SS*16+BP] MOV ES:[DI],AX ; [ES*16+DI] = AX

     - Indirecto con ndice o indexado� : El operando se encuentra en una direcci n �determinada por la suma de un registro de segmento*16, un registro de ndice, SI o DI� y un desplazamiento de 8 � 16 bits. Ejemplos:

MOV AX,[DI+DESP] MOV AX,desp[DI]� ADD [SI+DESP],BX ADD desp[SI],BX�

     - Indirecto con base e ndice o indexado a base� : El operando se encuentra en una direcci n especificada por la suma de un registro de segmento*16, uno de base, uno de�

ndice y opcionalmente un desplazamiento de 8 � � 16 bits:

Page 23: Los Microprocesadores 8086 y 8088

MOV AX,ES:[BX+DI+DESP] MOV AX,ES:desp[BX][DI]� MOV CS:[BX+SI+DESP],CX MOV CS:desp[BX][SI],CX�

Combinaciones de registros de segmento y desplazamiento.

     Como se ve en los modos de direccionamiento, hay casos en los que se indica expl citamente el registro de segmento a usar para acceder a los datos. Existen unos �segmentos asociados por defecto a los registros de desplazamiento (IP, SP, BP, BX, DI, SI); s lo es necesario declarar el segmento cuando no coincide con el asignado por �defecto. En ese caso, el ensamblador genera un byte adicional (a modo de prefijo) para indicar cu l es el segmento referenciado. La siguiente tabla relaciona las posibles �combinaciones de los registros de segmento y los de desplazamiento:

  CS SS DS ES

IP S � No No No

SP No S � No No

BP con prefijo por defecto con prefijo con prefijo

BX con prefijo con prefijo por defecto con prefijo

SI con prefijo con prefijo por defecto con prefijo

DI con prefijo con prefijo por defecto con prefijo(1)

(1) Tambi n por defecto en el manejo de cadenas. �

     Los 386 y superiores admiten otros modos de direccionamiento m s sofisticados, �que se ver n en el pr ximo cap tulo, despu s de conocer todas las instrucciones � � � �del 8086. Por ahora, con todos estos modos se puede considerar que hay m s que �suficiente. De hecho, algunos se utilizan en muy contadas ocasiones.

3.5. - LA PILA.

     La pila es un bloque de memoria de estructura LIFO (Last Input First Output: ltimo en entrar, primero en salir) que se direcciona mediante desplazamientos desde �

el registro SS (segmento de pila). Las posiciones individuales dentro de la pila se calculan sumando al contenido del segmento de pila SS un desplazamiento contenido en el registro puntero de pila SP. Todos los datos que se almacenan en la pila son de longitud palabra, y cada vez que se introduce algo en ella por medio de las instrucciones de manejo de pila (PUSH y POP), el puntero se decrementa en dos; es decir, la pila avanza hacia direcciones decrecientes. El registro BP suele utilizarse normalmente para apuntar a una cierta posici n de la pila y acceder indexadamente a sus elementos -�generalmente en el caso de variables- sin necesidad de desapilarlos para consultarlos.

     La pila es utilizada frecuentemente al principio de una subrutina para preservar los registros que no se desean modificar; al final de la subrutina basta con recuperarlos en orden inverso al que fueron depositados. En estas operaciones conviene tener cuidado, ya que la pila en los 8086 es com n al procesador y al usuario, por lo que se �almacenan en ella tambi n las direcciones de retorno de las subrutinas. Esta ltima � �es, de hecho, la m s importante de sus funciones. La estructura de pila permite que �

Page 24: Los Microprocesadores 8086 y 8088

unas subrutinas llamen a otras que a su vez pueden llamar a otras y as sucesivamente:� en la pila se almacenan las direcciones de retorno, que ser n las de la siguiente �instrucci n que provoc la llamada a la subrutina. As , al retornar de la subrutina se� � � extrae de la pila la direcci n a donde volver. Los compiladores de los lenguajes de alto� nivel la emplean tambi n para pasar los par metros de los procedimientos y para � �generar en ella las variables autom ticas� -variables locales que existen durante la ejecuci n del subprograma y se destruyen inmediatamente despu s-. Por ello, una � �norma b sica es que se debe desapilar siempre todo lo apilado para evitar una p rdida� � de control inmediata del ordenador.

     Ejemplo de operaci n sobre la pila (todos los datos son arbitrarios):�

3.6. - UN PROGRAMA DE EJEMPLO.

     Aunque las instrucciones del procesador no ser n vistas hasta el pr ximo � �cap tulo, con objeto de ayudar a la imaginaci n del lector elaboraremos un primer � �programa de ejemplo en lenguaje ensamblador. La utilidad de este programa es dejar patente que lo nico que entiende el 8086 son n meros, aunque nosotros nos � �referiremos a ellos con unos s mbolos que faciliten entenderlos. Tambi n es � �interesante este ejemplo para afianzar el concepto de registro de segmento.

     En este programa s lo vamos a emplear las instrucciones MOV, ya conocida, y �alguna otra m s como la instrucci n INC (incrementar), DEC (disminuir una unidad) � �y JNZ (saltar si el resultado no es cero). Suponemos que el programa est ubicado a �partir de la direcci n de memoria 14D3:7A10 (arbitrariamente elegida) y que lo que �pretendemos hacer con l es limpiar la pantalla. Como el ordenador es un PC con �monitor en color, la pantalla de texto comienza en B800:0000 (no es m s que una zona� de memoria). Por cada car cter que hay en dicha pantalla, comenzando arriba a la �izquierda, a partir de la direcci n B800:0000 tenemos dos bytes: el primero, con el �c digo ASCII del car cter y el segundo con el color. Lo que vamos a hacer es � �rellenar los 2000 caracteres (80 columnas x 25 l neas) con espacios en blanco �(c digo ASCII 32, 20h en hexadecimal), sin modificar el color que hubiera antes. � �Esto es, se trata de poner el valor 32 en la direcci n B800:0000, la B800:0002, la �B800:0004... y as sucesivamente.�

     El programa quedar a en memoria de esta manera: La primera columna indica la �direcci n de memoria donde est el programa que se ejecuta (CS=14D3h e � �IP=7A10h al principio). La segunda columna constituye el c digo m quina que � �interpreta el 8086. Algunas instrucciones ocupan un byte de memoria, otras dos � tres

Page 25: Los Microprocesadores 8086 y 8088

(las hay de m s). La tercera columna contiene el nombre de las instrucciones, algo �mucho m s legible para los humanos que los n meros: � �

14D3:7A10 B9 D0 07 MOV CX,7D0H ; CX = 7D0h (2000 decimal = 7D0 hexadecimal)14D3:7A13 B8 00 B8 MOV AX,0B800h ; segmento de la memoria de pantalla14D3:7A16 8E D8 MOV DS,AX ; apuntar segmento de datos a la misma14D3:7A18 BB 00 00 MOV BX,0 ; apuntar al primer car cter ASCII de la pantalla�14D3:7A1B C6 07 20 MOV BYTE PTR [BX],32 ; se pone BYTE PTR para indicar que 32 es de 8 bits14D3:7A1E 43 INC BX ; BX=BX+1 -< apuntar al byte de color14D3:7A1F 43 INC BX ; BX=BX+1 -< apuntar al siguiente car cter ASCII�14D3:7A20 49 DEC CX ; CX=CX-1 -< queda un car cter menos�14D3:7A21 75 F8 JNZ -8 ; si CX no es 0, saltar 8 bytes atr s (a 14D3:7A1B)�

     Como se puede ver, la segunda instrucci n (bytes de c digo m quina 0B8h, 0 y 0B8h colocados � � �en posiciones consecutivas) est colocada a partir del desplazamiento 7A13h, ya que la anterior que �ocupaba 3 bytes comenzaba en 7A10h. En el ejemplo cargamos el valor 0B800h en DS apoy ndonos en �AX como intermediario. El motivo es que los registros de segmento no admiten el direccionamiento inmediato. A medida que se van haciendo programas, el ensamblador da mensajes de error cuando se encuentra con estos fallos y permite ir aprendiendo con facilidad las normas, que tampoco son demasiadas. La instrucci n � MOV BYTE PTR [BX],32 equivale a decir: «poner en la direcci n de �memoria apuntada por BX (DS:[BX] para ser m s exactos)� el byte de valor 32». El valor 0F8h del c digo m quina de la ltima instrucci n es el complemento a dos (n mero negativo) del valor 8.� � � � �

     Normalmente, casi nunca habr que ensamblar � a mano consultando unas tablas, como hemos hecho en este ejemplo. Sin embargo, la mejor manera de aprender ensamblador es no olvidando la estrecha relaci n de cada l nea de programa con la CPU y la memoria.� �

Volver al ndice� +

El microprocesador 8086/8088

La arquitectura de estos dos procesadores es similar, la únicas diferencias entre ambos es que el diseño del 8088 tiene un bus de 8 bits para los datos, mientras que el 8086 puede transferir 16 bits a la vez en el mismo bus. Y la cola de instrucciones del 8088 es de 4 bytes y la del 8086 es de 6 bytes. Sus características que destacan son el bus de direcciones de 20 bits, con lo que pueden direccionar hasta 1 Megabyte de memoria RAM, y hacer el manejo de memoria en forma segmentada en bloques de 64K bytes. Para esto cuenta con 4 registros de segmento de 16 bits cada uno (CS, SS, DS y ES) y con registros de 16 bits como offset (IP, SP, DI y SI principalmente).

Estos microprocesadores tiene 2 procesadores conectados internamente, como se puede apreciar en la figura 2.1, estos procesadores son:

EU Unidad de ejecución (Execution Unit).

BIU

Page 26: Los Microprocesadores 8086 y 8088

Unidad de interfaz con el Bus (Bus Interface Unit).

   Figure 2.1: Diagrama de bloque del

8086/8088

La unidad de ejecución (EU) se encarga de realizar las operaciones aritméticas y lógicas, además de proporcionar las direcciones lógicas al BIU --una dirección lógica está formada de dos direcciones, la primera indica el segmento en el cual se está trabajando y la otra indica el offset, o desplazamiento, de este segmento; esto es segment:offset--.

La EU tiene una unidad aritmética lógica (ALU) de 16 bits, un registro de banderas y un conjunto de registros de propósito general. El registro de banderas contiene 6 banderas de estado (que la EU manipula para indicar el estado del resultado de una operación lógica o aritmética) y 3 banderas de control que se pueden manipular por los programas para alterar las operaciones del procesador (figura 2.2).

   Figure 2.2: Registro de Banderas del 8086.

Todos los registros y buses de datos en la EU tienen 16 bits de longitud para obtener mayor rapidez en la transferencia interna. La EU cuenta con 8 registros de 16 bits que se pueden utilizar para realizar computaciones. Cuatro de estos registros componen el

Page 27: Los Microprocesadores 8086 y 8088

grupo de datos, estos son los registros acumulador (AX), base (BX), contador (CX) y dato (DX). Además estos cuatro registros se pueden trabajar como dos registros de 8 bits cada uno. Así, los registros de datos se pueden trabajar con su parte alta (AH, BH, CH y DH) o con su parte baja (AL, BL, CL y DL). Los siguientes dos registros generales, el apuntador de pila (SP)2.1 y la base de la pila (BP)2.2 constituyen el grupo de apuntadores y se encargan de manipular la pila. Los dos últimos registros generales, el índice fuente (SI)2.3 y el índice destino (DI)2.4 forman el grupo de registros de índice y se utilizan para operaciones de cadenas. Las direcciones que maneja el EU son de 16 bits de longitud. La BIU se encarga de relocalizar estas direcciones para que la EU pueda accesar completamente el megabyte del espacio de direcciones.

La unidad de interfaz con el Bus (BIU) es la responsables de la comunicación externa del procesador. Esta unidad de proceso se encarga de traducir las direcciones lógicas a direcciones físicas de la memoria con ayuda de los registros de segmento DS, SS, ES, CS e IP. Para convertir una dirección lógica en una dirección física el BIU corre el valor del registro de segmento 4 posiciones a la izquierda (que es equivalente a multiplicar por 16h) y suma el valor del offset para obtener un valor de 20 bits necesarios, como se muestra en la figura 2.3.

   Figure 2.3: Generación de direcciones

físicas

Los segmentos en la memoria pueden estar translapados, contiguos o disjuntos. El 8086 trabaja con un modelo de memoria circular, esto es, cuando la operación de translado de memoria lógica a memoria física sobrepasa el megabyte de memoria, entonces se direcciona la parte inicial de la memoria física.

La dirección de la siguiente instrucción que se ejecutará es CS:IP (Code Segment: Instruction Pointer). Para incrementar la eficiencia, en períodos donde la EU está ocupada ejecutando instrucciones, el BIU se adelanta a una petición de intrucción del EU y busca más instrucciones de la memoria. Las instrucciones se almacenan en una cola de instrucciones de 4 bytes para el 8088 y 6 bytes para el 8086. Bajo muchas circunstancias las colas contienen al menos 1 byte instrucción y el EU no tiene que esperar a que se busquen nuevas instrucciones. Las instrucciones almacenadas en la cola son adyacentes en la memoria, así, cuando se ejecuta una instrucción que transfiere el control a otra localidad el BIU limpia la cola y busca las nuevas instrucciones desde la nueva dirección.

El 8088/8086 tienen un sistema de interrupciones simple y versátil , estos procesadores pueden manejar hasta 256 interrupciones diferentes. Las entradas de las interrupciones se encuentran almacenadas el vector de interrupciones en la parte baja de la memoria. A cada interrupción se le asocia una doble palabra. Cada palabra doble corresponde al

Page 28: Los Microprocesadores 8086 y 8088

CS:IP de la subrutina que la interrupción invoca. Las primeras cinco interrupciones se utilizan para los siguientes errores: división por cero, paso sencillo (trap), interrupción no enmascarable, punto de ruptura y sobreflujo. El 8088/8086 no distingue entre las interrupciones generadas por hardware y por las interrupciones generadas por la instrucción INT.

Next: El manejo de excepciones Up: La familia INTEL 80x86 Previous: La familia INTEL 80x86 Amilcar Meneses

LA CPU 8086/8088 DE INTEL.

La empresa Intel introdujo el microprocesador 8086 de 16 bits en el año 1978. Era el primer procesador que podía disponer de los avances tecnológicos conseguidos en lenguajes de programación de alto nivel y en sistemas operativos más potentes, con lo cual se obtuvo la base para el diseño de las computadoras. Desde entonces, todos los sistemas compatibles IBM se basan, en última instancia, en la CPU 8086. Todos los descendientes de la 8086 de Intel han de ser capaces de emular este procesador.

El software que se desarrollo para el 8086 también tenia que ser compatible con chips posteriores.

El chip 8086 disponía de una estructura real de 16 bits, que el permitía trabajar con un formato de datos de 16 bits, tanto interna como externamente. Pero el elevado precio de los componentes de memoria requeridos para su uso, dificulto su comercialización.

La empresa IBM contrato la firma Intel para diseñar el sucesor del chip 8086, se llama CPU 8088. Las primeras computadoras personales se introdujeron en el mercado en 1981. Estas computadoras, que contaban con una capacidad de 16kb de memoria, una unidad de cinta en forma de cassette, y un monitor monocromo de color verde sin prestaciones gráficas. Ya hace más de 15 años de este acontecimiento.

Externamente, el chip 8088 solo usaba un formato de 8 bits para su bus de datos. Pero internamente, trabaja con 16 bits, como el procesador 8086. La CPU 8086/8088 fue equipada con un bus de direcciones de 20 bits, que el permitía seleccionar 2 elevado a la 20 ubicaciones de memoria en forma directa, equivalente a 1 MB (1,048,576 bytes), lo que definía el límite físico de la memoria de este procesador. En sus inicios, en sus inicios funcionaba a una frecuencia de reloj impresionante de 4.77MHz. Las computadoras XT eran versiones mejoradas de las PC de IBM, con la incorporación de un

Page 29: Los Microprocesadores 8086 y 8088

disco duro. Más adelante los modelos de Turbo XT compatibles, contaban con velocidades 8 MHz, 10 MHz e incluso 12MHz.

Comparado con la potencia disponible hoy en día, es difícil imaginar cual era la utilidad de una computadora con un procesador 8086/8088. No obstante, el software que se disponía aquellos días no precisaba mucha potencia. Incluso un programa de tratamiento de textos reciente, como el programa Word 5.5 de Microsoft, podría funcionar correctamente con una CPU 8088.

EL 80286.

Pronto Intel introdujo un procesador más sofisticado, la CPU 80286, que elevo las prestaciones de la PC a un nuevo nivel. El procesador 80286 usaba un bus de datos de 16 bits, tanto interna como externamente, con lo cual superaba a su predecesor, sobre todo con respecto a la cada vez mas potente nuevas aplicaciones. Se amplio también el bus de direcciones de este procesador para direccionar 16 MB de memoria.

Otra diferencia básica entre el procesador 80286 y su predecesor era el juego de comandos condensada en la CPU. Aumento el numero de instrucciones que podría ejecutarse por segundo, no solamente durante una mayor frecuencia de reloj, sino también mediante una estructura de comandos más eficiente. Como resultado se multiplico por tres el valor de MIPS (millones de instrucciones por segundo).

De todas formas, la diferencia predominante entre las CPU 8086/8088 y 80286 radica en la adición de un nuevo modelo operativo. En el modo real o normal, la 286 funciona de la misma manera que su predecesor, con la misma limitación de un MB de memoria: Pero su mayor velocidad de reloj y juego de comandos más eficientes permitía superar a sus predecesores, incluso en el modo real.

El nuevo modo operativo, llamado modo protegido, le permite al procesador 80286 direccionar y gestionar mas memoria, hasta 16 MB. Así es posible procesar varias aplicaciones diferentes simultáneamente. A esta técnica se le llama multitarea.

El 80286 fue el primer procesador Intel capaz de realizar multitareas que disfrutó de una fuerte comercialización. En todo esto, solo unas cuantas aplicaciones, tales como Lotus 1-2-3 y Windows de Microsoft podían aprovecharse de esta capacidad. El sistema operativo MS/PCDos de las PC por sí solo no puede funcionar en el modo protegido puesto que solo puede poner 640 KB de memoria de trabajo a disposición de las aplicaciones. Sin embargo, existen otros sistemas operativos, como el UNIX y el OS/2, ofrecen mucho mas en este sentido.

Page 30: Los Microprocesadores 8086 y 8088

En las PC de la categoría AT (tecnología avanzada), el procesador 286 se encuentra a menudo en la misma forma y en el mismo lugar que en la CPU 8086/8088. En cambio, hay que notar que el chip 286 no se fabricó con un formato completo. Es decir, tanto puede ser una lámina cuadrada que se sujeta mediante clips metálicos, puede ser un chip de forma cuadrada montada en un zócalo de plástico. Su ubicación sobre las distintas placas madre puede variar también. Normalmente, la única manera de identificar este chip es mediante las siglas grabadas sobre su superficie.

EL 80386.

La siguiente generación de procesadores para la PC trajo consigo importantes cambios en el mundo de la PC. Con la CPU 80386 DX, Intel ofreció un chip de proceso que era ampliamente superior al de sus predecesores. El 386 DX era el primer procesador de 32 Bites que pudo usarse en placas madre de las PC. Al doblar la anchura externa e interna del bus de datos utilizado en el 286, tanto interna como externamente, se le abrieron nuevos horizontes a las computadoras personales.

Las aplicaciones gráficas, que anteriormente corrían lentamente, ahora podrían funcionar con más rapidez. Asimismo, el uso de las interfaces gráficas de usuario (GUI), que requieren mucha más potencia del procesador, dado que redefinen toda la pantalla después de cada acción, comenzó a ser realmente posible y práctico después de haberse introducido en 80386.

Desde que las velocidades de los relojes se elevaron de 16 a 33 y 40 MHz y que se instaló un caché externo de memoria (ver más adelante) para incrementar el rendimiento del procesador, casi todas las computadoras modernas pueden clasificarse como “computadoras gráficas”, una distinción que ya existía desde hacía algún tiempo entre las computadoras Apple, Commodore, Amiga y Atari ST que utilizan procesadores Motorola.

Desde que el bus de direcciones se expandió a 32 bits, el chip puede direccionar directamente 4.294.967.296 (2 elevado a la 32) localizaciones de memoria, o 4 gigabytes de RAM. Esto hace posible direccionar incluso 64 terabytes de forma virtual, lo que permite otro modo de operación, llamado el modo real virtual. Con este modo de operación, es posible efectuar la multitarea bajo MS- /PC-DOS porque cada aplicación involucrada en el proceso de multitarea recibe una CPU virtual con 1 MB de memoria.

Estas computadoras virtuales por separado operan como varios procesadores 8088 independientes, trabajando en paralelo en un solo sistema. No obstante, para crear este mundo artificial en la PC, se necesitaba otra ampliación del sistema operativo. Esta adición pronto

Page 31: Los Microprocesadores 8086 y 8088

fue introducida por Microsoft con la versión 3.0 del entorno gráfico de usuario MS-Windows.

Al igual que la CPU 286, la 386 permanece completamente compatible con códigos objeto en relación a sus predecesores. Esto significa que todos los sistemas operativos y aplicaciones diseñados para procesadores 8086 u 80286 también funcionarán en la CPU 386, sólo que mucho más deprisa.

El 386 también entiende los juegos de comandos utilizados por los chips más antiguos y los tiempos de ejecución son mas rápidos. A una velocidad de reloj idéntica, por ejemplo 16 MHz, el 386 puede alcanzar dos veces los MIPS (millones de instrucciones por segundo) que la CPU 80286.

Una característica especial de la generación 386 es que cuenta con una versión “degradada” del procesador, llamada 386SX con velocidades de reloj entre 16 y 25 MHz. “Degradada” quiere decir en este contexto que el 386SX utiliza una estructura de 32 bits sólo de forma interna. En este sentido no es inferior a su hermano el 386 “puro”.

No obstante, externamente el SX utiliza un bus de datos que tiene el mismo tamaño que el bus encontrado en la CPU 286. También el bus de direcciones del “SX” es similar al del 286, lo cual le limita en aplicaciones multitarea.

El 386SX consiste básicamente en un procesador 386 en una placa madre 286. Este es el motivo por el que el SX ejecuta muchas tareas de forma mas lenta que la de su hermano mayor, el 386 “puro”. Debe estar cambiando constantemente entre su estructura interna propia de 32 bits y la operación externa de 16 bits, lo cual cuesta tiempo.

El 386DX es fácilmente identificable en el marco de la placa madre. Tiene forma cuadrada, una inscripción que lo distingue, y una impresión en tinta azul-roja. Esta CPU 386DX está normalmente localizada transversalmente frente a las ranuras de expansión de la placa madre.

Puesto que los procesadores de la clase 386SX son considerablemente más pequeños, es difícil localizarlos. En vez de estar montados en un zócalo como otros procesadores Intel, están soldados directamente al circuito madre. Así pues, no pueden sacarse ni intercambiarse. Si una CPU 386SX deja de funcionar, deberá cambiarse toda la placa madre.

LA ACTUAL ESTRELLA DE LA FAMILIA INTEL.

EL PROCESADOR 1486

Page 32: Los Microprocesadores 8086 y 8088

El último procesador de Intel es el i486. Esta CPU, que es mas que un procesador, se llama chip integrado. Este chip agrupa cuatro grupos de funciones distintas (la CPU real, un coprocesador matemático, un controlador caché y dos memorias de caché con 4k cada una) en un solo componente. El i486 trabaja interna y externamente con una estructura completa de 32 bits y puede alcanzar frecuencias de reloj que van desde 25 hasta 50 MHz.

La diferencia principal entre el i486 y sus predecesores, particularmente el chip 386, es el elevado nivel de integración del i486, Incluso un 386 con un coprocesador, no puede compararse a un i486.

La estructura del i486 tiene un controlador caché que está construido dentro del chip, junto con dos cachés de 4k. Al igual que el caché on-chip actúa como un buffer entre el procesador y la memoria de trabajo. La operación básica del caché integrado es idéntica a la del “caché de segundo nivel” externo, véase la descripción en el apartado 2.1.6, que explica el principio de caché RAM en detalle.

Él caché interno localizado en el i486 está organizado como un caché “a través de una escritura buffer”. Este método lee los datos, que no pueden encontrarse en el caché, desde la memoria de trabajo y traslada esta información a la CPU y al caché. Las operaciones de escritura para localizaciones de memoria que actualmente están almacenadas en el caché, se efectúan tanto a las localizaciones de la memoria de trabajo como a las del caché.

Esto asegura que la información en el caché esté actualizada. Un algoritmo de gestión interna efectúa un buffer en estas operaciones de lectura y escritura, hasta que el bus externo está disponible y puede realizarse un acceso de escritura a la memoria de trabajo de la computadora. Esto libera al procesador e impide períodos de espera. Los contenidos del caché que menos se utilizan durante un cierto período de tiempo, se identifican mediante un algoritmo de control especial y vuelven a escribirse la próxima vez que se “refresca” el caché.

Debido al controlador interno caché, la CPU, con su elevada frecuencia de operación, rara vez debe esperar a la lentitud de la RAM de la máquina. El caché actúa como un tipo de buffer inteligente, una característica que también puede aplicarse al controlador caché. Ya que esta técnica es capaz de impedir cualquier período de espera, el i486 puede ejecutar casi todas las operaciones en un solo ciclo de reloj. Esta capacidad, por sí sola, hace que el i486 sea superior al 386.

El i486 tiene un conjunto de comandos completo, que incluye todos los conjuntos de comandos utilizados por sus predecesores. Esto da lugar a una estructura de procesador compleja. Al igual que sus

Page 33: Los Microprocesadores 8086 y 8088

predecesores, el i486 es un CISC (Com-plex Instruction Set Computer) y es compatible en forma descendente hasta el 8086. La compatibilidad descendente significa que el i486 ejecutará aplicaciones originalmente escritas para los procesadores anteriores. Debido a sus amplios conjuntos de comandos, los procesadores CISC se caracterizan por una gran flexibilidad con las aplicaciones lo cual, no obstante, puede también implicar una reducción de su velocidad.

Otros procesadores, los llamados RISC (Reduced Instruction Set Computer) alcanzan unos niveles de rendimiento superiores utilizando un reducido conjunto de comandos, que normalmente está unido a una aplicación específica (como, por ejemplo, CAD). No obstante, esto significa que el conjunto de comandos del procesador puede no ser capaz de ejecutar otras aplicaciones. Así pues, la velocidad aumenta mientras que la flexibilidad disminuye.

El i486 es algo así como un compromiso entre un nivel máximo de flexibilidad y una velocidad de procesamiento que es significativamente elevada para una computadora personal. La complejidad del procesador CISC y la velocidad del procesador RISC están satisfactoriamente combinadas en el 486.

Sin embargo, Intel ha desarrollado un sucesor al i486. El nuevo procesador de 64 bits, llamado 80586 o Pentium.

Ahora que ya se tiene una visión general de la historia de los microprocesadores Intel, pasamos a la pregunta que le interesa a todos los usuarios: ¿Qué procesador se requiere para una aplicación específica?

La prensa técnica en el campo de la informática tiende a hacer que las computadoras estén listas para salir a la venta. Así pues, puede parecer como si cierto tipo de hardware y software fuera obsoleto muchos meses antes de que esto sucediera realmente. Incluso dentro del siempre cambiante campo de la informática, suelen aparecer productos que rompen todos los moldes sólo dos veces al año.

Así pues, si lee estas publicaciones con frecuencia, no asuma automáticamente que las predicciones sean totalmente exactas.

Cuando se compra el hardware, muchos usuarios de computadoras no tienen en consideración la aplicación que van a utilizar con el mismo. Normalmente, sólo están interesados en los sistemas mas recientes o en el que está actualmente en venta. Sin embargo, la forma mejor y más económica para determinar el hardware que se necesita es considerar cómo va a ser utilizado y con qué aplicación.

Desde el punto de vista de la aplicación, la selección de una configuración, determinada de hardware en un principio en una consecuencia de la decisión de utilizar un determinado software. Por

Page 34: Los Microprocesadores 8086 y 8088

ejemplo, supongamos que vaya a utilizar su computadora principalmente para procesar texto, dado que quiere preparar en su casa lo que finalmente llevara a la oficina o a la inversa.

Otros programas no le interesan. Por supuesto, que se sobre entiende que se quiere trabajar con el mismo procesador de textos en casa y en la oficina. Si este programa es una aplicación DOS como Microsoft Word 5.5, una computadora 286 es suficiente para sus necesidades. Sin embargo, si en la oficina esta instalado Microsoft Word para Windows 2.0 y se tiene que trabajar con el mismo en casa entonces su computadora debe ajustarse a unos requisitos distintos.

Aunque vaya a ejecutar las mismas tareas que con Microsoft Word 5.5 (es decir, escribir cartas) necesitara una computadora mas potente.

Mientras vaya a tratar principalmente contextos y cálculos, una computadora personal equipada con una CPU 286. Esto incluye la utilización de la maquina para propósitos de negocios tales como contabilidad, teneduría de libros, inventario y correspondencia.

Pero también es cierto que algunas aplicaciones exigencias más elevadas al sistema. Esto es especialmente válido cuando la aplicación utiliza un entorno gráfico de usuario, tal como Windows. En estos casos un 386 seria mas adecuado y deacuerdo a las características se podrá optar entre 386SX y un 386DX. Normalmente, un 486 solo es necesario cuando quiera ejecutar aplicaciones especiales, tales como programa CAD complejos.

INCREMENTOS DEL RENDIMIENTO MEDIANTE LA INSTALACION DE UN NUEVO PROCESADOR.

El rendimiento de un chip procesador no puede aumentarse. Apretando tornillos no lograremos nada que el no pueda dar por si mismo. A menudo sucede lo contrario: debido a una configuración errónea el sistema opera a un rendimiento menor al potencial.

Solo cabe configurar óptimamente la computadora para obtener mejores resultados. Aunque esto no aumentara la capacidad operativa de su procesador, asegura que un sistema funcione a pleno rendimiento.

Es imposible mejorar su computadora personal a una generación elevada de procesadores simplemente instalando una nueva CPU. Recuerde que los procesadores están unidos a otros componentes de la placa madre a través de varios sistemas bus. Estas conexiones están dispuestas de forma distinta en cada tipo de procesador. Así la única forma de mejorar su 286 a un 386 o un 386 a un 486 es sustituir totalmente la placa madre.

EL AUMENTO DE LA FRECUENCIA DE RELOJ DEL SISTEMA:

Page 35: Los Microprocesadores 8086 y 8088

UNA CUESTION POLEMICA.

Dentro de la misma generación de procesadores (por ejemplo, la generación 386), es teóricamente posible aumentar gradualmente el rendimiento del procesador, mediante un sistema que aumente la frecuencia del reloj, esto aumentaría el numero de operaciones que el procesador podría ejecutar cada segundo, aumentando de esta forma la productividad del procesador. De este modo, se puede crear un 386 de 20 MHz a un 386 de25 MHz, simplemente cambiando el reloj del sistema por un más potente.

Probablemente el procesador no podrá funcionar a la frecuencia aumentada ya que no fue diseñado para operar a esa velocidad. No obstante, incluso si usted también a instalado una CPU capaz de manejar la velocidad aumentada del reloj, podría encontrarse con problemas adicionales ya que las placas madre y sus componentes, especialmente el juego de chips, tampoco estaban diseñados para operar a esa velocidad o frecuencia aumentada.

Así pues, el éxito de este tipo de mejora no puede garantizarse ya que muchas operaciones con periodo de tiempo critico dependen de la velocidad de reloj con que opera la CPU.

Puesto que este tipo de mejora rara vez funciona, no la discutiremos en detalle. Asimismo recuerde que no vale la pena aumentar el funcionamiento de su sistema mediante una velocidad de reloj superior a un 25%, pues se corre el riesgo de dañar el procesador. El único modo de aumentar el funcionamiento de el significativamente, es sustituir la placa madre de su computadora.

3.- EL COPROCESADOR.

El termino completo es ¨coprocesador matematico¨, con este nombre se puede deducir que no se trata de un elemento central, si no de un asistente. Un coprocesador matemático aumenta la velocidad de una computadora, ocupándose de algunas de las tareas de la CPU. No obstante el coprocesador no es un componente indispensable en una maquina. Se puede instalar un coprocesador en la placa madre, siempre y cuando esta disponga de la ranura correspondiente.

Puesto que lo que hace la CPU no es otra cosa de cálculos, el lector podría estar preguntándose porque necesita ayuda para realizarlos. Lo que ocurre es que la CPU solo puede llevar a cabo operaciones aritméticas básicas con números enteros.

La CPU tiene problemas para procesar operaciones con valores fraccionarios puesto que no son números enteros. Así la CPU requiere bastante tiempo para resolverlas. Siempre deban realizar muchos cálculos complejos (por ejemplo, al calcular funciones tangentes, exponenciales y raíces) puede disminuir su velocidad

Page 36: Los Microprocesadores 8086 y 8088

considerablemente, debido especialmente a la unidad de procesamiento tiene que ejecutar también otras tareas simultáneamente.

Especialmente en aquellas operaciones en las cuales se trabaja con fracciones y cifras muy complicadas en cuestiones aritméticas de coma flotante, el coprocesador muestra su idoneidad. En aquellos campos de aplicación donde se requieren muchas posiciones decimales y los errores de redondeo deben de mantenerse tan insignificantes como sea posible, resulta imprescindible la utilización de un coprocesador.

Un coprocesador puede ser extremadamente útil para realizar este tipo de cálculos. Normalmente, las aplicaciones científicas y técnicas requieren un coprocesador matemático. No obstante, para utilizar un coprocesador los programas deben estar específicamente diseñados para ello. De nuevo el paquete de software que vaya usted a utilizar constituye el factor decisivo que determinara si su sistema debe estar equipado con un coprocesador. Algunos paquetes de programas modernos de CAD/CAM, como AutoCAD, requieren un coprocesador.

Un coprocesador es también útil para utilizar gráficos vectoriales. Sin embargo, no aumenta el rendimiento de las aplicaciones que utilizan gráficas de puntos.

Con cada generación de CPU utilizada en sistemas de computadoras personales Intel, también introducía sus correspondiente coprocesador. Así las familias de procesadores Intel, desde 8088 al 80386, tienen sus compañeros coprocesadores matemáticos, el 8087, 80287, 80387SX y 80387. Sin embargo, otros fabricantes, como AMD, CYRIX, ITT, y ULSI, también fabrican coprocesadores.

Los coprocesadores de estos fabricantes pueden utilizarse sin ningún problema. Son totalmente compatibles con los coprocesadores de Intel, en ocasiones son mas rápidos y precisos y siempre más económicos. Aunque la denominación del modelo utilizado por los distintos fabricantes para cada generación de procesadores varía, es fácil determinar para cada línea de CPU se ha diseñado un coprocesador dado. Los coprocesadores están todavía mas críticamente ajustados a la velocidad del reloj que los procesadores normales. Por lo tanto, debe asegurarse que cualquier coprocesador que seleccione para su sistema este diseñado para manejar la frecuencia de reloj de su computadora. Para ello, debe considerar varios factores.

Los coprocesadores para computadoras 286, al contrario que los coprocesadores de las demás familias de los procesadores, operan a solo 2/3 de la capacidad de la frecuencia de reloj del sistema. Esto significa que, para una computadora 286 de 16 MHz, podría realmente utilizar un coprocesador diseñado para operar a 12 MHz.

Page 37: Los Microprocesadores 8086 y 8088

Por parte de Intel ya se ofertan coprocesadores cuyo margen de frecuencia va de 6 a 20 MHz. Puesto que la frecuencia del procesador es solo 2/3 de la frecuencia real del sistema, solo hay un pequeño aumento en el rendimiento cuando se añade un coprocesador a una CPU 286. Habría un mayor aumento en el rendimiento con un sistema 386 porque este sistema utiliza un coprocesador que funciona a la velocidad real del sistema.

Tal como mencionamos, el coprocesador para el 486 ya esta construido en el chip de procesador. Como resultado, ya no es necesario que los dos procesadores se comuniquen mediante un externo.

El 486SX, la versión base del 486, no esta equipada con un coprocesador integrado, pero puede instalarse un coprocesador externo 487SX. Puesto que estos dos procesadores, al igual que las familias inferiores de procesadores, diseñados para varias aplicaciones especificas. Por ejemplo, se ha diseñado un coprocesador que se utiliza específicamente con el paquete de software de AutoCAD.

Weitek también ha desarrollado un coprocesador mayor y significativamente más rápido que puede conectarse a las mayorías de placas 386 y 486. Normalmente, las placas madres 386 están equipadas con un zócalo capaz de aceptar tanto el Intel 80387 como el Weitek 1167. Muchas placas 486 también pueden aceptar un Weitek 4167 además del coporcesador integrado. Puesto que el procesador Weitek opera de forma más precisa que el Intel estándar, se utiliza a menudo en aplicaciones científicas.

EMULACIONES DEL COPROCESADOR.

No hace tanto que los coprocesadores costaban una fortuna, si bien su utilización era necesaria como hoy en algunas aplicaciones. Por esta razón, la alternativa más socorrida era servirse de un emulador de coprocesador, dichos programas de emulación han sido diseñados para dotar a la CPU de la metodología de trabajo de un coprocesador y hacerlas actuar como si dispusieran del correspondiente chip numérico.

Algunos de esos programas registran un elevado rendimiento y funcionan de forma excelente. Su Software de aplicación es, asimismo, adecuado. También los programas de aplicación trabajan bien con estas emulaciones. Aun así, no llegan a sustituir las alternativas de hardware. En la actualidad los precios de los coprocesadores son tan bajos que las alternativas

de adquisición son bajas.

Page 38: Los Microprocesadores 8086 y 8088

AUMENTO DEL RENDIMIENTO DEL COPROCESADOR MEDIANTE LA UTILIZACION DE ZOCALOS FAST.

En general los coprocesadores pueden aplicarse ya lo expuesto en relación con la sustitución de procesadores en los tema 2.1.1. Unicamente puede añadirse la posibilidad que ofrece el 286 de mejorar el rendimiento del procesador numérico con independencia del resto de componentes de la placa madre. Como ya hemos mencionado, la NPU 287 opera a una frecuencia de reloj de 2/3. Esto admite modificaciones si se agrega al zócalo del procesador un zócalo fast que sea entonces el que incorpore al coprocesador. Este Trubozócalo contiene su propio cuarzo y actúa, por tanto, independientemente de la frecuencia de reloj del sistema.

Los zócalos rápidos se pueden obtener en todas las frecuencias del 286. El chip del coprocesador que debe instalarse encima de ellos tiene que estar configurado, naturalmente, para la frecuencia en cuestión. Esto se mantiene igual. Emplear este método para que el procesador funcione bastante más rápidamente que la CPU no tiene mucho sentido: es como disponer de una calculadora muy veloz que no pueda ofrecer resueltos por tener que adecuarse al ritmo de reacción de su dueño.

Historia de los Microprocesadores IntelDesde la aparición de los primeros microprocesadores en los inicios de la década de los setentas, todas las áreas científicas y tecnológicas han sido experimentado su más acelerado desarrollo en la historia de la humanidad. El bajo costo, confiabilidad y reducido espacio de los sistemas digitales basados en microprocesadores les han posibilitado el incursionar en aplicaciones que hasta antes de esa década se hallaban restringidas a sistemas de alto costo y considerados de alta tecnología. Las industrias de la telecomunicación, automotriz, aeronáutica, de transformación, médica y de consumo casero, asi como la educación, banca, y empresas de servicios, son solo algunas de las áreas en las cuales el impacto de la electrónica digital es más evidente, ya que lo palpamos en nuestro actuar cotidiano.

CISC

Es una abreviación de "Complex Instrution set computer". Se refiere a los microprocesadores tradicionales que operan con grupos grandes de instrucciones de procesador (lenguaje de maquina). Los microprocesadores INTEL 80xxx estan dentro de esta categoria (incluido el PENTIUM). Los procesadores CISC tienen un Set de instrucciones complejas por naturaleza que requieren varios a muchos ciclos para completarse.

RISC

Page 39: Los Microprocesadores 8086 y 8088

Es una abreviación de "Reduced Instruction Set Code", a diferencia de los CISC, los procesadores RISC tienen un grupo de o Set de instrucciones simples requiriendo uno o pocos ciclos de ejecución. Estas instrucciones pueden ser utilizadas más eficientemente que la de los procesadores CISC con el diseño de software apropiado, resultando en operaciones más rapídas.

LOS MICROPROCESADORES 8086 Y 8088

Historia del 8086/8088

En junio de 1978 Intel lanzó al mercado el primer microprocesador de 16 bits: el 8086. En junio de 1979 apareció el 8088 (internamente igual que el 8086 pero con bus de datos de 8 bits) y en 1980 los coprocesadores 8087 (matemático) y 8089 (de entrada y salida). El primer fabricante que desarrolló software y hardware para estos chips fue la propia Intel. Reconociendo la necesidad de dar soporte a estos circuitos integrados, la empresa invirtió gran cantidad de dinero en un gran y moderno edificio en Santa Clara, California, dedicado al diseño, fabricación y venta de sus sistemas de desarrollo que, como se explicó anteriormente, son computadoras autosuficientes con el hardware y software necesario para desarrollar software de microprocesadores.

Los sistemas de desarrollo son factores clave para asegurar las ventas de una empresa fabricantes de chips. La inmensa mayoría de ventas son a otras empresas, las cuales usan estos chips en aparatos electrónicos, diseñados, fabricados y comercializados por ellas mismas. A estas empresas se las llama "fabricantes de equipo original", o en inglés, OEM (Original Equipment Manufacturer). El disminuir el tiempo de desarrollo de hardware y software para las OEM es esencial, ya que el mercado de estos productos es muy competitivo. Necesitan soporte pues los meses que les puede llevar el desarrollo de las herramientas apropiadas les puede significar pérdidas por millones de dólares. Además quieren ser los primeros fabricantes en el mercado, con lo cual pueden asegurarse las ventas en dos áreas importantes: a corto plazo, ya que al principio la demanda es mucho mayor que la oferta, y a largo plazo, ya que el primer producto marca a menudo los estándares.

De esta manera la empresa Intel había desarrollado una serie completa de software que se ejecutaba en una microcomputadora basada en el 8085 llamada "Intellec Microcomputer Development System". Los programas incluían ensambladores cruzados (éstos son programas que se ejecutan en un microprocesador y generan código de máquina que se ejecuta en otro), compiladores de PL/M, Fortran y Pascal y varios programas de ayuda. Además había un programa traductor llamado CON V86 que convertía código fuente 8080/8085 a código fuente 8086/8088. Si se observan de cerca ambos conjuntos de instrucciones, queda claro que la transformación es sencilla si los registros se traducen así: A -> AL, B -> CH, C -> CL, D -> DH, E -> DL, H -> BH y L -> BL. Puede parecer complicado

Page 40: Los Microprocesadores 8086 y 8088

traducir LDAX B (por ejemplo) ya que el 8088 no puede utilizar el registro CX para direccionamiento indirecto, sin embargo, se puede hacer con la siguiente secuencia: MOV SI, CX; MOV AL,[SI]. Esto aprovecha el hecho que no se utiliza el registro SI. Por supuesto el programa resultante es más largo (en cantidad de bytes) y a veces más lento de correr que en su antecesor 8085. Este programa de conversión sólo servía para no tener que volver a escribir los programas en una primera etapa. Luego debería reescribirse el código fuente en assembler para poder obtener las ventajas de velocidad ofrecidas por el 8088. Luego debía correr el programa en la iSBC 86/12 Single Board Computer basado en el 8086. Debido al engorro que resultaba tener dos plaquetas diferentes, la empresa Godbout Electronics (también de California) desarrolló una placa donde estaban el 8085 y el 8088, donde se utilizaba un ensamblador cruzado provisto por la compañía Microsoft. Bajo control de software, podían conmutarse los microprocesadores. El sistema operativo utilizado era el CP/M (de Digital Research).

El desarrollo más notable para la familia 8086/8088 fue la elección de la CPU 8088 por parte de IBM (International Business Machines) cuando en 1981 entró en el campo de las computadoras personales. Esta computadora se desarrolló bajo un proyecto con el nombre "Acorn" (Proyecto "Bellota") pero se vendió bajo un nombre menos imaginativo, pero más correcto: "Computadora Personal IBM", con un precio inicial entre 1260 dólares y 3830 dólares según la configuración (con 48KB de memoria RAM y una unidad de discos flexibles con capacidad de 160KB costaba 2235 dólares). Esta computadora entró en competencia directa con las ofrecidas por Apple (basado en el 6502) y por Radio Shack (basado en el Z-80).

ARQUITECTURA DE LOS PROCESADORES 8088 Y 8086

El 8086 es un microprocesador de 16 bits, tanto en lo que se refiere a su estructura como en sus conexiones externas, mientras que el 8088 es un procesador de 8 bits que internamente es casi idéntico al 8086. La única diferencia entre ambos es el tamaño del bus de datos externo. Intel trata esta igualdad interna y desigualdad externa dividiendo cada procesador 8086 y 8088 en dos sub-procesadores. O sea, cada uno consta de una unidad de ejecución (EU: Execution Unit) y una unidad interfaz del bus (BIU: Bus Interface Unit). La unidad de ejecución es la encargada de realizar todas las operaciones mientras que la unidad de interfaz del bus es la encargada de acceder a datos e instrucciones del mundo exterior. Las unidades de ejecución son idénticas en ambos microprocesadores, pero las unidades de interfaz del bus son diferentes en varias cuestiones, como se desprende del siguiente diagrama en bloques:

La ventaja de esta división fue el ahorro de esfuerzo necesario para producir el 8088. Sólo una mitad del 8086 (el BIU) tuvo que rediseñarse para producir el 8088.

Page 41: Los Microprocesadores 8086 y 8088

La explicación del diagrama en bloques es la siguiente:

Registros de uso general del 8086/8088:

Tienen 16 bits cada uno y son ocho:

1) AX = Registro acumulador, dividido en AH y AL (8 bits cada uno).

2) BX = Registro base, dividido en BH y BL.

3) CX = Registro contador, dividido en CH y CL.

4) DX = Registro de datos, dividido en DH y DL.

5) SP = Puntero de pila (no se puede subdividir).

6) BP = Puntero base (no se puede subdividir).

7) SI = Puntero índice (no se puede subdividir).

8) DI = Puntero destino (no se puede subdividir).

Cualquiera de estos registros puede utilizarse como fuente o destino en operaciones aritméticas y lógicas, lo que no se puede hacer con ninguno de los seis registros que se verán más adelante.

Además de lo anterior, cada registro tiene usos especiales:

AX: Usándolo se produce (en general) una instrucción que ocupa un byte menos que si se utilizaran otros registros de uso general. Su parte más baja, AL, también tiene esta propiedad. El último registro mencionado es el equivalente al acumulador de los procesadores anteriores (8080 y 8085). Además hay instrucciones como DAA; DAS; AAA; AAS; AAM; AAD; LAHF; SAHF; CBW; IN y OUT que trabajan con AX o con uno de sus dos bytes (AH o AL). También se utiliza este registro (junto con DX a veces) en multiplicaciones y divisiones.

BX: Es el registro base de propósito similar (se usa para direccionamiento indirecto) y es una versión más potente del par de registros HL de los procesadores anteriores.

CX: Se utiliza como contador en bucles (instrucción LOOP), en operaciones con cadenas (usando el prefijo REP) y en desplazamientos y rotaciones (usando el registro CL en los dos últimos casos).

DX: Se utiliza junto con el registro AX en multiplicaciones y divisiones, en la instrucción CWD y en IN y OUT para direccionamiento indirecto de puertos (el registro DX indica el número de puerto de entrada/salida).

SP: Aunque es un registro de uso general, debe utilizarse sólo como puntero de pila, la cual sirve para almacenar las direcciones de retorno de subrutinas y los datos temporarios (mediante las instrucciones PUSH y POP). Al introducir (push) un valor en la pila a este registro se le resta dos, mientras que al extraer (pop) un valor de la pila este a registro se le suma dos.

Page 42: Los Microprocesadores 8086 y 8088

BP: Generalmente se utiliza para realizar direccionamiento indirecto dentro de la pila.

SI: Sirve como puntero fuente para las operaciones con cadenas. También sirve para realizar direccionamiento indirecto.

DI: Sirve como puntero destino para las operaciones con cadenas. También sirve para realizar direccionamiento indirecto.

UNIDAD ARITMÉTICA Y LÓGICA

Es la encargada de realizar las operaciones aritméticas (suma, suma con "arrastre", resta, resta con "préstamo" y comparaciones) y lógicas (AND, OR, XOR y TEST). Las operaciones pueden ser de 16 bits o de 8 bits.

Indicadores (flags): Hay nueve indicadores de un bit en este registro de 16 bits. Los cuatro bits más significativos están indefinidos, mientras que hay tres bits con valores determinados: los bits 5 y 3 siempre valen cero y el bit 1 siempre vale uno (esto también ocurría en los procesadores anteriores).

Registro de indicadores (16 bits)Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Flag -- -- -- -- OF DF IF TF SF ZF 0 AF 0 PF 1 CF

CF (Carry Flag, bit 0): Si vale 1, indica que hubo "arrastre" (en caso de suma) hacia, o "préstamo" (en caso de resta) desde el bit de orden más significativo del resultado. Este indicador es usado por instrucciones que suman o restan números que ocupan varios bytes. Las instrucciones de rotación pueden aislar un bit de la memoria o de un registro poniéndolo en el CF.

PF (Parity Flag, bit 2): Si vale uno, el resultado tiene paridad par, es decir, un número par de bits a 1. Este indicador se puede utilizar para detectar errores en transmisiones.

AF (Auxiliary carry Flag, bit 4): Si vale 1, indica que hubo "arrastre" o "préstamo" del nibble (cuatro bits) menos significativo al nibble más significativo. Este indicador se usa con las instrucciones de ajuste decimal.

ZF (Zero Flag, bit 6): Si este indicador vale 1, el resultado de la operación es cero.

SF (Sign Flag, bit 7): Refleja el bit más significativo del resultado. Como los números negativos se representan en la notación de complemento a dos, este bit representa el signo: 0 si es positivo, 1 si es negativo.

TF (Trap Flag, bit 8): Si vale 1, el procesador está en modo paso a paso. En este modo, la CPU automáticamente genera una interrupción interna después de cada instrucción, permitiendo inspeccionar los resultados del programa a medida que se ejecuta instrucción por instrucción.

Page 43: Los Microprocesadores 8086 y 8088

IF (Interrupt Flag, bit 9): Si vale 1, la CPU reconoce pedidos de interrupción externas enmascarables (por el pin INTR). Si vale 0, no se reconocen tales interrupciones. Las interrupciones no enmascarables y las internas siempre se reconocen independientemente del valor de IF.

DF (Direction Flag, bit 10): Si vale 1, las instrucciones con cadenas sufrirán "auto-decremento", esto es, se procesarán las cadenas desde las direcciones más altas de memoria hacia las más bajas. Si vale 0, habrá "auto-incremento", lo que quiere decir que las cadenas se procesarán de "izquierda a derecha".

OF (Overflow flag, bit 11): Si vale 1, hubo un desborde en una operación aritmética con signo, esto es, un dígito significativo se perdió debido a que tamaño del resultado es mayor que el tamaño del destino.

SISTEMA DE CONTROL DE LA UNIDAD DE EJECUCIÓN

Es el encargado de decodificar las instrucciones que le envía la cola y enviarle las órdenes a la unidad aritmética y lógica según una tabla que tiene almacenada en ROM llamada CROM (Control Read Only Memory).

COLA DE INSTRUCCIONES

Almacena las instrucciones para ser ejecutadas. La cola se carga cuando el bus está desocupado, de esta manera se logra una mayor eficiencia del mismo. La cola del 8086 tiene 6 bytes y se carga de a dos bytes por vez (debido al tamaño del bus de datos), mientras que el del 8088 tiene cuatro bytes. Esta estructura tiene rendimiento óptimo cuando no se realizan saltos, ya que en este caso habría que vaciar la cola (porque no se van a ejecutar las instrucciones que van después del salto) y volverla a cargar con instrucciones que se encuentran a partir de la dirección a donde se salta. Debido a esto las instrucciones de salto son (después de multiplicaciones y divisiones) las más lentas de este microprocesador.

Registros de la unidad de interfaz con el bus:

El programador puede acceder a cinco registros de 16 bits cada uno, siendo cuatro de ellos registros de segmento y el restante el puntero de instrucción (IP). Los registros de segmento se llaman:

CS: Registro de segmento de código.

DS: Registro de segmento de datos.

ES: Registro de segmento extra.

SS: Registro de segmento de pila.

La utilización de estos registros se explica más adelante, en la sección que trata de direccionamiento a memoria.

Lógica de control del bus:

Page 44: Los Microprocesadores 8086 y 8088

El cometido de este bloque es poder unir los bloques anteriormente mencionados con el mundo exterior, es decir, la memoria y los periféricos.

El 8088 tiene un bus de datos externo reducido de 8 bits. La razón para ello era prever la continuidad entre el 8086 y los antiguos procesadores de 8 bits, como el 8080 y el 8085. Teniendo el mismo tamaño del bus (así como similares requerimientos de control y tiempo), el 8088, que es internamente un procesador de 16 bits, puede reemplazar a los microprocesadores ya nombrados en un sistema ya existente.

El 8088 tiene muchas señales en común con el 8085, particularmente las asociadas con la forma en que los datos y las direcciones están multiplexadas, aunque el 8088 no produce sus propias señales de reloj como lo hace el 8085 (necesita un chip de soporte llamado 8284, que es diferente del 8224 que necesitaba el microprocesador 8080). El 8088 y el 8085 siguen el mismo esquema de compartir los terminales correspondientes a los 8 bits más bajos del bus de direcciones con los 8 bits del bus de datos, de manera que se ahorran 8 terminales para otras funciones del microprocesador. El 8086 comparte los 16 bits del bus de datos con los 16 más bajos del bus de direcciones.

El 8085 y el 8088 pueden, de hecho, dirigir directamente los mismos chips controladores de periféricos. Las investigaciones de hardware para sistemas basados en el 8080 o el 8085 son, en su mayoría, aplicables al 8088.

En todo lo recién explicado se basó el éxito del 8088.

El 8086/8088 puede conectarse al circuito de dos formas distintas: el modo máximo y el modo mínimo. El modo queda determinado al poner un determinado terminal (llamado MN/MX) a tierra o a la tensión de alimentación. El 8086/8088 debe estar en modo máximo si se desea trabajar en colaboración con el Procesador de Datos Numérico 8087 y/o el Procesador de Entrada/Salida 8089 (de aquí se desprende que en la IBM PC el 8088 está en modo máximo). En este modo el 8086/8088 depende de otros chips adicionales como el Controlador de Bus 8288 para generar el conjunto completo de señales del bus de control. El modo mínimo permite al 8086/8088 trabajar de una forma más autónoma (para circuitos más sencillos) en una manera casi idéntica al microprocesador 8085.

Los 40 pines del 8088 en modo mínimo tienen las siguientes funciones:

1.- GND (Masa)

2.- A14 (Bus de direcciones)

3.- A13 (Bus de direcciones)

4.- A12 (Bus de direcciones)

Page 45: Los Microprocesadores 8086 y 8088

5.- A11 (Bus de direcciones)

6.- A10 (Bus de direcciones)

7.- A9 (Bus de direcciones)

8.- A8 (Bus de direcciones)

9.- AD7 (Bus de direcciones y datos)

10.- AD6 (Bus de direcciones y datos)

11.- AD5 (Bus de direcciones y datos)

12.- AD4 (Bus de direcciones y datos)

13.- AD3 (Bus de direcciones y datos)

14.- AD2 (Bus de direcciones y datos)

15.- AD1 (Bus de direcciones y datos)

16.- AD0 (Bus de direcciones y datos)

17.- NMI (Entrada de interrupción no enmascarable)

18.- INTR (Entrada de interrupción enmascarable)

19.- CLK (Entrada de reloj generada por el 8284)

20.- GND (Masa)

21.- RESET (Para inicializar el 8088)

22.- READY (Para sincronizar periféricos y memorias lentas)

23.- /TEST

24.- /INTA (El 8088 indica que reconoció la interrupción)

25.- ALE (Cuando está uno indica que salen direcciones por AD, en caso contrario, es el bus de datos)

26.- /DEN (Data enable: cuando vale cero debe habilitar los transceptores 8286 y 8287 (se conecta al pin de "output enable"), esto sirve para que no se mezclen los datos y las direcciones).

27.- DT/R (Data transmit/receive: se conecta al pin de dirección de los chips recién indicados).

28.- IO/M (Si vale 1: operaciones con ports, si vale 0: operaciones con la memoria)

29.- /WR (Cuando vale cero hay una escritura)

30.- HLDA (Hold Acknowledge: el 8088 reconoce el HOLD)

31.- HOLD (Indica que otro integrado quiere adueñarse del control de los buses, generalmente se usa para DMA o acceso directo a memoria).

32.- /RD (Cuando vale cero hay una lectura)

Page 46: Los Microprocesadores 8086 y 8088

33.- MN/MX (Cuando esta entrada está en estado alto, el 8088 está en modo mínimo, en caso contrario está en modo máximo)

34.- /SSO (Junto con IO/M y DT/R esta salida sirve para determinar estados del 8088)

35.- A19/S6 (Bus de direcciones/bit de estado)

36.- A18/S5 (Bus de direcciones/bit de estado)

37.- A17/S4 (Bus de direcciones/bit de estado)

38.- A16/S3 (Bus de direcciones/bit de estado)

39.- A15 (Bus de direcciones)

40.- Vcc (+5V)

En modo máximo (cuando se aplica +5V al pin 33) hay algunos pines que cambian de significado:

24.- QS1: Estado de la cola de instrucciones (bit 1).

25.- QS0: Estado de la cola de instrucciones (bit 0).

26.- S0: Bit de estado 0.

27.- S1: Bit de estado 1.

28.- S2: Bit de estado 2.

29.- /LOCK: Cuando vale cero indica a otros controladores del bus (otros microprocesadores o un dispositivo de DMA) que no deben ganar el control del bus. Se activa poniéndose a cero cuando una instrucción tiene el prefijo LOCK.

30.- RQ/GT1: Es bidireccional y tiene la misma función que HOLD/HLDA en modo mínimo.

31.- RQ/GT0: Como RQ/GT1 pero tiene mayor prioridad.

34.- Esta salida siempre está a uno.

Por ser este microprocesador mucho más complejo que el 8085, tiene más bits de estado que el recién mencionado. A título informativo se detallan los bits de estado:

S2 IO/M S1 DT/R S0 /SSO Significado

1 0 0 0 Acceso a código (instrucciones)

1 0 0 1 Lectura de memoria

1 0 1 0 Escritura a memoria

1 0 1 1 Bus pasivo (no hace nada)

Page 47: Los Microprocesadores 8086 y 8088

0 1 0 0 Reconocimiento de interrupción

0 1 0 1 Lectura de puerto de entrada/salida

0 1 1 0 Escritura a puerto de E/S

0 1 1 1 Estado de parada (Halt)

QS1 QS0 Significado

0 0 No hay operación

0 1 Primer byte del código de operación

1 0 Se vacía la cola de instrucciones

1 1 Siguiente byte de la instrucción

Modos de direccionamiento del 8086/8088:

Estos procesadores tienen 27 modos de direccionamiento (una cantidad bastante más grande que los microprocesadores anteriores) o reglas para localizar un operando de una instrucción. Tres de ellos son comunes a microprocesadores anteriores: direccionamiento inmediato (el operando es un número que se encuentra en la misma instrucción), direccionamiento a registro (el operando es un registro del microprocesador) y direccionamiento inherente (el operando está implícito en la instrucción, por ejemplo, en la multiplicación uno de los operandos siempre es el acumulador). El resto de los modos sirve para localizar un operando en memoria. Para facilitar la explicación de estos modos, se pueden resumir de la siguiente manera:

Deben sumarse cuatro cantidades: 1) dirección de segmento, 2) dirección base, 3) una cantidad índice y 4) un desplazamiento.

La dirección de segmento se almacena en el registro de segmento (DS, ES, SS o CS). En la próxima sección se indica la forma en que se hace esto. Por ahora basta con saber que el contenido del registro de segmento se multiplica por 16 antes de utilizarse para obtener la dirección real. El registro de segmentación siempre se usa para referenciar a memoria.

La base se almacena en el registro base (BX o BP). El índice se almacena en el registro índice (SI o DI). Cualquiera de estas dos cantidades, la suma de las dos o ninguna, pueden utilizarse para calcular la dirección real, pero no pueden sumarse dos bases o dos índices. Los registros restantes (AX, CX, DX y SP) no pueden utilizarse para direccionamiento indirecto. El programador puede utilizar tanto la base como el índice para gestionar ciertas cosas,

Page 48: Los Microprocesadores 8086 y 8088

tales como matrices de dos dimensiones, o estructuras internas a otras estructuras, esquemas que se utilizan en las prácticas comunes de programación. La base y el índice son variables o dinámicas, ya que están almacenadas en registros de la CPU. Es decir, pueden modificarse fácilmente mientras se ejecuta un programa.

Además del segmento, base e índice, se usa un desplazamiento de 16 bits, 8 bits o 0 bits (sin desplazamiento). Ésta es una cantidad estática que se fija al tiempo de ensamblado (paso de código fuente a código de máquina) y no puede cambiarse durante la ejecución del programa (a menos que el programa se escriba sobre sí mismo, lo que constituye una práctica no aconsejada).

Todo esto genera los 24 modos de direccionamiento a memoria que se ven a continuación:

Registro indirecto: 1) [BX], 2) [DI]. 3) [SI]. Basado: 4) desp8[BX], 5) desp8[BP], 6) desp16[BX], 7)

desp16[BP]. Indexado: 8) desp8[SI], 9) desp8[DI], 10) desp16[SI], 11)

desp16[DI]. Basado-indexado: 12) [BX+SI], 13) [BX+DI], 14) [BP+SI], 15)

[BX+DI]. Basado-indexado con desplazamiento: 16) desp8[BX+SI], 17)

desp8[BX+DI], 18) desp8[BP+SI], 19) desp8[BX+DI], 20) desp16[BX+SI], 21) desp16[BX+DI], 22) desp16[BP+SI], 23) desp16[BX+DI].

Directo: 24) [desp16].

Aquí desp8 indica desplazamiento de 8 bits y desp16 indica desplazamiento de 16 bits. Otras combinaciones no están implementadas en la CPU y generarán error al querer ensamblar, por ejemplo, ADD CL,[DX+SI].

El ensamblador genera el tipo de desplazamiento más apropiado (0, 8 ó 16 bits) dependiendo del valor que tenga la constante: si vale cero se utiliza el primer caso, si vale entre -128 y 127 se utiliza el segundo, y en otro caso se utiliza el tercero. Nótese que [BP] sin desplazamiento no existe. Al ensamblar una instrucción como, por ejemplo, MOV AL,[BP], se generará un desplazamiento de 8 bits con valor cero. Esta instrucción ocupa tres bytes, mientras que MOV AL,[SI] ocupa dos, porque no necesita el desplazamiento.

Estos modos de direccionamiento producen algunos inconvenientes en el 8086/8088. La CPU gasta tiempo calculando una dirección compuesta de varias cantidades. Principalmente esto se debe al hecho de que el cálculo de direcciones está programado en microcódigo (dentro de la CROM del sistema de control de la unidad de ejecución). En las siguientes versiones (a partir del 80186/80188) estos cálculos están cableados en la máquina y, por lo tanto, cuesta mucho menos tiempo el realizarlos.

Page 49: Los Microprocesadores 8086 y 8088

Veamos un ejemplo: MOV AL, ES:[BX+SI+6]. En este caso el operando de la izquierda tiene direccionamiento a registro mientras que el de la derecha indica una posición de memoria. Poniendo valores numéricos, supongamos que los valores actuales de los registros sean: ES = 3200h, BX = 200h, SI = 38h. Como se apuntó más arriba la dirección real de memoria será:

ES * 10h + BX + SI + 6 = 3200h * 10h + 200h + 38h + 6 = 3223Eh

Estructura de memoria de segmentación: Como se ha mencionado anteriormente, el 8086/8088 usa un esquema ingenioso llamado segmentación, para acceder correctamente a un megabyte completo de memoria, con referencias de direcciones de sólo 16 bits.

Veamos cómo funciona. Cualquier dirección tiene dos partes, cada una de las cuales es una cantidad de 16 bits. Una parte es la dirección de segmento y la otra es el offset. A su vez el offset se compone de varias partes: un desplazamiento (un número fijo), una base (almacenada en el registro base) y un índice (almacenado en el registro índice). La dirección de segmento se almacena en uno de los cuatro registros de segmento (CS, DS, ES, SS). El procesador usa estas dos cantidades de 16 bits para calcular la dirección real de 20 bits, según la siguiente fórmula:

Dirección real = 16 * (dirección del segmento) + offset

Tal como veíamos antes, dado que 16 en decimal es 10 en hexadecimal, multiplicar por ese valor es lo mismo que correr el número hexadecimal a la izquierda una posición.

Hay dos registros de segmento que tienen usos especiales: el microprocesador utiliza el registro CS (con el offset almacenado en el puntero de instrucción IP) cada vez que se debe acceder a un byte de instrucción de programa, mientras que las instrucciones que utilizan la pila (llamados a procedimientos, retornos, interrupciones y las instrucciones PUSH y POP) siempre utilizan el registro de segmento SS (con el offset almacenado en el registro puntero de pila SP). De ahí los nombres que toman: CS es el segmento de código mientras que SS es el registro segmento de pila.

Para acceder a datos en la memoria se puede utilizar cualquiera de los cuatro registros de segmento, pero uno de ellos provoca que la instrucción ocupe un byte menos de memoria: es el llamado segmento por defecto, por lo que en lo posible hay que tratar de usar dicho segmento para direccionar datos. Este segmento es el DS (registro de segmento de datos) para todos los casos excepto cuando se utiliza el registro base BP. En este caso el segmento por defecto es SS.

Si se utiliza otro registro, el ensamblador genera un byte de prefijo correspondiente al segmento antes de la instrucción: CS -> 2Eh, DS -> 3Eh, ES -> 26h y SS -> 36h. El uso de estos diferentes segmentos significa que hay áreas de trabajo separadas para el programa, pila y los datos. Cada área tiene un tamaño máximo de 64 KBytes. Dado

Page 50: Los Microprocesadores 8086 y 8088

que hay cuatro registros de segmento, uno de programa (CS), uno de pila (SS) y dos de datos (segmento de datos DS y segmento extra ES) el área de trabajo puede llegar a 4 * 64 KB = 256 KB en un momento dado suponiendo que las áreas no se superponen.

Si el programa y los datos ocupan menos de 64 KB, lo que se hace es fijar los registros de segmento al principio del programa y luego se utilizan diferentes offsets para acceder a distintas posiciones de memoria. En caso contrario necesariamente deberán cambiarse los registros de segmento en la parte del programa que lo requiera. Los registros de segmento DS, ES y SS se cargan mediante las instrucciones MOV y POP, mientras que CS se carga mediante transferencias de control (saltos, llamadas, retornos, interrupciones) intersegmento.

Estructura de interrupciones del 8086/8088

Hay tres clases de interrupción: por hardware, por software e internas (a las dos últimas también se las llama "excepciones").

Veremos primeramente el caso de interrupciones por hardware: Como se mencionó anteriormente, el 8086/8088 tiene dos entradas de petición de interrupción: NMI e INTR y una de reconocimiento (INTA). La gran mayoría de las fuentes de interrupción se conectan al pin INTR, ya que esto permite enmascarar las interrupciones (el NMI no). Para facilitar esta conexión, se utiliza el circuito integrado controlador de interrupciones, que tiene el código 8259A. Este chip tiene, entre otras cosas, ocho patas para sendas fuentes de interrupción (IRQ0 - IRQ7), ocho para el bus de datos (D0 - D7), una salida de INTR y una entrada de INTA. Esto permite una conexión directa con el 8088/8086. Al ocurrir una petición de alguna de las ocho fuentes, el 8259A activa la pata INTR. Al terminar de ejecutar la instrucción en curso, el microprocesador activa la pata INTA, lo que provoca que el 8259A envíe por el bus de datos un número de ocho bits (de 0 a 255) llamado tipo de interrupción (programable por el usuario durante la inicialización del 8259A), que el 8086/8088 utiliza para saber cuál es la fuente de interrupción. A continuación busca en la tabla de vectores de interrupción la dirección del manejador de interrupción (interrupt handler). Esto se hace de la siguiente manera. Se multiplica el tipo de interrupción por cuatro, y se toman los cuatro bytes que se encuentran a partir de esa dirección. Los dos primeros indican el offset y los dos últimos el segmento del manejador, como se muestra a continuación.

Posición memoria

00 02 04 06 08 0A 0C 0E 10 12 …… 3FC 3FE

IP CS IP CS IP CS IP CS IP CS …… IP CS

Page 51: Los Microprocesadores 8086 y 8088

Tipo de Interrupción

00 01 02 03 04 FF

Como se puede observar, la tabla ocupa el primer kilobyte de memoria (256 tipos * 4 bytes/tipo = 1024 bytes).

Una vez que se pusieron en la pila los flags, CS e IP (en ese orden), la CPU hace IF Las interrupciones por software ocurren cuando se ejecuta la instrucción INT tipo. De esta manera se pueden simular interrupciones durante la depuración de un programa. El tipo de interrupción (para poder buscar el vector en la tabla) aparece en la misma instrucción como una constante de 8 bits. Muchos sistemas operativos (programas que actúan a modo de interfaz entre los programas de los usuarios (llamados también "aplicaciones") y el hardware del sistema) utilizan esta instrucción para llamadas a servicios, lo que permite no tener que conocer la dirección absoluta del servicio, permitiendo cambios en el sistema operativo sin tener que cambiar los programas que lo ejecutan. De esta manera, una de las primeras operaciones que debe realizar dicho sistema operativo es inicializar la tabla de vectores de interrupción con los valores apropiados.

Existen algunas interrupciones predefinidas, de uso exclusivo del microprocesador, por lo que no es recomendable utilizar estos tipos de interrupción para interrupciones por hardware o software.

- Tipo 0: Ocurre cuando se divide por cero o el cociente es mayor que el valor máximo que permite el destino.

- Tipo 1: Ocurre después de ejecutar una instrucción si TF (Trap Flag) vale 1. Esto permite la ejecución de un programa paso a paso, lo que es muy útil para la depuración de programas.

- Tipo 2: Ocurre cuando se activa la pata NMI (interrupción no enmascarable).

- Tipo 3: Existe una instrucción INT que ocupa un sólo byte, que es la correspondiente a este tipo. En los programas depuradores (debuggers) (tales como Debug, CodeView, Turbo Debugger, etc.), se utiliza esta instrucción como punto de parada (para ejecutar un programa hasta una determinada dirección, fijada por el usuario del depurador, se inserta esta instrucción en la dirección correspondiente a la parada y se lanza la ejecución. Cuando el CS:IP apunte a esta dirección se ejecutará la INT 3, lo que devolverá el control del procesador al depurador). Debido a esto, si se le ordena al depurador que ejecute el programa hasta una determinada dirección en ROM (memoria de sólo lectura) (por ejemplo, para ver cómo funciona una subrutina almacenada en dicha memoria), la ejecución seguirá sin parar allí (ya que la instrucción INT 3 no se pudo escribir sobre el programa). En el 80386, con su elaborado hardware de ayuda para la depuración, se puede poner un punto de parada en ROM.

Page 52: Los Microprocesadores 8086 y 8088

- Tipo 4: Ocurre cuando se ejecuta la instrucción de interrupción condicional INTO y el flag OF (Overflow Flag) vale 1.

Los tipos 5 a 31 (1F en hexadecimal) están reservados para interrupciones internas (también llamados "excepciones") de futuros microprocesadores.

Prioridad entre diferentes fuentes de interrupción:

1) Error de división, INT n (no enmascarable), INTO.

2) NMI (no enmascarable).

3) INTR (enmascarable mediante IF).

4) Ejecución paso a paso (enmascarable mediante TF).

BIBLIOGRAFIA

Página de Internet: jrugeles[arroba]atenea.lasalle.edu.co Página de Internet: intel.com

CONTENIDO

Historia de los microprocesadores Intel

CISC RISC Características mas importantes de los microprocesadores

Intel Los microprocesadores 8086 y 8088 Historia del 8086/8088 Arquitectura de los procesadores 8088 y 8086 Unidad aritmética lógica Sistema de Control de la Unidad de Ejecución Cola de Instrucciones Registros de la unidad de interfaz con el bus Lógica de control del bus Modos de direccionamiento del 8086/8088 Estructuras de interrupciones del 8086/8088

Comentarios

El microprocesador 80286

por Dario Alejandro Alpern

Introducción

Este microprocesador apareció en febrero de 1982. Los avances de integración que permitieron agregar una gran cantidad de componentes periféricos en el interior del 80186/80188, se utilizaron en el 80286 para hacer un microprocesador que soporte nuevas capacidades, como la multitarea (ejecución simultánea de varios programas), lo que requiere que los programas no "choquen" entre sí, alterando uno los datos o las

Page 53: Los Microprocesadores 8086 y 8088

instrucciones de otros programas. El 80286 tiene dos modos de operación: modo real y modo protegido. En el modo real, se comporta igual que un 8086, mientras que en modo protegido, las cosas cambian completamente, como se explica a partir del próximo párrafo. Esto necesitó un nivel de integración mucho mayor. El 80286 contiene 134.000 transistores dentro de su estructura (360% más que el 8086). Externamente está encapsulado en formato PLCC (Plastic Leaded Chip Carrier) con pines en forma de J para montaje superficial, o en formato PGA (Pin Grid Array), en ambos casos con 68 pines.

El microprocesador 80286 ha añadido un nuevo nivel de satisfacción a la arquitectura básica del 8086, incluyendo una gestión de memoria con la extensión natural de las capacidades de direccionamiento del procesador. El 80286 tiene elaboradas facilidades incorporadas de protección de datos. Otras características incluyen todas las características del juego de instrucciones del 80186, así como la extensión del espacio direccionable a 16 MB, utilizando 24 bits para direccionar (224 = 16.777.216).

El 80286 revisa cada acceso a instrucciones o datos para comprobar si puede haber una violación de los derechos de acceso. Este microprocesador está diseñado para usar un sistema operativo con varios niveles de privilegio. En este tipo de sistemas operativos hay un núcleo que, como su nombre indica, es la parte más interna del sistema operativo. El núcleo tiene el máximo privilegio y los programas de aplicaciones el mínimo. Existen cuatro niveles de privilegio. La protección de datos en este tipo de sistemas se lleva a cabo teniendo segmentos de código (que incluye las instrucciones), datos (que incluye la pila aparte de las variables de los programas) y del sistema (que indican los derechos de acceso de los otros segmentos).

Para un usuario normal, los registros de segmentación (CS, DS, ES, SS) parecen tener los 16 bits usuales. Sin embargo, estos registros no apuntan directamente a memoria, como lo hacían en el 8086. En su lugar, apuntan a tablas especiales, llamadas tablas de descriptores, algunas de las cuales tienen que ver con el usuario y otras con el sistema operativo. Actualmente a los 16 bits, cada registro de segmento del 80286 mantiene otros 57 bits invisibles para el usuario. Ocho de estos bits sirven para mantener los derechos de acceso (sólo lectura, sólo escritura y otros), otros bits mantienen la dirección real (24 bits) del principio del segmento y otros mantienen la longitud permitida del segmento (16 bits, para tener la longitud máxima de 64 KB). Por ello, el usuario nunca sabe en qué posición real de memoria está ejecutando o dónde se ubican los datos y siempre se mantiene dentro de ciertas fronteras. Como protección adicional, nunca se permite que el usuario escriba en el segmento de código (en modo real se puede escribir sobre dicho segmento). Ello previene que el usuario modifique su programa para realizar actos ilegales y potencialmente peligrosos. Hay también provisiones para prever que el usuario introduzca en el sistema un "caballo de Troya" que pueda proporcionarle un estado de alto privilegio.

El 80286 tiene cuatro nuevos registros. Tres de ellos apuntan a las tablas de descriptores actualmente en uso. Estas tablas contienen información sobre los objetos protegidos en el sistema. Cualquier cambio de privilegio o de segmento debe realizarse a través de dichas tablas. Adicionalmente hay varios indicadores nuevos.

Existen varias instrucciones nuevas, además de las introducidas con el 80186. Todas estas instrucciones se refieren a la gestión de memoria y protección del sistema

Page 54: Los Microprocesadores 8086 y 8088

haciendo cosas tales como cargar y almacenar el contenido de los indicadores especiales y los punteros a las tablas de descriptores.

Modo protegido del 80286

Debido a la complejidad del siguiente texto, para entenderlo es necesario leerlo detenidamente. Además es necesaria una práctica de estos temas con una PC para fijar los conocimientos.

Mecanismo de direccionamiento

Como en modo real, en modo protegido se utilizan dos componentes para formar la dirección física: un selector de 16 bits se utiliza para determinar la dirección física inicial del segmento, a la cual se suma una dirección efectiva (offset) de 16 bits.

La diferencia entre los dos modos radica en el cálculo de la dirección inicial del segmento. En modo protegido el selector se utiliza para especificar un índice en una tabla definida por el sistema operativo. La tabla contiene la dirección base de 24 bits de un segmento dado. La dirección física se obtiene sumando la dirección base hallada en la tabla con el offset.

Segmentación

La segmentación es un método de manejo de memoria. La segmentación provee la base para la protección. Los segmentos se utilizan para encapsular regiones de memoria que tienen atributos comunes. Por ejemplo, todo el código de un programa dado podría estar contenido en un segmento, o una tabla del sistema operativo podría estar en un segmento. Toda la información sobre un segmento se almacena en una estructura de ocho bytes llamada descriptor. Todos los descriptores del sistema están en tablas en memoria que reconoce el hardware.

Terminología

Los siguientes términos se utilizan en la discusión de descriptores, niveles de privilegio y protección.

PL (Privilege Level): Uno de los cuatro niveles jerárquicos de privilegio. El nivel cero es el más privilegiado y el tres es el menos privilegiado. Los niveles más privilegiados son numéricamente menores que los menos privilegiados. También se llama anillo (ring).Al nivel cero se lo llama anillo privilegiado (privileged ring) mientras que los otros son los anillos no privilegiados (non-privileged ring).

RPL (Requestor Privilege Level): Es el nivel de privilegio (PL) de la tarea que generó inicialmente este selector. Se determina leyendo los dos bits menos significativos del selector.

DPL (Descriptor Privilege Level): Este es el nivel menos privilegiado para el cual una tarea puede acceder ese descriptor (y el segmento asociado con ese descriptor). El nivel de privilegio del descriptor se determina mediante los bits 6 y 5 en el byte de derechos de acceso del descriptor.

Page 55: Los Microprocesadores 8086 y 8088

CPL (Current Privilege Level): Es el nivel de privilegio en el cual una tarea está ejecutando actualmente. Este valor es igual al nivel de privilegio del segmento de código siendo ejecutado. El CPL también puede se puede determinar leyendo los dos bits menos significativos del registro CS.

EPL (Effective Privilege Level): Es el nivel menos privilegiado del RPL y DPL. Debido a que menores valores de privilegio indican mayor privilegio, el EPL es el máximo de RPL y DPL.

Tarea (task): Una instancia en la ejecución de un programa. También se lo llama proceso.

Selector: Entidad de dos bytes que apunta a un descriptor. Contiene tres campos:

Bit 15 ... 3 2 1 0

Campos Índice TI RPL

El índice selecciona uno de entre 213 = 8192 descriptores.El bit indicador de tabla (TI) especifica la tabla de descriptores a utilizar: si vale cero se utiliza la tabla de descriptores globales, mientras que si vale uno, se utiliza la tabla de descriptores locales.

Descriptor: Estructura de ocho bytes que le indica al procesador el tamaño y ubicación de un segmento, así como información de control y estado. Los descriptores son creados por compiladores, linkers, programas cargadores, o el sistema operativo, pero nunca por los programas de aplicación. Si bien el tamaño de esta estructura es siempre de ocho bytes, el formato depende de la tabla de descriptores.

Tablas de descriptores

Estas tablas definen todos los segmentos utilizados en un sistema basado en el 80286. Hay tres tipos de tablas que mantienen descriptores: la tabla de descriptores globales o GDT ( Global Descriptor Table ) , la tabla de descriptores locales o LDT ( Local Descriptor Table ) y la tabla de descriptores de interrupción o IDT ( Interrupt Descriptor Table ) . Todas las tablas son arrays de longitud variable, que pueden tener entre 8 y 65.536 bytes. Cada tabla puede mantener hasta 8192 descriptores. Los 13 bits más significativos de un selector se usan como un índice dentro de la tabla de descriptores. Las tablas tienen registros asociados que contienen la dirección base de 24 bits y el límite de 16 bits de cada tabla.

Cada una de las tablas tiene un registro asociado. Estos se llaman GDTR, LDTR, IDTR (ver las siglas en inglés que aparecen en el párrafo anterior). Las instrucciones LGDT, LLDT y LIDT cargan (Load) la base y el límite de la tabla de descriptores globales, locales o de interrupción, respectivamente, en el registro apropiado. Las instrucciones SGDT, SLDT y SIDT almacenan (Store) los valores anteriormente mencionados de los registros en memoria. Estas tablas son manipuladas por el sistema operativo, por lo que las instrucciones de carga son instrucciones privilegiadas (sólo se ejecutan si el CPL vale cero).

Tabla de descriptores globales (GDT)

Esta tabla contiene descriptores que están disponibles para todas las tareas del sistema. La GDT puede contener cualquier clase de descriptores de segmento excepto los

Page 56: Los Microprocesadores 8086 y 8088

relacionados con interrupciones. Todos los sistemas basados en el 80286 en modo protegido contienen una GDT. Generalmente la GDT contiene los segmentos de código y datos usados por el sistema operativo y los TSS (cuya explicación aparece más adelante) y los descriptores para las LDT en un sistema.La primera entrada de la GDT corresponde al selector nulo y no se usa.

Tabla de descriptores locales (LDT)

Las LDT contienen descriptores asociados con una tarea particular. Generalmente los sistemas operativos se diseñan de forma tal que cada tarea tenga su propia LDT. La LDT sólo puede contener descriptores de código, datos, pila, compuertas de tarea, y compuertas de llamada. Las LDT proveen un mecanismo para aislar los segmentos de código y datos de una tarea dada del sistema operativo y las otras tareas, mientras que la GDT contiene descriptores comunes a todas las tareas. Una tarea no puede acceder un segmento si no existe en la LDT actual o en la GDT. Esto permite el aislamiento y protección de los segmentos de una tarea, mientras que los datos comunes pueden ser compartidos por todas las tareas.

Tabla de descriptores de interrupción

La tercera tabla necesaria para sistemas 80286 que operan en modo protegido es la IDT. Esta tabla contiene los descriptores que apuntan a la ubicación de hasta 256 rutinas de servicio de interrupción (interrupt handlers). Debe conocerse cuál es el valor máximo del tipo de interrupción que se va a utilizar y poner el límite del IDTR igual a ocho veces ese valor (ya que, como se explicó anteriormente, cada descriptor ocupa ocho bytes). Cada interrupción utilizada por el sistema debe tener una entrada propia en la IDT. Las entradas de la IDT se referencian mediante instrucciones INT, vectores externos de interrupción y excepciones (interrupciones internas del microprocesador).

Registros de direcciones del sistema

Como se indicó anteriormente, existen cuatro registros del 80286 que apuntan a las tablas de descriptores.

GDTR e IDTR: Estos registros mantienen la dirección base de 24 bits y el límite de 16 bits de las tablas GDT e IDT, respectivamente. Estos segmentos, como son globales para todas las tareas en el sistema, se definen mediante direcciones físicas de 24 bits y límite de 16 bits.

LDTR y TR: Estos registros mantienen los selectores de 16 bits para el descriptor de LDT y de TSS, respectivamente. Estos segmentos, como son específicos para cada tarea, se definen mediante valores de selector almacenado en los registros de segmento del sistema. Éste apunta a un descriptor apropiado (de LDT o TSS). Nótese que un registro descriptor del segmento (invisible para el programador) está asociado con cada registro de segmento del sistema.

Descriptores

A continuación se brinda una descripción detallada de los contenidos de los descriptores utilizados en el microprocesador 80286 operando en modo protegido.

Page 57: Los Microprocesadores 8086 y 8088

Bits de atributo del descriptor

El objeto apuntado por el selector se llama descriptor. Los descriptores son cantidades de ocho bytes que contienen atributos sobre una región de memoria (es decir, un segmento). Estos atributos incluyen la dirección base de 24 bits, la longitud de 16 bits, el nivel de protección (de 0 a 3), permisos de lectura, escritura o ejecución (esto último para segmentos de código), y el tipo de segmento. A continuación se muestra el formato general de un descriptor.

Byte 0: Límite del segmento (bits 7-0). Byte 1: Límite del segmento (bits 15-8). Byte 2: Dirección base del segmento (bits 7-0). Byte 3: Dirección base del segmento (bits 15-8). Byte 4: Dirección base del segmento (bits 23-16). Byte 5: Derechos de acceso del segmento. Bytes 6 y 7: No utilizados (deben valer cero para lograr la compatibilidad con

80386 y posteriores).

El byte de derechos de acceso es el que define qué clase de descriptor es. El bit 4 (S) indica si el segmento es de código o datos (S = 1), o si es del sistema (S = 0). Veremos el primer caso.

Bit 7: Presente (P). Si P = 1 el segmento existe en memoria física, mientras que si P = 0 el segmento no está en memoria. Un intento de acceder un segmento que no está presente cargando un registro de segmento (CS, DS, ES o SS) con un selector que apunte a un descriptor que indique que el segmento no está presente generará una excepción 11 (en el caso de SS se generará una excepción 12 indicando que la pila no está presente). El manejador de la interrupción 11 deberá leer el segmento del disco rígido. Esto sirve para implementar memoria virtual.

Bits 6 y 5: Nivel de privilegio del descriptor (DPL): Atributo de privilegio del segmento utilizado en tests de privilegio.

Bit 4: Bit descriptor del segmento (S): Como se explicó más arriba, este bit vale 1 para descriptores de código y datos.

Bit 3: Ejecutable (E): Determina si el segmento es de código (E = 1), o de datos (E = 0).Si el bit 3 vale cero:

o Bit 2: Dirección de expansión (ED): Si E = 0, el segmento se expande hacia arriba, con lo que los offsets deben ser menores o iguales que el límite. Si E = 1, el segmento se expande hacia abajo, con lo que los offsets deben ser mayores que el límite. Si no ocurre esto se genera una excepción 13 (Fallo general de protección) (en el caso de la pila se genera una excepción 12).

o Bit 1: Habilitación de escritura (W): Si W = 0 no se puede escribir sobre el segmento, mientras que si W = 1 se puede realizar la escritura.

Si el bit 3 vale uno:

o Bit 2: Conforme (C): Si C = 1, el segmento de código sólo puede ser ejecutado si CPL es mayor que DPL y CPL no cambia. Los segmentos conformes sirven para rutinas del sistema operativo que no requieran protección, tales como rutinas matemáticas, por ejemplo.

Page 58: Los Microprocesadores 8086 y 8088

o Bit 1: Habilitación de lectura (R): Si R = 0, el segmento de código no se puede leer, mientras que si R = 1 sí. No se puede escribir sobre el segmento de código.

Bit 0: Accedido (A): Si A = 0 el segmento no fue accedido, mientras que si A = 1 el selector se ha cargado en un registro de segmento o utilizado por instrucciones de test de selectores. Este bit es puesto a uno por el microprocesador.

Si se lee o escribe en un segmento donde no está permitido o se intenta ejecutar en un segmento de datos se genera una excepción 13 (Violación general de protección). Si bien no se puede escribir sobre un segmento de código, éstos se pueden inicializar o modificar mediante un alias. Los alias son segmentos de datos con permiso de escritura (E = 0, W = 1) cuyo rango de direcciones coincide con el segmento de código.

Los segmentos de código cuyo bit C vale 1, pueden ejecutarse y compartirse por programas con diferentes niveles de privilegio (ver la sección sobre protección, más adelante).

A continuación se verá el formato del byte de derechos de acceso para descriptores de segmentos del sistema:

Bit 7: Presente (P): Igual que antes. Bits 6 y 5: Nivel de privilegio del descriptor (DPL): Igual que antes. Bit 4: Bit descriptor del segmento (S): Como se explicó más arriba, este bit

vale 0 para descriptores del sistema. Bits 3-0: Tipo de descriptor: En el 80286 están disponibles los siguientes:

0000: Inválido 0100: Compuerta de llamada 0001: TSS disponible 0101: Compuerta de tarea 0010: LDT 0110: Compuerta de interrupción 0011: TSS ocupado 0111: Compuerta de trampa

Los otros ocho tipos están reservados para el procesador 80386 y posteriores.

Como se pudo observar hay atributos en común entre los distintos descriptores: P, DPL y S.

Ahora se verá con más detalle los diferentes descriptores del sistema.

Descriptores de LDT (S = 0, tipo = 2): Contienen información sobre tablas de descriptores locales. Las LDT contienen una tabla de descriptores de segmentos, únicos para cada tarea. Como la instrucción para cargar el registro LDTR sólo está disponible en el nivel de privilegio 0 (nivel más privilegiado), el campo DPL es ignorado. Los descriptores de LDT sólo se permiten en la tabla de descriptores globales (GDT).

Descriptores de TSS (S = 0, tipos = 1, 3): Un descriptor de segmento de estado de la tarea (TSS: Task State Segment) contiene información sobre la ubicación, el tamaño y el nivel de privilegio de un TSS. Un TSS es un segmento especial con formato fijo que contiene toda la información sobre el estado de una tarea y un campo de enlace para permitir tareas anidadas. El campo de tipo se usa para indicar si la tarea está ocupada (tipo = 3), es decir, en una cadena de tareas

Page 59: Los Microprocesadores 8086 y 8088

activas, o si el TSS está disponible (tipo = 1). El registro de tarea (TR: Task Register) contiene el selector que apunta al TSS actual dentro de la GDT.

Descriptores de compuertas (tipos = 4 a 7): Las compuertas se utilizan para controlar el acceso a puntos de entrada dentro del segmento de código objetivo. Los distintos tipos de compuerta son: de llamada (call gate), de tarea (task gate), de interrupción (interrupt gate) y de trampa (trap gate). Las compuertas proveen un nivel de indirección entre la fuente y el destino de la transferencia de control. Esta indirección permite al procesador realizar automáticamente verificaciones de protección. También permite a los diseñadores controlar los puntos de entrada a los sistemas operativos. Las compuertas de llamada se utilizan para cambiar niveles de privilegio (ver la sección que trata sobre privilegio, más adelante), las compuertas de tarea se utilizan para hacer cambios de tarea y las de interrupción y de trampa se utilizan para especificar rutinas de servicio de interrupción.

A continuación se muestra el formato de los descriptores de compuertas, que difieren del formato general:

o Byte 0: Offset (bits 7-0). o Byte 1: Offset (bits 15-8). o Byte 2: Selector (bits 7-0). o Byte 3: Selector (bits 15-0). o Byte 4: Bits 4-0: Cantidad de palabras, bits 7-5: Cero. o Byte 5: Derechos de acceso. o Bytes 6 y 7: No usados (deben valer cero para lograr la compatibilidad

con los procesadores 80386 y posteriores).

Las compuertas de llamado se utilizan para transferir el control del programa a un nivel más privilegiado. El descriptor correspondiente consiste en tres campos: el byte de derechos de acceso, un puntero largo (selector y offset) y una cantidad de palabras que especifica cuántos parámetros deben copiarse de la pila de la rutina llamadora a la pila de la rutina llamada. Este campo sólo es utilizado por las compuertas de llamada cuando hay un cambio de nivel de privilegio (PL). Los otros tipos de compuertas ignoran el campo de cantidad de palabras.

Las compuertas de interrupción y de trampa utilizan los campos de selector y offset como un puntero al inicio de la rutina que maneja la interrupción o trampa. La diferencia entre ambos tipos de compuertas es que la de interrupción deshabilita las interrupciones (IF <- 0), mientras que la de trampa no altera IF.

Las compuertas de tarea se usan para cambiar tareas. Las compuertas de tarea sólo se pueden referir a un TSS y por lo tanto sólo se utiliza el campo del selector, siendo ignorado el de offset.

Se genera una excepción 13 (Violación general de protección) si un selector no se refiere a un tipo de descriptor correcto (un segmento de código para una compuerta de interrupción, trampa o llamada y un segmento de estado de tarea para la compuerta de tarea).

Caché del descriptor del segmento

Page 60: Los Microprocesadores 8086 y 8088

Aparte del valor del selector, cada registro de segmento tiene un registro caché de descriptor del segmento invisible para el programador. Al cargar un registro de segmento con un nuevo selector, el descriptor de ocho bytes asociado con ese selector se carga automáticamente en el chip. Una vez que se hizo esto, todas las referencias a ese segmento utilizan la información almacenada en el caché en vez de volver a acceder el descriptor. Como los cachés de los descriptores sólo varían cuando se carga un registro de segmento, los programas que deben modificar las tablas de descriptores deben volver a cargar los registros de segmento apropiados después de cambiar el valor de un descriptor.

Contenido de los cachés descriptores de segmento: El contenido varía dependiendo del modo en que opera el 80286. En modo protegido, como se explicó más arriba, los cachés se cargan con la información de los descriptores. En modo real, el contenido no se obtiene de la memoria, sino que toma unos valores fijos para lograr compatibilidad con el 8086. La base generada es 16 veces el valor del selector, el límite siempre es FFFFh, el bit P (presente) vale 1, el nivel de privilegio es cero (máximo privilegio), el bit de dirección de expansión indica que los offsets deben ser menores o iguales que el límite y están habilitados los permisos de lectura, escritura y ejecución. Todo esto hace que en modo real no se pueda acceder a los 16 MB de capacidad de direccionamiento del 80286, ya que el valor máximo ocurre cuando el selector vale FFFFh y el offset también, con lo que se logra una dirección máxima de FFFF0h + FFFFh = 10FFEFh (casi 1088 KB).

Protección

El 80286 tiene cuatro niveles de protección que están optimizados para soportar las necesidades de los sistemas operativos multitarea para aislar y proteger los programas de un usuario de otros y del sistema operativo. Los niveles de privilegio controlan el uso de instrucciones privilegiadas, instrucciones de entrada/salida, y el acceso a segmentos y descriptores de segmento. A diferencia de los sistemas tradicionales basados en microprocesadores donde esta protección sólo se logra a través de un hardware externo muy complejo con el correspondiente software, el 80286 provee esta protección como parte de la unidad de manejo de memoria (MMU: Memory Management Unit) incorporada.

El sistema de privilegio jerárquico de cuatro niveles es una extensión de los modos usuario/supervisor que se encuentran comúnmente en minicomputadoras. Los niveles de privilegio (PL: Privilege Level) se numeran de 0 a 3, siendo el 0 el nivel más privilegiado (más confiable).

Ejemplo de los niveles jerárquicos:

PL = 0: Kernel (parte del sistema operativo). PL = 1: Servicios del sistema (parte del SO). PL = 2: Extensiones del sistema operativo. PL = 3: Aplicaciones.

Reglas de privilegio

Page 61: Los Microprocesadores 8086 y 8088

El 80286 controla el acceso a los datos y procedimientos (o subrutinas) entre niveles de una tarea, de acuerdo a las siguientes reglas:

Los datos almacenados en un segmento con nivel de privilegio P pueden ser accedidos solamente por código que se ejecuta a un nivel de privilegio por lo menos tan privilegiado como P.

Un segmento de código/procedimiento con nivel de privilegio P sólo puede ser llamado por una tarea que se ejecuta al mismo o menor privilegio que P.

Privilegio de una tarea

En un momento determinado, una tarea en el 80286 se ejecuta en uno de los cuatro niveles de privilegio. Esto está especificado por el nivel de privilegio actual ( CPL ) . El CPL de una tarea sólo puede cambiarse mediante transferencias de control utilizando los descriptores de compuerta a un segmento de código con un nivel de privilegio diferente. Por ejemplo, un programa de aplicación corriendo con PL = 3 puede llamar una rutina del sistema operativo con PL = 1 (mediante una compuerta) que causaría que CPL = 1 hasta que finalice la rutina del sistema operativo.

Nivel de privilegio del selector (RPL)

El nivel de privilegio de un selector se especifica en el campo RPL. El RPL está formado por los dos bits menos significativos del selector. Se utiliza para que un nivel de privilegio menos confiable que el nivel de privilegio actual (CPL) pueda utilizar dicho selector. Este nivel se llama nivel de privilegio efectivo (EPL) de la tarea, que se define como el nivel menos privilegiado (numéricamente mayor) del CPL de la tarea y el RPL del selector. Así, si RPL = 0, entonces CPL siempre especifica el nivel de privilegio para realizar un acceso usando el selector, mientras que si RPL = 3, entonces el selector sólo puede acceder segmentos de nivel 3 independientemente del valor de CPL de la tarea. El RPL se utiliza generalmente para verificar que los punteros pasados a un procedimiento del sistema operativo no accede datos que son de mayor privilegio que el procedimiento que originó el puntero. Como dicho procedimiento puede especificar cualquier valor de RPL, la instrucción de ajuste de RPL (ARPL) se utiliza para forzar los bits de RPL a que sean iguales al CPL de la rutina que generó el selector.

Privilegio de entrada/salida

El nivel de privilegio de entrada/salida (IOPL, que ocupa los bits 13 y 12 del registro de indicadores) define el nivel menos privilegiado para el cual se pueden realizar instrucciones de I/O (IN, OUT, INS, OUTS, REP INS, REP OUTS). Si CPL > IOPL, al ejecutar alguna de estas instrucciones se generará una excepción 13. IOPL también afecta otras instrucciones, como STI, CLI y el prefijo LOCK. Además afecta si IF (indicador de interrupciones) puede cambiarse cargando un valor en el registro de indicadores (mediante POPF). Si CPL es menor o igual que IOPL, entonces IF se puede cambiar. Si CPL > IOPL el valor de IF no varía mediante la ejecución de la instrucción POPF (en este caso no se genera ninguna excepción).

Validación de privilegio

El 80286 provee algunas instrucciones para acelerar la verificación de punteros y mantener la integridad del sistema comprobando que el valor del selector se refiera a un

Page 62: Los Microprocesadores 8086 y 8088

segmento apropiado.La verificación de punteros previene el problema común de una aplicación con PL = 3 que llama a un rutina del sistema operativo con PL = 0 pasándole un puntero "erróneo" que corrompe una estructura de datos que pertenece al sistema operativo. Si éste utilizara la instrucción ARPL para asegurar que el RPL del selector no tiene mayor privilegio que la rutina llamadora, este problema podría evitarse.

Las instrucciones para verificar punteros son ARPL, VERR, VERW, LSL y LAR. Todas estas instrucciones ponen el indicador de cero a uno si la verificación se pudo realizar; si no se puede realizar pone ZF <- 0, en vez de generar una excepción 13 como hace con otras instrucciones.

Acceso a descriptores

Básicamente hay dos tipos de accesos de segmentos: aquéllos que se refieren a los segmentos de código como las transferencias de control, y aquéllos que se refieren a segmentos de datos. Para determinar si una tarea puede acceder un segmento se necesita conocer el tipo de segmento a acceder, las instrucciones utilizadas, el tipo de descriptor utilizado y los CPL, RPL y DPL, como se describió más arriba.Cada vez que una instrucción carga los registros de segmentos de datos (DS, ES), el 80286 hace validaciones de protección. Los selectores almacenados en esos registros sólo pueden referirse a segmentos de datos o segmentos de código con habilitación de lectura. Las reglas de accesos de datos se especificaron anteriormente. La única excepción a estas reglas la constituye el segmento de código legible con el bit C = 1 de los derechos de acceso que se puede acceder desde cualquier nivel.Finalmente se realizan las verificaciones de privilegio. El CPL se compara con EPL y si EPL es más privilegiado que CPL se genera una excepción 13 (Violación general de protección).Las reglas para el segmento de pila son ligeramente diferentes que aquéllos referidos a los segmentos de datos. Las instrucciones que cargan los selectores en SS deben referirse a descriptores de segmentos de datos con habilitación de escritura (ya que la pila debe poder ser leída y escrita). El DPL y RPL deben ser iguales al CPL. Cualquier otro tipo de descriptor o una violación de privilegio causará una excepción 13. Si el segmento de pila está marcado como no presente (P = 0) se genera una excepción 12. La excepción 11 ocurre en el caso de segmentos de código o datos no presentes.

Transferencias de nivel de privilegio

Las transferencias de control intersegmento ocurren cuando se carga un selector en el registro CS. Para un sistema típico la mayoría de esas transferencias ocurren simplemente como resultado de una llamada o un salto a otra rutina. Hay cinco tipos de control de transferencia que se resumen a continuación. Varias de estas transferencias resultan en un cambio de nivel de privilegio. El cambio de niveles de privilegio sólo se puede efectuar mediante compuertas y cambios de tarea.

Los tipos de descriptores que se usan para transferencia de control son los siguientes:

Tipos de transferenciade control

Operaciones quela generan

Descriptor que se referencia

Tabla de descriptores

Page 63: Los Microprocesadores 8086 y 8088

que se utiliza pararealizar la

transferencia

Transferencia de control intersegmento dentro del mismo nivel de privilegio

JMPCALLRET

IRET (sólo si el flag NT vale 0)

Segmento de código

GDTLDT

Transferencia de control intersegmento al mismo o mayor nivel de privilegio

CALL Compuerta de

llamada GDTLDT

Transferencia de control intersegmento al mismo o mayor nivel de privilegio

INTexcepción

interrupción externa

Compuerta de interrupción o

trampa

Tabla de descriptores de

interrupción

Transferencia de control intersegmento al mismo o menor nivel de privilegio

RETIRET (sólo si el flag NT vale 0)

Segmento de código

GDTLDT

Cambio de tarea a través del segmento de estado de tarea

CALLJMP

Segmento de estado de la tarea

Tabla de descriptores

globales

Cambio de tarea a través de una compuerta de tarea

CALLJMP

Compuerta de tarea

GDTLDT

Cambio de tarea a través de una compuerta de tarea

IRET (sólo si el flag NT vale 1)

Compuerta de tarea

Tabla de descriptores de

interrupción

Las transferencias de control sólo pueden ocurrir si la operación que cargó el selector se refiere al tipo correcto de descriptor. Cualquier violación de estas reglas causará una excepción 13 (por ejemplo, un salto a través de una compuerta de llamado, o un IRET desde una subrutina de interrupción).

Para que el sistema sea aún más seguro, todas las transferencias de control también se sujetan a las reglas de privilegio, que indican lo siguiente:

Las transiciones de nivel de privilegio sólo ocurren a través de las compuertas. Los saltos (JMP) pueden realizarse a segmento de código no conformes con el

mismo nivel de privilegio o a segmento de código conformes con mayor o igual privilegio.

Las llamadas (CALL) pueden realizarse a segmentos de código no conformes con el mismo nivel de privilegio o a través de una compuerta a un nivel más privilegiado.

Las interrupciones que se manejan dentro de una tarea se manejan de la misma manera que las llamadas CALL.

Los segmentos de código conformes son accesibles por niveles de privilegio que tienen el mismo o menor privilegio que el DPL (Descriptor Privilege Level) de ese segmento de código.

Page 64: Los Microprocesadores 8086 y 8088

El RPL (Requested Privilege Level) en el selector que apunta a una compuerta y el CPL (Current Privilege Level) de la tarea deben tener igual o mayor privilegio que el DPL (Descriptor Privilege Level) de la compuerta.

El segmento de código seleccionado en la compuerta debe tener el mismo o mayor privilegio que el CPL (Current Privilege Level) de la tarea.

Las instrucciones de retorno que no cambian tareas sólo pueden retornar el control a un segmento de código con el mismo o menor privilegio.

Los cambios de tarea se realizan mediante instrucciones CALL, JMP o INT que referencian a una compuerta de tarea o un segmento de estado de tarea cuyo DPL (Descriptor Privilege Level) tiene el mismo o menos privilegio que el CPL (Current Privilege Level) de la vieja tarea.

Todas las transferencias de control que cambian CPL dentro de la misma tarea causan un cambio de pilas como resultado del cambio de privilegio. Los valores iniciales de SS:SP para los niveles de privilegio 0, 1 y 2 se almacenan en el segmento de estado de tarea (ver más abajo el formato de dicho segmento). Durante la ejecución de JMP o CALL, el nuevo puntero de pila se carga en los registros SS y SP y el puntero previo se pone en la nueva pila.

Al retornar al nivel de privilegio original, el uso de la pila menos privilegiada se restaura como parte de la ejecución de la instrucción RET o la IRET. Para subrutinas que pasan parámetros en la pila y cruzan niveles de privilegio, se copia un número fijo de palabras (especificado en el campo de cuenta de palabras de la compuerta) de la pila previa a la actual. La instrucción RET intersegmento con un valor de ajuste del puntero de pila ajusta correctamente el SP al efectuar el retorno.

Compuertas de llamado: Estas compuertas proveen llamadas (CALL) indirectas, en forma protegida. Uno de los usos más importantes de las compuertas es poder tener un método seguro de transferencias de privilegio dentro de una tarea. Como el sistema operativo define todas las compuertas en el sistema, puede asegurar que todas las compuertas permiten el acceso sólo a los procedimientos confiables (como aquéllos que realizan manejo de memoria u operaciones de entrada/salida). Un intento de acceso a otro lugar causará una excepción 13 (Violación general de protección).

Los descriptores de compuertas siguen las mismas reglas de privilegio que los datos, esto es, una tarea puede acceder una compuerta sólo si el EPL (Effective Privilege Level) es igual o más privilegiado que el DPL (Descriptor Privilege Level). Las compuertas siguen las reglas de privilegio de las transferencias de control y por lo tanto sólo pueden transferir el control a un nivel más privilegiado.

Las compuertas de llamada se acceden mediante una instrucción CALL y son sintácticamente idénticas a la llamada a una subrutina normal. Cuando se activa una llamada que cambia el nivel de privilegio, suceden las siguientes acciones:

1) Cargar CS:IP de la compuerta y verificar la validez.2) Poner el viejo SS en la nueva pila.3) Poner el viejo SP en la nueva pila.4) Copiar la cantidad de parámetros de 16 bits como se indica en el campo de cuenta de palabras de la compuerta de la vieja a la nueva pila.5) Poner la dirección de retorno en la pila.

Page 65: Los Microprocesadores 8086 y 8088

Las compuertas de interrupción y de trampa trabajan de la misma forma que las compuertas de llamada, excepto que no hay copia de parámetros. La única diferencia entre las compuertas de interrupción y de trampa es que las primeras deshabilitan las interrupciones (IF <- 0), mientras que las otras no alteran el indicador de interrupciones IF.

Cambio de tareas

Un atributo muy importante de cualquier sistema operativo multitarea/multiusuario es su habilidad para cambiar rápidamente entre tareas o procesos. El 80286 soporta esta operación incluyendo una instrucción de cambio de tarea en el hardware. Dicha instrucción salva el estado entero de la máquina (todos los registros, espacio de direcciones y un puntero a la tarea anterior), carga un nuevo estado de ejecución, realiza verificaciones de protección y comienza la ejecución en menos de 20 microsegundos. Al igual que la transferencia de control por compuertas, la operación de cambio de tareas se invoca ejecutando una instrucción JMP o CALL intersegmento que se refiere a un segmento de estado de la tarea (TSS) o un descriptor de compuerta de tarea en el GDT (Global Descriptor Table) o en el LDT (Local Descriptor Table). Una instrucción INT n, una excepción, trampa o interrupción externa puede también invocar la operación de cambio de tarea si hay un descriptor de compuerta de tarea en la entrada correspondiente de la IDT (Interrupt Descriptor Table).

Segmento de estado de la tarea

El descriptor TSS apunta a un segmento que contiene el estado de la ejecución de 80286 mientras que un descriptor de compuerta de tarea contiene un selector de TSS.El límite (cantidad de bytes que ocupa) del segmento debe ser mayor o igual a 2Ch = 44 bytes. Si es mayor, en el espacio adicional del segmento TSS, el sistema operativo puede almacenar información adicional acerca de las razones por la que la tarea está inactiva, el tiempo que la tarea estuvo corriendo, los archivos abiertos que pertenecen a esa tarea, etc.

El formato del TSS es como sigue:

00: Puntero selector del TSS02: SP para CPL = 004: SS para CPL = 006: SP para CPL = 108: SS para CPL = 10A: SP para CPL = 20C: SS para CPL = 20E: IP (Punto de entrada)10: Flags12: Registro AX14: Registro CX16: Registro DX18: Registro BX1A: Registro SP1C: Registro BP1E: Registro SI

Page 66: Los Microprocesadores 8086 y 8088

20: Registro DI22: Selector ES24: Selector CS26: Selector SS28: Selector DS2A: Selector LDT de la tarea2C: Disponible

Cada tarea debe tener un TSS asociado. El TSS actual se identifica mediante un registro especial en el 80286 llamado TR (Task State Segment Register). Este registro contiene un selector que se refiere al descriptor de TSS de la tarea. Un registro de base y límite del segmento (invisible para el programador) asociado con TR se carga cada vez que TR se carga con un nuevo selector. El retorno de una tarea se realiza mediante la instrucción IRET. Cuando se ejecuta IRET, el control retorna a la tarea que había sido interrumpida. El estado de la tarea que se está ejecutando se almacena en el TSS y el estado de la vieja tarea se restaura de su propio TSS. Algunos bits en el registro de indicadores y la palabra de estado de la máquina (MSW) dan información sobre el estado de una tarea que son útiles para el sistema operativo. El bit 14 del registro de indicadores (NT = Nested Task) controla la función de la instrucción IRET. Si NT = 0, dicha instrucción realiza un retorno normal, pero si NT = 1, IRET realiza una operación de cambio de tarea para volver a ejecutar la tarea anterior. El bit NT se pone a cero o uno de la siguiente manera: cuando una instrucción CALL o INT inicia un cambio de tarea, el nuevo TSS se marca como ocupado y el puntero del nuevo TSS se carga con el selector del viejo TSS. El bit NT de la nueva tarea se pone entonces a 1. Una interrupción que no causa un cambio de tareas pondrá a cero el bit NT (el bit NT será restaurado a su valor anterior luego de la ejecución del manejador de interrupciones). El bit NT también puede ser afectado por las instrucciones POPF o IRET.

El segmento de estado de la tarea (TSS) se marca como ocupado cambiando el campo de tipo de descriptor de tipo 1 a tipo 3. El uso de un selector que referencia un TSS ocupado resultará en una excepción 13 (Violación general de protección).

El estado del coprocesador no se salva automáticamente cuando ocurre un cambio de tareas, porque la nueva tarea puede no utilizar instrucciones del coprocesador. El bit 3 del MSW llamado TS (Task Switched) ayuda en esta situación. Cuando el microprocesador realiza un cambio de tarea, pone a uno el flag TS. El 80286 detecta el primer uso de una instrucción de coprocesador después del cambio de tarea y provoca una excepción 7 (Coprocesador inexistente). El manejador de la excepción puede entonces decidir si debe salvar el estado del coprocesador. Dicha excepción ocurre cuando se trata de ejecutar una instrucción ESC o WAIT (es decir, alguna referida al coprocesador) y los bits Task Switched y Monitor coprocessor extension están ambos a uno (es decir, TS = MP = 1).

Inicialización y transición a modo protegido

Como el 80286 comienza la ejecución (después de activar el pin RESET) en modo real, es necesario inicializar las tablas del sistema y los registros con los valores apropiados. Los registros GDTR e IDTR deben referirse a tablas de descriptores globales y de interrupción (respectivamente) que sean válidas.

Page 67: Los Microprocesadores 8086 y 8088

Para entrar en modo protegido debe ponerse el bit PE (bit 0 de MSW) a 1 utilizando la instrucción LMSW. Después de entrar en modo protegido, la siguiente instrucción deberá ser un JMP intersegmento para cargar el registro CS y liberar la cola de instrucciones. El paso final es cargar todos los registros de segmentos de datos con los valores iniciales de los selectores.

Una forma alternativa de entrar en modo protegido que es especialmente apropiada en sistemas operativos multitarea consiste en realizar un cambio de tarea para cargar todos los registros. En este caso la GDT contendría dos descriptores de TSS además de los descriptores de código y datos necesarios para la primera tarea. La primera instrucción JMP en modo protegido saltaría al TSS causando un cambio de tarea y cargando todos los registros con los valores almacenados en el TSS. El registro TR (Task State Segment Register) deberá apuntar un descriptor de TSS válido ya que un cambio de tarea almacena el estado de la tarea actual en el TSS apuntado por TR.

Nuevas instrucciones del 80286

Aparte de las instrucciones del 8086/8088 y las nuevas del 80186, el 80286 posee nuevas instrucciones. Éstas corresponden todas al modo protegido y son las siguientes:

ARPL dest, src (Adjust Requested Privilege Level of selector): Compara los bits RPL de dest contra src. Si el RPL de dest es menor que el RPL de src, los bits RPL del destino se cargan con los bits RPL de src y el indicador ZF se pone a uno. En caso contrario ZF se pone a cero. Ver nota 1.

CLTS (Clear Task Switched Flag): Pone a cero el indicador TS (bit 3 de la palabra de control de la máquina MSW). Ver nota 2.

LAR dest, src (Load Access Rights): El byte más alto del registro destino se carga con el byte de derechos de acceso del segmento indicado por el selector almacenado en src. Pone ZF a uno si se puede realizar la carga. Ver notas 1 y 3.

LGDT mem64 (Load Global Table register): Carga el valor del operando en el registro GDTR. Antes de ejecutar esta instrucción la tabla debe estar en memoria. Ver nota 2.

LIDT mem64 (Load Interrupt Table register): Carga el valor del operando en el registro IDTR. Antes de ejecutar esta instrucción la tabla debe estar en memoria. Ver nota 2.

LLDT {reg16|mem16} (Load Local Descriptor Table Register): Carga el selector indicado por el operando en el registro LDTR. Antes de ejecutar esta instrucción la tabla deberá estar en memoria. Ver notas 1 y 2.

LMSW {reg16|mem16} (Load Machine Status Word): Carga el valor del operando en la palabra de estado de la máquina MSW. El bit PE (bit 0) no puede ser puesto a cero por esta instrucción, por lo que una vez que se cambió a modo protegido, la única manera de volver a modo real es mediante un RESET del microprocesador. Ver nota 2.

LSL dest, src (Load Segment Limit): Carga el límite del segmento de un selector especificado en src en el registro destino si el selector es válido y visible en el nivel de

Page 68: Los Microprocesadores 8086 y 8088

privilegio actual. Si ocurre lo anterior el indicador ZF se pone a uno, en caso contrario, se pone a cero. Ver notas 1 y 3.

LTR {reg16|mem16} (Load Task Register): Carga el selector indicado por el operando en el registro TR. El TSS ( Task State Segment ) apuntado por el nuevo TR deberá ser válido. Ver notas 1 y 2.

SGDT mem64 (Store Global Descriptor Table register): Almacena el contenido del registro GDTR en el operando especificado.

SIDT mem64 (Store Interrupt Descriptor Table register): Almacena el contenido del registro IDTR en el operando especificado.

SLDT {reg16|mem16} (Store Global Descriptor Table register): Almacena el contenido del registro LDTR (que es un selector a la tabla de descriptores globales) en el operando especificado. Ver nota 1.

SMSW {reg16|mem16} (Store Machine Status Word): Almacena la palabra de estado de la máquina MSW en el operando especificado. Ver nota 2.

STR {reg16|mem16} (Store Task Register): Almacena el registro de tarea actual (selector a la tabla de descriptores globales) en el operando especificado. Ver nota 1.

VERR/VERW {reg16|mem16} (Verify Read/Write): Verifica si el selector de segmento especificado en el operando es válido y se puede leer/escribir en el nivel de privilegio actual. En este caso se pone ZF a uno, en caso contrario se pone ZF a cero. Ver notas 1 y 3.

Notas:

1) Si se ejecuta en modo real ocurre una excepción 6 (Código de operación inválido).

2) Si se ejecuta en modo protegido en alguno de los anillos 1-3 ocurre una excepción 13 (Violación general de protección).

3) Cualquier violación de privilegio del selector indicado en el operando no causa una excepción 13, en vez

Intel 80286

De Wikipedia, la enciclopedia libre

(Redirigido desde 80286)Saltar a navegación, búsqueda

286CPU

Page 70: Los Microprocesadores 8086 y 8088

Harris 80286 a 16 MHz.

Siemens 80286 a 10 MHz.

El Intel 80286 (llamado oficialmente iAPX 286, también conocido como i286 o 286) es un microprocesador de 16 bits de la familia x86, que fue lanzado al mercado por Intel el 1 de febrero de 1982. Cuenta con 134.000 transistores. Las versiones iniciales del i286 funcionaban a 6 y 8 MHz, pero acabó alcanzando una velocidad de hasta 25 MHz. Fue el microprocesador elegido para equipar al IBM Personal Computer/AT, lo que causó que fuera el más empleado en los compatibles PC (más propiamente compatibles AT) entre mediados y finales de los años 80 .

Tras las versiones iniciales a 6 y 8 MHz, Intel lanzó un modelo a 12,5 MHz. AMD y Harris ampliaron esa velocidad a 20 MHz y 25 MHz, respectivamente. En promedio, el 80286 tenía una velocidad de unas 0,21 instrucciones por ciclo de reloj.1 El modelo de 6 MHz operaba a 0,9 MIPS, el de 10 MHz a 1,5 MIPS, y el de 12 MHz a 2,66 MIPS.2

El rendimiento del 80286 es más del doble que el de sus predecesores (los Intel 8086 e Intel 8088) por ciclo de reloj. De hecho, el aumento de rendimiento por ciclo de reloj puede ser el mayor entre las diferentes generaciones de procesadores x86. El cálculo de los modos de direccionamiento más complejos (como base + índice) utilizaban menos ciclos de reloj porque eran realizados por un circuito especial en el 286; el 8086, ha de realizar el cálculo de la dirección efectiva en la ULA general, lo que consume muchos ciclos. Además, operaciones matemáticas complejas (como MUL/DIV) ocupan menos ciclos que en el 8086.

Page 71: Los Microprocesadores 8086 y 8088

Al tener un bus de direcciones de 24 bits, es capaz de direccionar hasta 16 MB (16 MiB) de memoria RAM, mientras que el 8086 sólo puede 1 MB. Aunque MS-DOS puede utilizar la RAM adicional ( memoria extendida ) mediante una llamada a la BIOS INT 15h, AH=87h), como disco RAM o mediante emulación de memoria expandida previamente habilitada mediante software la memoria extendida, pocos ordenadores basados en el i286 tuvieron más de 1 MB de memoria.

El i286 fue diseñado para ejecutar aplicaciones multitarea, incluyendo comunicaciones (como PBX automatizadas), control de procesos en tiempo real y sistemas multiusuario. Para ello se le añadió un modo protegido, en el cual existían cuatro anillos de ejecución y división de memoria mediante tablas de segmentos. En este modo trabajaban las versiones de 16 bits del sistema operativo OS/2. En este modo protegido se permitía el uso de toda la memoria directamente, y que además ofrecía protección entre aplicaciones para evitar la escritura de datos accidental (o malintencionada) fuera de la zona de memoria asignada. Sin embargo, una vez que el procesador entraba en el modo protegido, no podía volver al modo real sin resetear el procesador. El microcontrolador Intel 8042, utilizado para controlar el teclado en los AT, tiene una función que resetea sólo la CPU (la famosa combinación CTRL - ALT - DEL).

A pesar de su gran popularidad, hoy en día quedan pocos ordenadores con el i286 funcionando.

El sucesor del i286 fue el Intel 80386, de 32 bits.

Cap tulo III: Microprocesadores 8086/88, 286, 386, 486 y Pentium.�

3.1. - CARACTER STICAS GENERALES.�

     Los microprocesadores Intel 8086 y 8088 se desarrollan a partir de un procesador anterior, el 8080, que, en sus diversas encarnaciones -incluyendo el Zilog Z-80- ha sido la CPU de 8 bits de mayor xito.�

     Poseen una arquitectura interna de 16 bits y pueden trabajar con operandos de 8 y 16 bits; una capacidad de direccionamiento de 20 bits (hasta 1 Mb) y comparten el mismo juego de instrucciones.

     La filosof a de dise o de la familia del 8086 se basa en la compatibilidad y la � �creaci n de sistemas inform ticos integrados, por lo que disponen de diversos � �coprocesadores como el 8089 de E/S y el 8087, coprocesador matem tico de coma �flotante. De acuerdo a esta filosof a y para permitir la compatibilidad con los �anteriores sistemas de 8 bits, el 8088 se dise con un bus de datos de 8 bits, lo cual ��le hace m s lento que su hermano el 8086, pues ste es capaz de cargar una palabra � �ubicada en una direcci n par en un solo ciclo de memoria mientras el 8088 debe �realizar dos ciclos leyendo cada vez un byte.

Page 72: Los Microprocesadores 8086 y 8088

     Disponen de 92 tipos de instrucciones, que pueden ejecutar con hasta 7 modos de direccionamiento. Tienen una capacidad de direccionamiento en puertos de entrada y salida de hasta 64K (65536 puertos), por lo que las m quinas construidas entorno a �estos microprocesadores no suelen emplear la entrada/salida por mapa de memoria, como veremos.

     Entre esas instrucciones, las m s r pidas se ejecutan en 2 ciclos te ricos de reloj � � �y unos 9 reales (se trata del movimiento de datos entre registros internos) y las m s �lentas en 206 (divisi n entera con signo del acumulador por una palabra extra da de � �la memoria). Las frecuencias internas de reloj t picas son 4.77 MHz en la versi n � �8086; 8 MHz en la versi n 8086-2 y 10 MHz en la 8086-1. Recu rdese que un MHz � �son un mill n de ciclos de reloj, por lo que un PC � est ndar� a 4,77 MHz puede ejecutar de 20.000 a unos 0,5 millones de instrucciones por segundo, seg n la �complejidad de las mismas (un 486 a 50 MHz, incluso sin memoria cach externa es �capaz de ejecutar entre 1,8 y 30 millones de estas instrucciones por segundo).

     El microprocesador Intel 80286 se caracteriza por poseer dos modos de funcionamiento completamente diferenciados: el modo real en el que se encuentra nada m s ser conectado a la corriente y el � modo protegido en el que adquiere capacidad de proceso multitarea y almacenamiento en memoria virtual. El proceso multitarea consiste en realizar varios procesos de manera aparentemente simult nea, con la ayuda del �sistema operativo para conmutar autom ticamente de uno a otro optimizando el uso de� la CPU, ya que mientras un proceso est esperando a que un perif rico complete una � �operaci n, se puede atender otro proceso diferente. La memoria virtual permite al �ordenador usar m s memoria de la que realmente tiene, almacenando parte de ella en �disco: de esta manera, los programas creen tener a su disposici n m s memoria de la � �que realmente existe; cuando acceden a una parte de la memoria l gica que no existe �f sicamente, se produce una interrupci n y el sistema operativo se encarga de � �acceder al disco y traerla.

     Cuando la CPU est en modo protegido, los programas de usuario tienen un acceso �limitado al juego de instrucciones; s lo el proceso � supervisor -normalmente el sistema operativo- est capacitado para realizar ciertas tareas. Esto es as para evitar que los � �programas de usuario puedan campar a sus anchas y entrar en conflictos unos con otros, en materia de recursos como memoria o perif ricos. Adem s, de esta manera, aunque� � un error software provoque el cuelgue de un proceso, los dem s pueden seguir �funcionando normalmente, y el sistema operativo podr a abortar el proceso � colgado. Por desgracia, con el DOS el 286 no est en modo protegido y el cuelgue de un solo �proceso -bien el programa principal o una rutina operada por interrupciones- significa la ca da inmediata de todo el sistema.�

     El 8086 no posee ning n mecanismo para apoyar la multitarea ni la memoria virtual� desde el procesador, por lo que es dif cil dise ar un sistema multitarea para el mismo� � y casi imposible conseguir que sea realmente operativo. Obviamente, el 286 en modo protegido pierde absolutamente toda la compatibilidad con los procesadores anteriores. Por ello, en este libro s lo trataremos el modo real, nico disponible bajo DOS, � �aunque veremos alguna instrucci n extra que tambi n se puede emplear en modo � �real.

     Las caracter sticas generales del 286 son: tiene un bus de datos de 16 bits, un bus �

Page 73: Los Microprocesadores 8086 y 8088

de direcciones de 24 bits (16 Mb); posee 25 instrucciones m s que el 8086 y admite 8 �modos de direccionamiento. En modo virtual permite direccionar hasta 1 Gigabyte. Las frecuencias de trabajo t picas son de 12 y 16 MHz, aunque existen versiones a 20 y 25� MHz. Aqu , la instrucci n m s lenta es la misma que en el caso del 8086, solo que � � �emplea 29 ciclos de reloj en lugar de 206. Un 286 de categor a media (16 MHz) �podr a ejecutar m s de medio mill n de instrucciones de estas en un segundo, casi � � �15 veces m s que un 8086 medio a 8 MHz. Sin embargo, transfiriendo datos entre �registros la diferencia de un procesador a otro se reduce notablemente, aunque el 286 es m s r pido y no s lo gracias a los MHz adicionales.� � �

     Versiones mejoradas de los Intel 8086 y 8088 se encuentran tambi n en los �procesadores NEC-V30 y NEC-V20 respectivamente. Ambos son compatibles Hardware y Software, con la ventaja de que el procesado de instrucciones est �optimizado, llegando a superar casi en tres veces la velocidad de los originales en algunas instrucciones aritm ticas. Tambi n poseen una cola de preb squeda mayor � � �(cuando el microprocesador est ejecutando una instrucci n, si no hace uso de los � �buses externos, carga en una cola FIFO de unos pocos bytes las posiciones posteriores a la que est procesando, de esta forma una vez que concluye la instrucci n en curso ya� � tiene internamente la que le sigue). Adem s, los NEC V20 y V30 disponen de las �mismas instrucciones adicionales del 286 en modo real, al igual que el 80186 y el 80188.

     Por su parte, el 386 dispone de una arquitectura de registros de 32 bits, con un bus de direcciones tambi n de 32 bits (direcciona hasta 4 Gigabytes = 4096 Mb) y m s � �modos posibles de funcionamiento: el modo real (compatible 8086), el modo protegido (relativamente compatible con el del 286), un modo protegido propio que permite -

por fin!- romper la barrera de los tradicionales segmentos y el modo «virtual 86», en �el que puede emular el funcionamiento simult neo de varios 8086. Una vez m s, � �todos los modos son incompatibles entre s y requieren de un sistema operativo �espec fico: si se puede perdonar al fabricante la p rdida de compatibilidad del modo � �avanzados del 286 frente al 8086, debido a la l gica evoluci n tecnol gica, no se � � �puede decir lo mismo del 386 respecto al 286: no hubiera sido necesario a adir un �nuevo modo protegido si hubiera sido mejor construido el del 286 apenas un par de a os atr s. Normalmente, los 386 suelen operar en modo real (debido al DOS) por lo � �que no se aprovechan las posibilidades multitarea ni de gesti n de memoria. Por otra �parte, aunque se pueden emplear los registros de 32 bits en modo real, ello no suele hacerse -para mantener la compatibilidad con procesadores anteriores- con lo que de entrada se est tirando a la basura un 50% de la capacidad de proceso del chip, aunque �por fortuna estos procesadores suelen trabajar a frecuencias de 16/20 MHz (obsoletas) y normalmente de 33 y hasta 40 MHz.

     El 386sx es una variante del 386 a nivel de hardware, aunque es compatible en software. B sicamente, es un 386 con un bus de datos de s lo 16 bits -m s lento, al � � �tener que dar dos pasadas para un dato de 32 bits-. De hecho, podr a haber sido �dise ado perfectamente para mantener una compatibilidad hardware con el 286, �aunque el fabricante lo evit probablemente por razones comerciales.�

     El 486 se diferencia del 386 en la integraci n en un solo chip del coprocesador 387.� Tambi n se ha mejorado la velocidad de operaci n: la versi n de 25 MHz dobla en � � �t rminos reales a un 386 a 25 MHz equipado con el mismo tama o de memoria � �

Page 74: Los Microprocesadores 8086 y 8088

cach . La versi n � � 486sx no se diferencia en el tama o del bus, tambi n de 32 bits, � �sino en la ausencia del 387 (que puede ser a adido externamente). Tambi n existen � �versiones de 486 con buses de 16 bits, el primer fabricante de estos chips, denominados 486SLC, ha sido Cyrix. Una tendencia iniciada por el 486 fue la de duplicar la velocidad del reloj interno (pongamos por caso de 33 a 66 MHz) aunque en las comunicaciones con los buses exteriores se respeten los 33 MHz. Ello agiliza la ejecuci n de las instrucciones m s largas: bajo DOS, el rendimiento general del � �sistema se puede considerar pr cticamente el doble. Son los chips DX2 (tambi n hay � �una variante a 50 MHz: 25 x 2). La culminaci n de esta tecnolog a viene de la mano � �de los DX4 a 75/100 MHz (25/33 x 3).

     El Pentium, ltimo procesador de Intel en el momento de escribirse estas l neas, � �se diferencia respecto al 486 en el bus de datos (ahora de 64 bits, lo que agiliza los accesos a memoria) y en un elevad simo nivel de optimizaci n y segmentaci n que � � �le permite, empleando compiladores optimizados, simultanear en muchos casos la ejecuci n de dos instrucciones consecutivas. Posee dos cach s internas, tiene � �capacidad para predecir el destino de los saltos y la unidad de coma flotante experimenta elevadas mejoras. Sin embargo, bajo DOS, un Pentium b sico s lo es � �unas 2 veces m s r pido que un 486 a la misma frecuencia de reloj. Comenz en � � �60/90 MHz hasta los 166/200/233 MHz de las ltimas versiones (Pentium Pro y �MMX), que junto a diversos clones de otros fabricantes, mejoran a n m s el � �rendimiento. Todos los equipos Pentium emplean las t cnicas DX, ya que las placas �base t picas corren a 60 MHz. Para hacerse una idea, por unas 200000 pts de 1997 un �equipo Pentium MMX a 233 MHz es cerca de 2000 veces m s r pido en aritm tica � � �entera que el IBM PC original de inicios de la d cada de los 80; en coma flotante la �diferencia aumenta incluso algunos rdenes m s de magnitud. Y a una fracci n del � � �coste (un mill n de pts de aquel entonces que equivale a unos 2,5 millones de hoy en �d a). Aunque no hay que olvidar la revoluci n del resto de los componentes: 100 � �veces m s memoria (central y de v deo), 200 veces m s grande el disco duro... y � � �que un disco duro moderno transfiere datos 10 veces m s deprisa que la � memoria de aquel IBM PC original. Por desgracia, el software no ha mejorado el rendimiento, ni remotamente, en esa proporci n: es la factura pasada por las t cnicas de � �programaci n cada vez a un nivel m s alto (aunque nadie discute sus ventajas).� �

     Una caracter stica de los microprocesadores a partir del 386 es la disponibilidad de �memorias cach� de alta velocidad de acceso -muy pocos nanosegundos- que almacenan una peque a porci n de la memoria principal. Cuando la CPU accede a � �una posici n de memoria, cierta circuiter a de control se encarga de ir depositando el� � contenido de esa posici n y el de las posiciones inmediatamente consecutivas en la �memoria cach . Cuando sea necesario acceder a la instrucci n siguiente del � �programa, sta ya se encuentra en la cach y el acceso es muy r pido. Lo ideal � � �ser a que toda la memoria del equipo fuera cach , pero esto no es todav a posible � � �actualmente. Una cach de tama o razonable puede doblar la velocidad efectiva de � �proceso de la CPU. El 8088 carec a de memoria cach , pero s estaba equipado con� � � una unidad de lectura adelantada de instrucciones con una cola de preb squeda de 4 �bytes: de esta manera, se agilizaba ya un tanto la velocidad de proceso al poder ejecutar una instrucci n al mismo tiempo que iba leyendo la siguiente.�

3.2. - REGISTROS DEL 8086 Y DEL 286.

Page 75: Los Microprocesadores 8086 y 8088

     Estos procesadores disponen de 14 registros de 16 bits (el 286 alguno m s, pero no �se suele emplear bajo DOS). La misi n de estos registros es almacenar las posiciones �de memoria que van a experimentar repetidas manipulaciones, ya que los accesos a memoria son mucho m s lentos que los accesos a los registros. Adem s, hay ciertas � �operaciones que s lo se pueden realizar sobre los registros. No todos los registros �sirven para almacenar datos, algunos est n especializados en apuntar a las direcciones �de memoria. La mec nica b sica de funcionamiento de un programa consiste en � �cargar los registros con datos de la memoria o de un puerto de E/S, procesar los datos y devolver el resultado a la memoria o a otro puerto de E/S. Obviamente, si un dato s lo �va a experimentar un cambio, es preferible realizar la operaci n directamente sobre la �memoria, si ello es posible. A continuaci n se describen los registros del 8086.�

AX SP CS IP

BX BP DS flags

CX SI SS  

DX DI ES  

Registros de datos

Registros punteros de

pila e ndices �

Registros de

segmento

Registro puntero de instrucciones

y flags

- Registros de datos:

          AX, BX, CX, DX: pueden utilizarse bien como registros de 16 bits o como dos registros separados de 8 bits (byte superior e inferior) cambiando la X por H o L seg n� queramos referirnos a la parte alta o baja respectivamente. Por ejemplo, AX se descompone en AH (parte alta) y AL (parte baja). Evidentemente, cualquier cambio �sobre AH o AL altera AX!: valga como ejemplo que al incrementar AH se le est n �a adiendo 256 unidades a AX.�

     AX = Acumulador.

          Es el registro principal, es utilizado en las instrucciones de multiplicaci n y �divisi n y en algunas instrucciones aritm ticas especializadas, as como en ciertas � � �operaciones de car cter espec fico como entrada, salida y traducci n. Obs rvese � � � �que el 8086 es suficientemente potente para realizar las operaciones l gicas, la suma y �la resta sobre cualquier registro de datos, no necesariamente el acumulador.

     BX = Base.          Se usa como registro base para referenciar direcciones de memoria con direccionamiento indirecto, manteniendo la direcci n de la base o comienzo de tablas �o matrices. De esta manera, no es preciso indicar una posici n de memoria fija, sino la �n mero BX� (as , haciendo avanzar de unidad en unidad a BX, por ejemplo, se puede �ir accediendo a un gran bloque de memoria en un bucle).

     CX = Contador.          Se utiliza com nmente como contador en bucles y operaciones repetitivas de �

Page 76: Los Microprocesadores 8086 y 8088

manejo de cadenas. En las instrucciones de desplazamiento y rotaci n se utiliza como �contador de 8 bits.

     DX = Datos.          Usado en conjunci n con AX en las operaciones de multiplicaci n y divisi n � � �que involucran o generan datos de 32 bits. En las de entrada y salida se emplea para especificar la direcci n del puerto E/S.�

- Registros de segmento:

          Definen reas de 64 Kb dentro del espacio de direcciones de 1 Mb del 8086. �Estas reas pueden solaparse total o parcialmente. No es posible acceder a una �posici n de memoria no definida por alg n segmento: si es preciso, habr de � � �moverse alguno.

     CS = Registro de segmento de c digo (code segment).�          Contiene la direcci n del segmento con las instrucciones del programa. Los �programas de m s de 64 Kb requieren cambiar CS peri dicamente.� �

     DS = Registro de segmento de datos (data segment).          Segmento del rea de datos del programa.�

     SS = Registro de segmento de pila (stack segment).           Segmento de pila.

     ES = Registro de segmento extra (extra segment).          Segmento de ampliaci n para zona de datos. Es extraordinariamente til � �actuando en conjunci n con DS: con ambos se puede definir dos zonas de 64 Kb, tan �alejadas como se desee en el espacio de direcciones, entre las que se pueden intercambiar datos.

- Registros punteros de pila:

     SP = Puntero de pila (stack pointer).          Apunta a la cabeza de la pila. Utilizado en las instrucciones de manejo de la pila.

     BP = Puntero base (base pointer).          Es un puntero de base, que apunta a una zona dentro de la pila dedicada al almacenamiento de datos (variables locales y par metros de las funciones en los �programas compilados).

- Registros ndices� :

     SI = ndice fuente (source index).�          Utilizado como registro de ndice en ciertos modos de direccionamiento �indirecto, tambi n se emplea para guardar un valor de desplazamiento en operaciones �de cadenas.

Page 77: Los Microprocesadores 8086 y 8088

     DI = ndice destino (destination index).�          Se usa en determinados modos de direccionamiento indirecto y para almacenar un desplazamiento en operaciones con cadenas.

- Puntero de instrucciones o contador de programa:

     IP = Puntero de instrucci n (instruction pointer). �           Marca el desplazamiento de la instrucci n en curso dentro del segmento de �c digo. Es autom ticamente modificado con la lectura de una instrucci n.� � �

- Registro de estado o de indicadores (flags).

          Es un registro de 16 bits de los cuales 9 son utilizados para indicar diversas situaciones durante la ejecuci n de un programa. Los bits 0, 2, 4, 6, 7 y 11 son �indicadores de condici n, que reflejan los resultados de operaciones del programa; los �bits del 8 al 10 son indicadores de control y el resto no se utilizan. Estos indicadores pueden ser comprobados por las instrucciones de salto condicional, lo que permite variar el flujo secuencial del programa seg n el resultado de las operaciones.�

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

        OF DF IF TF SF ZF   AF   PF   CF

CF (Carry Flag): Indicador de acarreo. Su valor m s habitual es � lo que nos llevamos en una suma o resta.

OF (Overflow Flag): Indicador de desbordamiento. Indica que el resultado de una operaci n no cabe en el tama o del operando destino.� �

ZF (Zero Flag): Indicador de resultado 0 o comparaci n igual.� SF (Sign Flag): Indicador de resultado o comparaci n negativa.� PF (Parity Flag): Indicador de paridad. Se activa tras algunas operaciones

aritm tico-l gicas para indicar que el n mero de bits a uno resultante es par.� � � AF (Auxiliary Flag): Para ajuste en operaciones BCD. DF (Direction Flag): Indicador de direcci n. Manipulando bloques de �

memoria, indica el sentido de avance (ascendente/descendente). IF (Interrupt Flag): Indicador de interrupciones: puesto a 1 est n permitidas.� TF (Trap Flag): Indicador de atrape (ejecuci n paso a paso).�

3.3. - REGISTROS DEL 386 Y PROCESADORES SUPERIORES.

     Los 386 y superiores disponen de muchos m s registros de los que vamos a ver �ahora. Sin embargo, bajo el sistema operativo DOS s lo se suelen emplear los que �veremos, que constituyen b sicamente una extensi n a 32 bits de los registros � �originales del 8086.

Page 78: Los Microprocesadores 8086 y 8088

     Se ampl a el tama o de los registros de datos (que pueden ser accedidos en � �fragmentos de 8, 16 � 32 bits) y se a aden dos nuevos registros de segmento �multiprop sito (FS y GS). Algunos de los registros aqu mostrados son realmente de � �32 bits (como EIP en vez de IP), pero bajo sistema operativo DOS no pueden ser empleados de manera directa, por lo que no les consideraremos.

3.4. - MODOS DE DIRECCIONAMIENTO.

     Son los distintos modos de acceder a los datos en memoria por parte del procesador. Antes de ver los modos de direccionamiento, echaremos un vistazo a la sintaxis general de las instrucciones, ya que pondremos alguna en los ejemplos:

               INSTRUCCI N�      DESTINO, FUENTE

     Donde destino indica d nde se deja el resultado de la operaci n en la que pueden � �participar (seg n casos) FUENTE e incluso el propio DESTINO. Hay instrucciones, �sin embargo, que s lo tienen un operando, como la siguiente, e incluso ninguno: �

               INSTRUCCI N�      DESTINO

     Como ejemplos, aunque no hemos visto a n las instrucciones utilizaremos un par �de ellas: la de copia o movimiento de datos (MOV) y la de suma (ADD).

3.4.1. - ORGANIZACI N DE DIRECCIONES: SEGMENTACI N.� �

     Como ya sabemos, los microprocesadores 8086 y compatibles poseen registros de un tama o m ximo de 16 bits que direccionar an hasta 64K; en cambio, la direcci n � � � �se compone de 20 bits con capacidad para 1Mb, hay por tanto que recurrir a alg n �artificio para direccionar toda la memoria. Dicho artificio consiste en la segmentaci n� : se trata de dividir la memoria en grupos de 64K. Cada grupo se asocia con un registro de segmento; el desplazamiento (offset) dentro de ese segmento lo proporciona otro registro de 16 bits. La direcci n absoluta se calcula multiplicando por 16 el valor del �registro de segmento y sumando el offset, obteni ndose una direcci n efectiva de 20 � �bits. Esto equivale a concebir el mecanismo de generaci n de la direcci n absoluta, � �como si se tratase de que los registros de segmento tuvieran 4 bits a 0 (imaginarios) a la derecha antes de sumarles el desplazamiento:

Page 79: Los Microprocesadores 8086 y 8088

direcci n = segmento * 16 + offset�

     En la pr ctica, una direcci n se indica con la notaci n SEGMENTO:OFFSET; � � �adem s, una misma direcci n puede expresarse de m s de una manera: por ejemplo,� � � 3D00h:0300h es equivalente a 3D30:0000h. Es importante resaltar que no se puede acceder a m s de 64 Kb en un segmento de datos. Por ello, en los procesadores 386 y �superiores no se deben emplear registros de 32 bit para generar direcciones (bajo DOS), aunque para los c lculos pueden ser interesantes (no obstante, s ser a posible � � �configurar estos procesadores para poder direccionar m s memoria bajo DOS con los �registros de 32 bits, aunque no resulta por lo general pr ctico). �

3.4.2. - MODOS DE DIRECCIONAMIENTO.

     - Direccionamiento inmediato: El operando es una constante situada detr s del �c digo de la instrucci n. Sin embargo, como registro destino no se puede indicar uno � �de segmento (habr que utilizar uno de datos como paso intermedio). �

ADD AX,0fffh

          El n mero hexadecimal 0fffh es la constante num rica que en el � �direccionamiento inmediato se le sumar al registro AX. Al trabajar con �ensambladores, se pueden definir s mbolos � constantes (ojo, no variables) y es m s �intuitivo:

dato EQU 0fffh ; s mbolo constante� MOV AX,dato

          Si se referencia a la direcci n de memoria de una variable de la siguiente forma, �tambi n se trata de un caso de direccionamiento inmediato:�

dato DW 0fffh ; ahora es una variable MO AX,OFFSET dato ; AX = "direcci n de memoria" �de dato

          Porque hay que tener en cuenta que cuando traduzcamos a n meros el s mbolo� � podr a quedar:�

17F3:0A11 DW FFF MOV AX,0A11

     - Direccionamiento de registro: Los operandos, necesariamente de igual tama o, �est n contenidos en los registros indicados en la instrucci n:� �

MOV DX,AX MOV AH,AL

     - Direccionamiento directo o absoluto: El operando est situado en la direcci n � �indicada en la instrucci n, relativa al segmento que se trate:�

MOV AX,[57D1h] MOV AX,ES:[429Ch]

Page 80: Los Microprocesadores 8086 y 8088

     Esta sintaxis (quitando la 'h' de hexadecimal) ser a la que admite el programa �DEBUG (realmente habr a que poner, en el segundo caso, ES: en una l nea y el � �MOV en otra). Al trabajar con ensambladores, las variables en memoria se pueden referenciar con etiquetas simb licas:�

MOV AX,dato MOV AX,ES:dato

dato DW 1234h ; variable del programa

               En el primer ejemplo se transfiere a AX el valor contenido en la direcci n �apuntada por la etiqueta dato sobre el segmento de datos (DS) que se asume por defecto; en el segundo ejemplo se indica de forma expl cita el segmento trat ndose � �del segmento ES. La direcci n efectiva se calcula de la forma ya vista con �anterioridad: Registro de segmento * 16 + desplazamiento_de_dato (este desplazamiento depende de la posici n al ensamblar el programa). �

     - Direccionamiento indirecto: El operando se encuentra en una direcci n se alada � �por un registro de segmento*16 m s un registro base (BX/BP) o ndice (SI/DI). � �(Nota: BP act a por defecto con SS).�

MOV AX,[BP] ; AX = [SS*16+BP] MOV ES:[DI],AX ; [ES*16+DI] = AX

     - Indirecto con ndice o indexado� : El operando se encuentra en una direcci n �determinada por la suma de un registro de segmento*16, un registro de ndice, SI o DI� y un desplazamiento de 8 � 16 bits. Ejemplos:

MOV AX,[DI+DESP] MOV AX,desp[DI]� ADD [SI+DESP],BX ADD desp[SI],BX�

     - Indirecto con base e ndice o indexado a base� : El operando se encuentra en una direcci n especificada por la suma de un registro de segmento*16, uno de base, uno de�

ndice y opcionalmente un desplazamiento de 8 � � 16 bits:

MOV AX,ES:[BX+DI+DESP] MOV AX,ES:desp[BX][DI]� MOV CS:[BX+SI+DESP],CX MOV CS:desp[BX][SI],CX�

Combinaciones de registros de segmento y desplazamiento.

     Como se ve en los modos de direccionamiento, hay casos en los que se indica expl citamente el registro de segmento a usar para acceder a los datos. Existen unos �segmentos asociados por defecto a los registros de desplazamiento (IP, SP, BP, BX, DI, SI); s lo es necesario declarar el segmento cuando no coincide con el asignado por �defecto. En ese caso, el ensamblador genera un byte adicional (a modo de prefijo) para indicar cu l es el segmento referenciado. La siguiente tabla relaciona las posibles �combinaciones de los registros de segmento y los de desplazamiento:

  CS SS DS ES

IP S � No No No

SP No S � No No

Page 81: Los Microprocesadores 8086 y 8088

BP con prefijo por defecto con prefijo con prefijo

BX con prefijo con prefijo por defecto con prefijo

SI con prefijo con prefijo por defecto con prefijo

DI con prefijo con prefijo por defecto con prefijo(1)

(1) Tambi n por defecto en el manejo de cadenas. �

     Los 386 y superiores admiten otros modos de direccionamiento m s sofisticados, �que se ver n en el pr ximo cap tulo, despu s de conocer todas las instrucciones � � � �del 8086. Por ahora, con todos estos modos se puede considerar que hay m s que �suficiente. De hecho, algunos se utilizan en muy contadas ocasiones.

3.5. - LA PILA.

     La pila es un bloque de memoria de estructura LIFO (Last Input First Output: ltimo en entrar, primero en salir) que se direcciona mediante desplazamientos desde �

el registro SS (segmento de pila). Las posiciones individuales dentro de la pila se calculan sumando al contenido del segmento de pila SS un desplazamiento contenido en el registro puntero de pila SP. Todos los datos que se almacenan en la pila son de longitud palabra, y cada vez que se introduce algo en ella por medio de las instrucciones de manejo de pila (PUSH y POP), el puntero se decrementa en dos; es decir, la pila avanza hacia direcciones decrecientes. El registro BP suele utilizarse normalmente para apuntar a una cierta posici n de la pila y acceder indexadamente a sus elementos -�generalmente en el caso de variables- sin necesidad de desapilarlos para consultarlos.

     La pila es utilizada frecuentemente al principio de una subrutina para preservar los registros que no se desean modificar; al final de la subrutina basta con recuperarlos en orden inverso al que fueron depositados. En estas operaciones conviene tener cuidado, ya que la pila en los 8086 es com n al procesador y al usuario, por lo que se �almacenan en ella tambi n las direcciones de retorno de las subrutinas. Esta ltima � �es, de hecho, la m s importante de sus funciones. La estructura de pila permite que �unas subrutinas llamen a otras que a su vez pueden llamar a otras y as sucesivamente:� en la pila se almacenan las direcciones de retorno, que ser n las de la siguiente �instrucci n que provoc la llamada a la subrutina. As , al retornar de la subrutina se� � � extrae de la pila la direcci n a donde volver. Los compiladores de los lenguajes de alto� nivel la emplean tambi n para pasar los par metros de los procedimientos y para � �generar en ella las variables autom ticas� -variables locales que existen durante la ejecuci n del subprograma y se destruyen inmediatamente despu s-. Por ello, una � �norma b sica es que se debe desapilar siempre todo lo apilado para evitar una p rdida� � de control inmediata del ordenador.

     Ejemplo de operaci n sobre la pila (todos los datos son arbitrarios):�

Page 82: Los Microprocesadores 8086 y 8088

3.6. - UN PROGRAMA DE EJEMPLO.

     Aunque las instrucciones del procesador no ser n vistas hasta el pr ximo � �cap tulo, con objeto de ayudar a la imaginaci n del lector elaboraremos un primer � �programa de ejemplo en lenguaje ensamblador. La utilidad de este programa es dejar patente que lo nico que entiende el 8086 son n meros, aunque nosotros nos � �referiremos a ellos con unos s mbolos que faciliten entenderlos. Tambi n es � �interesante este ejemplo para afianzar el concepto de registro de segmento.

     En este programa s lo vamos a emplear las instrucciones MOV, ya conocida, y �alguna otra m s como la instrucci n INC (incrementar), DEC (disminuir una unidad) � �y JNZ (saltar si el resultado no es cero). Suponemos que el programa est ubicado a �partir de la direcci n de memoria 14D3:7A10 (arbitrariamente elegida) y que lo que �pretendemos hacer con l es limpiar la pantalla. Como el ordenador es un PC con �monitor en color, la pantalla de texto comienza en B800:0000 (no es m s que una zona� de memoria). Por cada car cter que hay en dicha pantalla, comenzando arriba a la �izquierda, a partir de la direcci n B800:0000 tenemos dos bytes: el primero, con el �c digo ASCII del car cter y el segundo con el color. Lo que vamos a hacer es � �rellenar los 2000 caracteres (80 columnas x 25 l neas) con espacios en blanco �(c digo ASCII 32, 20h en hexadecimal), sin modificar el color que hubiera antes. � �Esto es, se trata de poner el valor 32 en la direcci n B800:0000, la B800:0002, la �B800:0004... y as sucesivamente.�

     El programa quedar a en memoria de esta manera: La primera columna indica la �direcci n de memoria donde est el programa que se ejecuta (CS=14D3h e � �IP=7A10h al principio). La segunda columna constituye el c digo m quina que � �interpreta el 8086. Algunas instrucciones ocupan un byte de memoria, otras dos � tres (las hay de m s). La tercera columna contiene el nombre de las instrucciones, algo �mucho m s legible para los humanos que los n meros: � �

14D3:7A10 B9 D0 07 MOV CX,7D0H ; CX = 7D0h (2000 decimal = 7D0 hexadecimal)14D3:7A13 B8 00 B8 MOV AX,0B800h ; segmento de la memoria de pantalla14D3:7A16 8E D8 MOV DS,AX ; apuntar segmento de datos a la misma14D3:7A18 BB 00 00 MOV BX,0 ; apuntar al primer car cter ASCII de la pantalla�14D3:7A1B C6 07 20 MOV BYTE PTR [BX],32 ; se pone BYTE PTR para indicar que 32 es de 8 bits14D3:7A1E 43 INC BX ; BX=BX+1 -< apuntar al byte de color

Page 83: Los Microprocesadores 8086 y 8088

14D3:7A1F 43 INC BX ; BX=BX+1 -< apuntar al siguiente car cter ASCII�14D3:7A20 49 DEC CX ; CX=CX-1 -< queda un car cter menos�14D3:7A21 75 F8 JNZ -8 ; si CX no es 0, saltar 8 bytes atr s (a 14D3:7A1B)�

     Como se puede ver, la segunda instrucci n (bytes de c digo m quina 0B8h, 0 y 0B8h colocados � � �en posiciones consecutivas) est colocada a partir del desplazamiento 7A13h, ya que la anterior que �ocupaba 3 bytes comenzaba en 7A10h. En el ejemplo cargamos el valor 0B800h en DS apoy ndonos en �AX como intermediario. El motivo es que los registros de segmento no admiten el direccionamiento inmediato. A medida que se van haciendo programas, el ensamblador da mensajes de error cuando se encuentra con estos fallos y permite ir aprendiendo con facilidad las normas, que tampoco son demasiadas. La instrucci n � MOV BYTE PTR [BX],32 equivale a decir: «poner en la direcci n de �memoria apuntada por BX (DS:[BX] para ser m s exactos)� el byte de valor 32». El valor 0F8h del c digo m quina de la ltima instrucci n es el complemento a dos (n mero negativo) del valor 8.� � � � �

     Normalmente, casi nunca habr que ensamblar �

Microprocesadores Introducción Procesador La unidad de procesamiento central Unidad central de procesamiento (CPU) Avance tecnológico de los procesadores 8088/8086 80286 80386 DX y SX 80486DX/80486SX 80486DX2, 80486DX4, 80486SX2 Overdrives La familia Pentium Pentium Overdrive Pentium Pro Ejecución dinámica El futuro próximo de Intel Anexos

INTRODUCCION

El microprocesador es uno de los logros más sobresalientes del siglo XX. Esas son palabras atrevidas, y hace un cuarto de siglo tal afirmación habría parecido absurda. Pero cada año, el microprocesador se acerca más al centro de nuestras vidas, forjándose un sitio en el núcleo de una máquina tras otra. Su presencia ha comenzado a cambiar la forma en que percibimos el mundo e incluso a nosotros mismos. Cada vez se hace más difícil pasar por alto el microprocesador como otro simple producto en una larga línea de innovaciones tecnológicas.

Ninguna otra invención en la historia se ha diseminado tan aprisa por todo el mundo o ha tocado tan profundamente tantos aspectos de la existencia humana. Hoy existen casi 15,000 millones de

Page 84: Los Microprocesadores 8086 y 8088

microchips de alguna clase en uso (el equivalente de dos computadoras poderosas para cada hombre, mujer y niño del planeta). De cara a esa realidad, ¿quién puede dudar que el microprocesador no sólo está transformando los productos que usamos, sino también nuestra forma de vivir y, por último, la forma en que percibimos la realidad?

No obstante que reconocemos la penetración del microprocesador en nuestras vidas, ya estamos creciendo indiferentes a la presencia de esos miles de máquinas diminutas que nos encontramos sin saberlo todos los días. Así que, antes de que se integre de manera demasiado imperceptible en nuestra diaria existencia, es el momento de celebrar al microprocesador y la revolución que ha originado, para apreciar el milagro que es en realidad cada uno de esos chips de silicio diminutos y meditar acerca de su significado para nuestras vidas y las de nuestros descendientes.

Procesador

La unidad de procesamiento central

La unidad de procesamiento central (CPU) es donde se manipulan los datos. En una microcomputadora, el CPU completo está contenido en un chip muy pequeño llamado microprocesador. Todas las CPU tienen por lo menos dos partes básicas, la unidad de control y la unidad aritméticológica. Todos los recursos de la computadora son administrados desde la unidad de control, cuya función es coordinar todas las actividades de la computadora. La unidad de control contiene las instrucciones de la CPU para llevar a cabo comandos. El conjunto de instrucciones, que está incluido dentro de los circuitos de la unidad de control, es una lista de todas las operaciones que realiza la CPU. Cada instrucción en el conjunto de instrucciones es acompañado por un microcódigo, que son instrucciones muy básicas que le dicen a la CPU cómo ejecutar las instrucciones. Cuando la computadora corre un programa, busca los comandos del programa dentro del conjunto de instrucciones de la CPU y las ejecuta en orden. La unidad aritmético-lógico (ALU)es cuando la unidad de control encuentra una instrucción que involucra aritmética o lógica, le pasa el control al segundo componente de la CPU. La ALU incluye un grupo de registros, es decir, memoria construida directamente en la CPU que se usa para guardar datos que están siendo procesados por la instrucción actual.

 

Unidad Central de Procesamiento (CPU)

La CPU de una computadora contiene la inteligencia de la máquina; es donde se realizan los cálculos y las decisiones. El complejo procedimiento que transforma datos nuevos de entrada en información útil de salida se llama procesamiento. Para llevar a cabo esta transformación, la computadora usa dos componentes: el procesador y la memoria. El procesador es el cerebro de la computadora, la parte que interpreta y ejecuta las instrucciones. El

Page 85: Los Microprocesadores 8086 y 8088

procesador casi siempre se compone de varios circuitos integrados o chips, estos están insertados en tarjetas de circuitos, módulos rígidos rectangulares con circuitos que los unen a otros chips y a otras tarjetas de circuitos.

El microprocesador moderno contiene unos 20 millones de transistores y cada chip terminado es el producto de procesos más complicados que los que se utilizaron en el Proyecto Manhattan para construir la bomba atómica. Y no obstante, pese a un proceso de manufactura extraordinariamente refinado, los microchips se producen en volumen a razón de más de 1,000 millones de unidades por año. Para poner esta complejidad en perspectiva, imagínese que dentro de cada microprocesador diminuto existe una estructura tan compleja como una ciudad de tamaño mediano, incluidas todas sus líneas de energía eléctrica, líneas telefónicas, líneas de drenaje, edificios, calles y casas. Ahora imagine que en esa misma ciudad, millones de personas se desplazan a la velocidad de la luz y con la sincronización perfecta en una danza de coreografía muy complicada.

Y eso es tan sólo un chip. De todas las estadísticas asombrosas que se utilizan para describir el mundo del microprocesador, ninguna es más extraordinaria que ésta: el número total de transistores que integran todos los microchips que se producirán en el mundo este año es equivalente al número de gotas de lluvia que caerán en California durante ese mismo periodo.

Avance Tecnológico de los procesadores .

8088 / 8086

En 1975 Intel decidió ponerse manos a la obra para construir su primer micro de 16 bits que salió al mercado en 1978. Se trataba del 8086, que definió el inicio de su gama de productos más famosa, la familia de microprocesadores x86.

La longitud de los registros del 8086 era de 16 bits (de ahí su denominación de 16 bits), había versiones que funcionaban a 4.77 y 8 MHz, tenía un bus de datos de 16 bits y un bus de direcciones de 20 bits, lo que le permitía acceder a un máximo de memoria de 1 Mb según el cálculo 2 elevado a 20. Seguidamente, en 1979, Intel sacó el 8088, que en contra de lo que podamos pensar no es mejor que el 8086. La diferencia era sustancial; el bus de datos era de 8 bits (la mitad). Este paso hacia atrás estuvo provocado por el estado de la industria de la época. Utilizar un bus de datos de 16 bits suponía forzar al mercado a desarrollar para 16 bits lo que implicaba un incremento en los costes de desarrollo de controladores de periféricos y memorias. El síntoma fue que Intel se había adelantado a su época.

Los japoneses, aprovechando la ocasión y dando fe a su fama de copiones fabricaron unos clónicos de los 8086 y 8088. Fue NEC la que, por procedimientos de ingeniería inversa, sacó el diseño de

Page 86: Los Microprocesadores 8086 y 8088

estos micros y creó sus modelos V20 y V30, que incrementaban el rendimiento respecto a los de Intel en un 10-30 por ciento. Como os podréis imaginar Intel demandó a NEC, pero perdió el juicio. La Justicia determinó que el microcódigo del chip podía registrarse pero Intel no había marcado en el chip el símbolo del copyright, con lo cual perdía los derechos de copia.

Se encuentra un error de diseño en el 8088 que afecta a la gestión de interrupciones y al registro de pila SS (Stack Segment).

Intel fabricó variaciones de estos modelos, sacando al mercado los 80C86, 80C88, 80186 y 80188 cuyas modificaciones fueron el ahorro de energía en las versiones C para su instalación en portátiles, y el rediseño interno para la optimización en las versiones 1.

80286

En 1984 aparece el 80286 como base para una nueva generación de ordenadores de IBM, el IBM AT (Advanced Technology). Supone un nuevo salto tecnológico. Además de incrementar el bus de direcciones de 20 bits a 24, lo que permitía acceder hasta los 16 Mb de RAM, se incrementaba la velocidad, llegando a ser hasta un 25 por ciento más rápidos que los 8086 y 8088 originales.

La novedad más importante que se introdujo fue la gestión de memoria virtual. La memoria virtual es una extensión de memoria en disco (o dispositivo de almacenamiento secundario) añadida a la memoria física instalada. Así, el 80286 es capaz de tratar hasta un total de 1 Gb, desglosado en 16 Mb de memoria física más 1008 Mb de memoria virtual. La memoria virtual solamente la utilizan los programas que están preparados para ello.

Aparece también un nuevo modo de operación del microprocesador. Aparte del modo real (el normal de operación) que direcciona hasta 1 Mb de memoria física y asegura la compatibilidad para aplicaciones diseñadas par los 8086/8088, se tiene el modo protegido que no es compatible con estos programas desarrollados para los micros antes mencionados. El modo protegido es el que permite acceder a los 1.008 Mb de memoria virtual.

El 80286 trabaja en su arranque en modo real. El cambio a modo protegido, lo que se conoce técnicamente como upshift, no es reversible (downshift), siendo necesario hacer un reset del microprocesador para volver al modo real; sin duda un gran fallo de diseño.

El 80286 se presentó con velocidades de reloj de 2, 8, 10, 12, 16 y 20 MHz.

80386 DX y SX

Introducido en 1985, el 80386 DX supera un nuevo escalón en el avance tecnológico en microprocesadores. Se incorpora una nueva ampliación y surge el número mágico, el 32. Los buses de datos y de direcciones se amplían hasta 32 líneas de datos, ocurriendo lo mismo

Page 87: Los Microprocesadores 8086 y 8088

con el tamaño de los registros. Esta ampliación supone un incremento en la memoria RAM física instalada. Puede direccionar 4 Gb de memoria física (DX significa Double word eXternal) y 64 Tb de memoria virtual, una cifra que en la actualidad está aún muy por encima de las posibilidades económicas de los usuarios (a ver quién instala 4.000 Megabytes de RAM, unos 20 millones de pesetas).

Arranca en modo real, al igual que el 80286, e incorpora un nuevo modo de operación: el modo real virtual del 8086, que permite tener varias sesiones 8086 trabajando simultáneamente simulando una especie de pseudomultitarea.

En los microprocesadores anteriores la gestión de memoria se realizaba en segmentos de 16 Kb. Con el 80286 este tamaño de los segmentos de la memoria se hacían muy pequeños y el programador tenía que trabajar más para adaptarse a una gran cantidad de segmentos. El 80386 permite la definición de segmentos de memoria de tamaño variable. Aparte, Intel corrigió la deficiencia del downshifting, pudiéndose realizar por software.

Otra de las innovaciones en la inclusión de una memoria cache interna en el chip destinada a almacenar instrucciones provenientes de memoria sin necesidad de que la unidad de ejecución intervenga. Intel comete un nuevo error en el diseño del micro que genera inexactitudes en el cálculo de 32 bits, que se presentan en los micros lanzados al mercado hasta mayo del 1987. Los modelos corregidos van etiquetados con una doble sigma mayúscula o con el identificativo DX. Este error afectaba a las operaciones de multiplicación de 32 bits. Ocurría bajo las siguientes circunstancias:

Se usa la memoria virtual y se produce una demanda de página.

El coprocesador matemático 80387 está instalado y en uso. Debe ocurrir una operación de acceso directo a memoria

(DMA). El 80386 debe estar en estado de espera (Wait State).

Se detecta un segundo bug denominado POPAD bug. Su efecto es el vaciado del registro acumulador EAX cuando se ejecuta una instrucción de acceso a memoria inmediatamente después de la ejecución de la instrucción POPAD.

Aparecen variaciones que afectan al consumo de energía pensadas para portátiles, se trataba de los 80386SL (Slow Low power) y 80386SLC (Slow Low power Cache), que es propiedad de IBM aunque lo fabrique Intel. Las frecuencias de funcionamiento eran de 12, 20, 25 y 33 MHz.

El 80386SX (SX significa Simple word eXternal) tiene las mismas características que el 80386DX, salvo que el bus de direcciones externo se reduce a 16 bits. Introducido en 1988 daba la potencia de un 80386 a precio de un 80286. Durante mucho tiempo se rumoreó que el P9 podría ser compatible con los zócalos 80286, pero al final

Page 88: Los Microprocesadores 8086 y 8088

no fue así. La razón es que el 80286 multiplexa todos sus buses para conseguir con menos líneas el mismo resultado (menor coste) El 80386SX sólo multiplexa el bus de direcciones. Las frecuencias de funcionamiento eran de 16, 20, 25 y 33 MHz.

80486DX 80486SX

El 80486DX salió al mercado en 1989. La estructura interna hablando en términos numéricos es igual a la de un 80386. El tamaño de los registros y de los buses son de 32 bits. Mantiene los tres modos de operación: real, protegido y real virtual. Las diferencias reales con los 80386DX son que tiene un flag más, un estado de excepción más, 2 bits más en la tabla de entrada de páginas, 6 instrucciones y los registros de control tienen una longitud de 9 bits.

Se realizan también cambios en la arquitectura interna. Se crea un mayor número de líneas hardware lo que implica un incremento en la velocidad. Se imponen reglas de diseño más estrictas, lo que supone un reducción del tamaño del chip. Al reducirse el tamaño se reduce también el consumo y consiguientemente la temperatura que alcanza el chip, con lo cual lo podemos hacer funcionar a un mayor número de ciclos de reloj, lo que supondrá la aparición de los Overdrives.

Se incluye un coprocesador matemático interno que dobla las prestaciones de un 80387 trabajando a la misma velocidad. Se logra un diseño mejor y la comunicación entre el chip principal y el coprocesador matemático es interna, lo que mejora la velocidad en las transferencias y unas sincronizaciones más estrechas.

La memoria cache (8 Kb) del microprocesador está dividida en 4 caches de 2 Kb cada una. Esto agiliza la ejecución de algunas aplicaciones. Si se asigna una memoria cache secundaria (L2) el rendimiento del micro puede aumentar hasta un 30 por ciento más.

El 80486SX es igual que un 80486DX, sólo que el coprocesador matemático está inhabilitado. El coprocesador matemático 80487SX es en realidad un 80486DX puro que desactiva por completo el 80486SX, sin que podamos retirarlo de la placa. Las velocidades a las que funcionan son de 25, 33, 40 y 50 MHz. Hay versión SL para portátiles.

80486DX2, 80486DX4, 80486SX2

Estos modelos de microprocesadores en realidad son iguales que sus hermanos menores. Internamente duplican la velocidad del reloj del sistema. Es igual que revolucionar el motor de un coche para que corra más. Las consecuencias son obvias: un sobrecalentamiento del micro con una reducción de potencia. Por este motivo se recomienda utilizar un método de disipación de calor para que el rendimiento no se vea reducido (laminillas disipadoras o ventiladores). Las velocidades a las que trabajan son: 50, 66, 75 y 100 (sólo para el DX4) MHz para los DX2 y 40 y 50 MHz para los SX2.

Page 89: Los Microprocesadores 8086 y 8088

Los 80486 tampoco están libres del pecado original. En el 80486 cuando el coprocesador matemático detecta un error de limite del tamaño de segmento, algunas veces la CPU falla al generar la excepción 13. Este error se genera bajo las siguientes condiciones:

Segmento de datos de 64 Kb. Operandos de direccionamiento de 16 bits. Almacenar un valor de 8 bytes desde el coprocesador cuando la

mitad está fuera de los limites del limite del segmento.

Un segundo bug aparece en el cálculo de la instrucción dedicada a calcular arcotangentes.

Overdrives

Intel comenzó una nueva política con la salida de los microprocesadores con la denominación Overdrive. Los Overdrive eran actualizaciones para los microprocesadores instalados en los sistemas que dispusieran de un segundo zócalo para tal propósito. En esta primera generación de Overdrives los chips disponían de un duplicador de frecuencia interno y tenían un pin más, el número 169. Este pin se encargaba de inhabilitar el 80486 instalado en la placa dejando como único micro funcionando el Overdrive. No era posible la retirada del micro anterior, puesto que el sistema dejaba de funcionar. La política de actualización era buena, lo que no era tan bueno era la trampa para los usuarios. Si se puede retirar el micro anterior se puede vender a usuarios que necesiten menos potencia, no siendo tan gravosa la inversión de más de 80.000 pesetas que costaban cuando salieron los primeros en 1991.

En la segunda generación de Overdrives se olvidó el pin 169, teniendo los 168 que los hacían compatibles con los zócalos de los 80486. En estos casos la actualización es sencillísima: quitar el que estaba y poner el nuevo en el mismo lugar.

La tercera generación de Overdrives trabaja con un consumo menor para reducir de este modo su alta temperatura. El voltaje se reduce a 3.3 voltios de los 5 que necesitaban los anteriores. Si vas a comprar un DX2 o DX4 fíjate bien qué voltaje utiliza vuestra placa. los Overdrives etiquetados como tal funcionan a 5V, los etiquetados directamente como DX4, sin disipador, funcionan a 3.3V.

La familia Pentium

La quinta generación de microprocesadores Intel tomó el nombre de Pentium. Aparecido en marzo de 1993 en frecuencias de trabajo de 60 y 66 MHz llega a ser cinco veces más potente que un 80486 a 33 MHz. Fabricados con un proceso BiCMOS de geometría de 8 micras y con una arquitectura superescalar, los microprocesadores Pentium se encuadran en un concepto RISC. Mientras que el 80386 y el

Page 90: Los Microprocesadores 8086 y 8088

80486 tienen una unidad de ejecución, el Pentium tiene dos, pudiendo ejecutar dos instrucciones por ciclo de reloj con sus correspondientes cálculos, ya que también tiene dos unidades aritmético-lógicas (ALU). El 80386 (CISC) ejecuta un instrucción en varios ciclos de reloj y el 80486 ejecuta una instrucción por ciclo de reloj (en términos medios).

Intel toma como modelo la estructura separada para la memoria cache interna del microprocesador. Consta de dos bloques de 8 Kb, uno para las instrucciones y otro para los datos que funcionan bajo una estructura de asociación de conjuntos bidireccional. Para los extremadamente curiosos el algoritmo de sustitución de datos en la cache es el LRU (Least Recently Used, el menos utilizado recientemente).

El coprocesador matemático incluido utiliza algoritmos mejorados y añade instrucciones de suma, multiplicación y división de números en punto flotante integradas en el silicio, además de incorporar un pipeline de 8 niveles para lograr ejecutar operaciones en punto flotante en un solo ciclo de reloj.

Se integran nuevos avances tecnológicos, además de los ya comentados, como por ejemplo la predicción de ramificaciones, buses de datos internos de 256 bits, bus de datos externo de 64 bits (que soporta transferencias de 258 Kbytes por segundo) y memorias cache de escritura diferida.

La tecnología de bus PCI se presenta junto con el Pentium, que incorporaba una mejor implementación del bus local. Permite tener hasta 10 conectores PCI en un primer nivel, conectados al procesador a través de la circuitería controladora PCI (conexión no directa).

Intel apunta ahora hacia el mercado del entorno cliente/servidor. Con el Pentium se puede construir un ordenador multiprocesador con 16 Pentium instalados, pudiendo actuar uno de ellos como agente supervisor del sistema para entornos que requieran un estricto control de errores (Functional Redundancy Checking ). Aunque esto sirvió de poco en un principio. Seguro que recordáis el famoso bug de Pentium. La nueva y mejorada unidad de punto flotante cometía un error garrafal al hacer una simple división. La siguiente función escrita para Visual Basic detecta si un Pentium genera un fallo de cálculo:

Function PentiumTest () As Double

Dim x As Double, y As Double, z As Double

x = 4195835#

y = 3145727#

z = x - (x / y) * y

PentiumTest = z

Page 91: Los Microprocesadores 8086 y 8088

End Function

Recientemente han aparecido versiones del Pentium a 75, 90, 100 y 133 MHz, siendo el último, presentado el 23 de octubre,

uno a 120 MHz diseñado especialmente para ordenadores portátiles.

Pentium Overdrive

¡Cómo no íbamos a disponer de una versión "light" del Pentium compatible pin a pin con nuestros microprocesadores 80486DX y DX2!

El 18 de septiembre de 1995 Intel anuncia la disponibilidad de un nuevo modelo procesador de mejora Pentium Overdrive a 83 MHz (además del modelo a 63 MHz que ya existía) que permite la actualización de los microprocesadores 80486 DX, DX2 y SX. Compatible pin a pin con estos microprocesadores en Pentium Overdrive integra la tecnología del Pentium en 3,3 voltios y 0'6 micras.

Aparte de ser como un Pentium genuino cabe destacar la presencia de una memoria cache de 32 Kb, un regulador de tensión para reducir la tensión de 5 a 3,3 voltios, disipador y ventilador integrado y una circuitería interna que incrementa en dos veces y media la frecuencia del bus del sistema (33 MHz * 2'5 = 82'5 MHz). El incremento medio en las prestaciones respecto a un 80486 a 66 MHz es de un 50 por ciento aunque en aplicaciones puntuales (AutoCAD 13) puede ser de un 96 por ciento, lo que lo sitúa en las prestaciones de un Pentium genuino a 75 MHz. El precio de venta al público es de unas 40.000 pesetas más IVA.

Antes de comprarlo os recomiendo que llevéis el ordenador a la tienda para que sepan qué zócalo tiene para su actualización.

Pentium Pro

El Pentium Pro a 133 MHz, que fue presentado el día 3 de noviembre de 1995 en el hotel Ritz de Madrid es el primer microprocesador de la tercera generación de la gama Pentium. Está preparado específicamente para ejecutar aplicaciones compiladas y desarrolladas para 32 bits. Algunas aplicaciones desarrolladas para entornos de 16 bits tienen una reducción de rendimiento en su ejecución en sistemas basados en un Pentium Pro respecto a los Pentium normales a 133 MHz. Perfectamente compatible con sus hermanos menores incorpora nuevas mejoras, de las cuales destaca la ejecución dinámica, tema al que dedicaremos un apartado especial y la inclusión de una memoria cache secundaria integrada en el encapsulado del chip.

Page 92: Los Microprocesadores 8086 y 8088

Fabricado en una geometría de 0'6 micras, Intel está realizando sus desarrollos con vistas a reducirla a 0'35 micras como la de los Pentium actuales a 133 MHz, lo que reducirá su temperatura y podrá elevarse la frecuencia de reloj hasta los 200 MHz.

Intel ha puesto mucho esfuerzo en probar el Pentium Pro para intentar salvarse de los numerosos bugs que manchan su gran prestigio. Intel nos ofreció participar en las pruebas de sus Pentium Pro, petición a la cual respondimos afirmativamente, pero al final, la drástica reducción de unidades nos hicieron quedar fuera de los elegidos (sólo se probaron 100 unidades que estarían más que asignadas de las más de 10.000 peticiones que recibió Intel a través de Internet).

El Pentium Pro no es compatible con las placas que existen en el mercado. El motivo principal es la inclusión de la memoria cache secundaria dentro del chip. Se utiliza un bus interno que está optimizado para trabajar con las temporizaciones de conexión directa, lo cual imposibilita la conexión de la memoria cache externa (a mi entender no tiene la suficiente justificación, puesto que a nivel de SETUP la memoria cache secundaria se puede desactivar e incluso anular retirando los integrados de sus zócalos. El tema de la sincronización ya es otro cantar y probablemente sea el motivo real).

Este nuevo producto tiene un bus que ha sido diseñado para conectar varios Pentium Pro en paralelo que soporta el protocolo MESI, es un microprocesador de 32 bits que incorpora una instrucción más (mover datos condicionalmente) que supone una mayor predicción de ramificaciones en la ejecución. Tiene 21 millones de transistores, 5'5 millones en el núcleo y 15'5 millones en la memoria cache secundaria. La CPU consta de dos chips colocados en cavidades independientes conectadas internamente. El chip correspondiente a la memoria cache es más pequeño que el del chip del núcleo, ya que la disposición de los transistores permite una mayor concentración.

Ejecución dinámica

La ejecución dinámica es uno de los dos elementos clave en la ganancia de prestaciones del Pentium Pro. Esta nueva forma de

Page 93: Los Microprocesadores 8086 y 8088

"pensar" del microprocesador está basada en la combinación de tres técnicas: la predicción de ramificaciones múltiples, el análisis del flujo de datos y la ejecución especulativa.

Predicción de ramificaciones múltiples.

El Pentium Pro utiliza un algoritmo de predicción de ramificaciones múltiples para anticipar saltos en la ejecución del flujo de instrucciones. Predice dónde puede encontrar en la memoria las siguientes instrucciones que debe ejecutar con una precisión del 90%. Esto lo logra porque además de extraer instrucciones para su ejecución, se adelanta y busca anticipadamente posibles nuevas instrucciones de programa.

Análisis del flujo de datos

El análisis del flujo de datos permite saber al microprocesador en qué orden óptimo puede o debe ejecutar las instrucciones, ya que sabe la dependencia de unas respecto a otras.

Ejecución especulativa

Cuando el Pentium Pro ejecuta instrucciones (5 por ciclo de reloj) utiliza la ejecución especulativa. Esto significa que las instrucciones no se ejecutan en el mismo orden con el que entran al microprocesador, sino que se ejecutan en un "orden desordenado", lo que paradójicamente hace que sea más eficaz.

En el paso final, todos esos datos desordenados generados por la predicción de ramificaciones, se ordenan y se ensamblan esos paquetes de unidades de proceso para montar el orden lógico en la

secuencia de ejecución del programa.

El futuro próximo de Intel

Page 94: Los Microprocesadores 8086 y 8088

ntel está ya trabajando en sus modelos P55C, P68 y P7. El P55C será una versión Lite del Pentium Pro, presumiblemente compatible pin a pin con los zócalos de 80486 y estará especialmente diseñado para ejecutar aplicaciones de Windows 95. ¿Para cuándo tendrá el PC una ROM con rutinas gráficas preprogramadas para su uso por el sistema operativo? Tendrá un precio inferior al del Pentium Pro y parece que estará disponible a finales de 1996.

El P68 y el P7 corresponden a un nuevo escalón, ya que son micros de 64 bits que se presentarán a lo largo de 1997. El primero es el sucesor del Pentium Pro compatible con la familia x86, mientras que el P7 es una coproducción de Intel y Hewlett-Packard que utilizará la tecnología PA-RISC de HP.

Resumiendo, Intel sigue con su política de "gástate un pastón en un ordenador para después tirarlo".

ANEXOS

TECNOLOGÍA

INTEL LANZA UN CHIP DE ALTA CAPACIDAD

Intel ha anunciado el lanzamiento al mercado de un chip que ha despertado esperanzas de un gran desarrollo de la industria informática y de las capacidades de los microprocesadores, pero cuyo principio fundamental ya existía desde 1995. El logro de este prodigioso chip está en que dobla la capacidad de los transistores que lo forman. Hasta ahora, para aumentar las capacidades de los procesadores se intentaba condensar miles de microscópicos transistores en el menor espacio posible, para que cada uno de ellos almacenara un bit. Lo que se consigue con esta tecnología es que cada transistor almacene dos bits en vez de uno. Y se aspira a que en un futuro sean más de dos los bits albergados en cada transistor.

El mayor fabricante de chips del mundo, presentó el nuevo chip el miércoles en Japón. La novedad se aplicará en una primera fase a

Page 95: Los Microprocesadores 8086 y 8088

cámaras digitales, teléfonos móviles y asistentes personales, pues consiste en memorias flash, las que no se borran aunque el aparato se desconecte. Por ahora, no se usará en las memorias RAM, las que usan los ordenadores, y que pierden lo almacenado cuando se corta el fluido eléctrico. De todos modos, el nuevo chip abre un número ilimitado de posibilidades, y una carrera por su aplicación con otros fabricantes de chips que conocen métodos parecidos o que trabajan en otros sistemas para aumentar la capacidad de los microprocesadores.

La tecnología de StrataFlash ya se conocía. En 1994 Intel anunció este sistema, presentando un año después un prototipo que luego no desarrolló. Desde entonces hasta hoy, otros fabricantes como Sandisk e ISD han utilizado tecnología similar, aunque Intel ha sido la primera empresa en hacer su uso posible a gran escala. Tanto que espera colocar en el mercado de 1 a1 10 millones de unidades de estos StrataFlash en 1998. La competencia no está parada: ISD ya tiene chips que almacenan varios bits por transistor de manera similar a StrataFlash, SanDisk dispone de un sistema parecido en sus tarjetas PC, alcanzando capacidades de almacenamiento similares. Lucent Technologies prepara para muy pronto otro tipo de procesadores de señal digital (DSP), un tipo de chips utilizados en teléfonos celulares y estaciones de comunicación digital, que siendo un 30% más baratos de los usados hoy, requieren sólo una quinta parte de energía y memoria que los chips de la competencia. En el terreno académico, la Universidad de North Carolina en Charlotte anunció el descubrimiento de un chip capaz de usar tecnología eléctrica y óptica a la vez, lo que aumenta su velocidad 100.000 veces en relación a los modelos actuales, aunque de momento se trata sólo de un prototipo desarrollado por Raphael Su y Qi Zhang, ingenieros eléctricos.

TECNOLOGÍA

EL ÚLTIMO CHIP DE SUN ALCANZA LOS 600 MHZ

En una carrera imparable plagada de nuevos chips cada vez más potentes y métodos de fabricación innovadores, Sun Microsystems presentó el lunes un potente microprocesador que alcanza los 600 Mhz de velocidad de reloj, un rendimiento que dobla la nueva generación Pentium II recién estrenada por Intel, que se presentó como un gran éxito con "sólo" 300 Mhz.

El nuevo chip de Sun, el UltraSparc-III constituye la tercera generación de su familia Sparc, el corazón de las estaciones de trabajo y de los servidores de Sun. Una de sus características más destacables es su escalabilidad, es decir, la posibilidad de añadir más chips al mismo sistema, de manera que trabajando en paralelo, multipliquen las posibilidades de esta tecnología. La empresa asegura que mil de estos chips funcionando juntos pueden rivalizar con los superordenadores más potentes de hoy. Las aplicaciones para la red forman parte de la comercialización del prodigioso chip

Page 96: Los Microprocesadores 8086 y 8088

que, aplicado a los servidores, les permitiría soportar un mayor número de usuarios, abasteciéndolos de más información y más rápidamente que los modelos actuales. Los primeros de estos servidores estarán preparados para el próximo verano, y se gobernarán por el sistema operativo de la casa, el Solaris.

Sun se adelanta así a Intel, ya que el UltraSparc-III utiliza una tecnología de 64 bits, que Intel planeaba presentar como novedad en breves días bajo el nombre clave de "Merced". Sin embargo, el gigante de los microprocesadores no se ha quedado atrás y ha presentado a su vez una nueva generación de chips para servidores conocidos como i960 RISC que, diseñados exclusivamente para redes de telecomunicaciones, aceleran el tráfico de datos a través de este tipo de máquinas gracias al protocolo I20. Marcas como Acer America, AST Computer, Compaq, Dell, IBM, y Hewlett-Packard han anunciado ya que utilizarán este chip en sus nuevos modelos de servidores, a presentar durante los próximos tres meses.

Intel: un gigante en el Valle del Silicio

Pocas compañías pueden desafiar el claro dominio de Intel en la industria de los semiconductores, ni siquiera las rivales de Japón y Corea del Sur

Louise Kehoe FT Intel es una organización única en su categoría. El gigante del Valle del Silicio _el fabricante de chips más grande del planeta, con un valor de mercado superior a los 134 millardos de dólares_ produce la mayoría de los microprocesadores empleados por la industria de la computación personal en todo el planeta.

La enorme escala de las operaciones de Intel empequeñecen las de casi todos sus rivales. La compañía cerró 1997 con un volumen de ventas anual de 25,1 millardos de dólares, un aumento significativo en comparación con los 20,8 millardos de dólares facturados en 1996. Gracias a un margen bruto de ganancias cercano a 60%, la compañía genera ingresos a un ritmo que supera con creces el de cualquiera de sus competidores.

Esto le permite a Intel invertir fuertes sumas en investigación y desarrollo de productos, además de nuevas plantas y equipos. Este año, por ejemplo, Intel tiene un presupuesto de investigación y desarrollo de 2,8 millardos de dólares y planea desembolsar otros 5,3 millardos de dólares en nuevas líneas de producción. Este monto triplica las inversiones que realizará en este campo cualquier otro fabricante de semiconductores.

Si se toman en cuenta la participación dominante en el mercado de los microprocesadores Pentium y el rápido ritmo de avance de la compañía en el desarrollo de nuevas tecnologías, el liderazgo de Intel pudiera parecer inexpugnable.

Sin embargo, varios cambios en el mercado de las computadoras personales están creando nuevos desafíos para Intel, los cuales pudieran mermar su crecimiento en el futuro. En particular, el

Page 97: Los Microprocesadores 8086 y 8088

lanzamiento al mercado de la 'PC básica', que se vende en Estados Unidos por menos de mil dólares, ha obligado a Intel a replantear su estrategia. La compañía mejora incesantemente el rendimiento de sus microprocesadores, por lo que una PC comprada un año o incluso seis meses atrás queda opacada por los nuevos modelos de mayor velocidad.

En el pasado, con el lanzamiento al mercado de cada nueva generación de microprocesadores, Intel solía disminuir los precios de las versiones anteriores, por lo que los precios de PC permanecían bastante estables, al tiempo que el rendimiento se incrementaba con celeridad. Microsoft y otras compañías de software colaboraban en el ascenso de Intel mediante el desarrollo de programas cada vez más complejos que requieren hardware más moderno.

Luego vino la 'PC básica' que, en términos generales, tiene como base un microprocesador menos potente que alguno de los rivales de Intel. Al principio, Intel restó importancia a esta nueva competencia. '¿Quién desearía una PC de menor capacidad?', se preguntó retóricamente Intel. Empero, el precio de estas máquinas resultaba muy conveniente y los compradores corrieron a comprarlas. Se estima que el año pasado 25% de las computadoras personales vendidas en EEUU se ubicaron en el segmento de equipos con precios inferiores a los mil dólares. El crecimiento de este nuevo mercado tomó a Intel por sorpresa, lo que obligo a la compañía a reevaluar la situación. Intel podía ofrecer sus microprocesadores viejos para que se usaran en estas PC, pero ello mermaría los márgenes de ganancias que constituyen el orgullo de la compañía. Fue por ello que Intel anunció recientemente planes para desarrollar chips específicamente diseñados para las PC de bajos precios.

En noviembre, Intel reorganizó sus grupos de productos para reflejar la nueva estrategia. La compañía 'abarcará todos los segmentos' del mercado de la computación, señaló Andrew Grove, director y presidente ejecutivo de Intel. A mediados de año la empresa planea ofrecer una versión de su microprocesador Pentium II para máquinas PC de bajo precio. La compañía reducirá el costo de sus microprocesadores de máximo rendimiento mediante la eliminación de los costosos chips de memoria que acompañan la versión actual. Esto colocará el Pentium II en el mismo nivel de precios que los chips más lentos de sus competidores.

Otro truco para reducir costos que Intel guarda bajo la manga es convertir funciones actualmente realizadas por los chips en software que puede ser ejecutado por el microprocesador. Aunque esto incrementa la carga de trabajo del procesador central, también implica que incluso las computadoras personales baratas necesitarán los microprocesadores de alto rendimiento de Intel.

La compañía también aspira liderar el mercado de chips para las nuevas generaciones de codificadores de TV, los cuales permitirán a los suscriptores de televisión por cable conectarse a Internet.

Page 98: Los Microprocesadores 8086 y 8088

Asimismo, ha realizado importantes incursiones en el mercado de servidores. El año pasado, la mayoría de los servidores vendidos por menos de 25 mil dólares tenían microprocesadores Intel.

En 1999, Intel lanzará al mercado una nueva generación de microprocesadores identificados con el nombre clave de Merced, orientada hacia servidores más complejos. Hewlett-Packard, que ocupa la segunda posición entre las compañías de computación más grandes de Estados Unidos, colabora con Intel en el desarrollo de Merced y planea diseñar sus próximos productos para que utilicen chips de Intel.

Esto establecería los chips de Intel como el estándar dominante para servidores y convertiría a la compañía en el máximo fabricante de microprocesadores de toda la industria, un papel al que ninguna empresa puede aspirar.

Debido a que los fabricantes de chips más grandes de Japón y Corea del Sur enfrentan una situación de inestabilidad económica, pocas compañías pueden desafiar seriamente el dominio de Intel en la industria. Incluso si otro fabricante de chips diseña un producto mejor que los de Intel, ninguno posee su capacidad de producción.

Microprocesadores1.- INTRODUCCIÓN

Desde la aparición del 8088 hace los principios de funcionamiento de los micros no se han modificado mucho, a pesar de que ahora se ha llegado a la quinta generación de estos chips y se ha profundizado en todo lo referente a las prestaciones, en tema en los que hace diez años uno ni tan sólo se atrevía a soñar. De todas maneras estas modificaciones se refieren especialmente a la velocidad de trabajo del procesador con el cual se maneja el DOS, no al concepto básico, por lo menos en lo referente al modo real.

Echemos de todas formas, en primer lugar, un vistazo a la historia del desarrollo de los procesadores Intel.

La tarea del procesador es la de tratar las series de órdenes en lenguaje máquina, pues el lenguaje máquina es el único que entiende el procesador. Las instrucciones en el lenguaje máquina no son exactamente iguales para todos los ordenadores, sino que solo son validas para el tipo de microprocesador en cuestión. Los diferentes miembros de la familia 80xxx trabajan sin embargo con el mismo lenguaje máquina, lo que permite que estos sean compatibles entre ellos.

El primer representante de esta familia, el 8086, se desarrollo ya en el año 1978. Sus sucesores fueron modificados de muchas maneras, y en parte fueron modificados de forma radical, pero sin perder la compatibilidad con los anteriores. En el caso del 8088 esto significó un paso hacia atrás, ya que si bien el 8088 disponía del mismo grupo

Page 99: Los Microprocesadores 8086 y 8088

de instrucciones y la misma estructura interna que el 8086, se comunicaba con la memoria mediante un bus de datos de 8 bits, en lugar de 16 bits.

El resto de miembros de esta familia, son desarrollos posteriores del 8086. De manera que por ejemplo el 80186 dispone de nuevas funciones adicionales, mientras que al 80286 se le crearon mas registros en comparación al 8086, así como también se le amplió el área de direcciones. La novedad mas decisiva del 80286 respecto a sus predecesores la representa el modo protegido, que sin embargo no puede utilizarse con el DOS.

Al 80286 le siguió el 80386, que marcó un notable salto en la capacidad de rendimiento. Continuó desarrollando el modo protegido y fue el primero de disponer de un procesador Intel de registros de 32 bits, que sin embargo no pudo utilizarse correctamente en la programación del DOS. Este procesador existe también en una versión SX y DX, que se diferencian únicamente en la frecuencia y en el tamaño del bus de dato; el SX trabaja con un bus de datos de 16 bits, mientras que el DX puede transmitir de una sola vez una palabra de 32 bits mediante su bus.

El micro que sigue al 80386, también llamado "i486" es el 80486. Este se distingue especialmente del 80386 por la integración del coprocesador numérico 80387, por la preparación de un código-caché y el tratamiento más rápido de muchas instrucciones en lenguaje máquina, siendo también compatible con el 8086.

El hito técnico actual lo marca el procesador Pentium que ha mejorado la velocidad de proceso interna en relación con el 486. En determinadas situaciones el procesador esta en situación de procesar dos ordenes consecutivas al mismo tiempo, siempre y cuando la segunda no dependa del resultado de la primera.

Page 100: Los Microprocesadores 8086 y 8088

También la denominación en nueva en el Pentium puesto que se esperaba que tras el 80486 el sucesor se denominaría 80586. Intel sin embargo rompió con la tradición puesto que nombres como 8088 o 80486 no

pueden ser patentados. Esto lo aprovecharon durante largo tiempo otros fabricantes de estos componentes para distribuir procesadores compatibles con Intel, con otros nombres parecidos.

2.- REGISTROS DEL PROCESADOR

En el centro de todos los procesadores se encuentran sus registros, "variables de hardware", en los cuales pueden cargarse datos de la memoria, tratarlos allí con l a ayuda de las instrucciones del lenguaje máquina y finalmente volverlos a escribir en la memoria. Esto es mucho más rápido que la manipulación de información dentro de la memoria, ya que los registros se evacuan directamente en el procesador y por lo tanto no es necesario acceder al bus para poner su contenido a disposición de las instrucciones en lenguaje máquina. Por esta razón los registros del procesador juegan un papel muy importante para la programación del sistema, ya que es mediante estos registros que se desarrollan el flujo de información entre un programa y las funciones del DOS y BIOS que este llama.

Todos los registros tienen un tamaño de 16 bits (2 bytes). Así pueden registrar un valor entre 0 y 65535 (111111111111111b, o FFFFh).

3.- El Procesador 386

El microprocesador 386 (también conocido como 386 DX) supone un paso muy importante frente al 286. Hasta entonces, tanto los micros

Page 101: Los Microprocesadores 8086 y 8088

8088 y 8086 como el 286 eran microprocesadores de 16 bits; trabajaban con 16 bits a la vez en cada ciclo de reloj. Por el contrario, el 386 es un microprocesador de 32 bits, que procesa 32 bits simultáneamente en cada ciclo de reloj. Los ordenadores 386 tienen una velocidad desde 16 a 50 Mhz.

El bus de direcciones del 386 tiene 32 bits. Con 32 bits se pueden redireccionar 232 celdas de memoria lo que equivale a 4096 MB. También en este caso los primeros 1024 k se reparten como los micros 80886 y 286: 640k de memoria convencional y los 364k restantes de memoria superior.

El microprocesador 80386 esta diseñado para soportar aquellos sistemas operativos optimizados para multitarea. El micro 80386 es capaz de direccionar hasta 4 gigabytes de memoria física y 64 tetrabytes de memoria virtual. La gestión de memoria integrada y arquitectura de protección incluye registros de traducción de direcciones y mecanismo de protección para soportar sistemas operativos y hardware avanzado de multitarea.

El transvase entre instrucciones - pipelining -, una elevada anchura del bus y una traducción de direcciones en la pastilla acortan significativamente el tiempo medio de ejecución de la instrucción, manteniendo un alto rendimiento del sistema. Estas características de diseño de arquitectura habilitan al 80386 a ejecutar instrucciones a una frecuencia de 3 a 4 millones por segundo.

Características adicionales se incluyen autotest, acceso directo a la memoria interna (cache) donde se realiza la traducción de página y cuatro nuevos registros de "Breakpoint". El 80386 tiene el código objeto compatible con el 8086, 8088 y 80286.

El procesador 386SX

Los microprocesadores 386SX aparecieron después que el 386 como una solución intermedia en precio y prestaciones entre el 286 y el 386. Los micros 386 puros (386DX) necesitan a su alrededor una circuiteria de 32 bits, mientras que los SX necesitan una circuiteria de 16 bits, mucho mas barata. De esta forma, los fabricantes podían utilizar todos los componentes y la circuitería de 16 bits que usaban para un 286, pero ahora incorporando un microprocesador de 32 bits.

La diferencia entre un ordenador 386DX y un ordenador 386SX se percibe en la velocidad del ordenador, pero desde el punto de vista de las aplicaciones que se pueden ejecutar, es totalmente, indiferente tener un microprocesador 386DX que un 386SX.

El procesador 386SL

El microprocesador 386SL es equivalente al 386SX con la particularidad de estar diseñado especialmente para los ordenadores portátiles, cuidando sus especiales necesidades de baja potencia y consumo. El 386SL posee un modo sleep que utiliza menso energía

Page 102: Los Microprocesadores 8086 y 8088

durante su funcionamiento. Además, existen nuevos recursos para poder minimizar el funcionamiento del ordenador (el consumo de energía) cuando no se utiliza. El resultado es que la batería puede doblar su tiempo en un portátil con 386SL frente a un 386SX. Los microprocesadores 386SL sólo se utilizan en portátiles y notebooks y, hoy en día, son los únicos microprocesadores 386 en los que continúa desarrollando y trabajando.

Tipos de datos

La pastilla microprocesadora 80386 soporta varios tipos de datos además de los soportados por sus predecesores (80x86). Soporta enteros con signo y sin signo de 32 bits y campos de bits de 1 a 32 bits de

longitud. También soporta los tipos de punteros estándares, así como un puntero de desplazamiento de 32 bits y un puntero completo de 48 bits.

Otros registros de 32 bits (ESI, EDI, EBP, ESP) no se pueden dividir en registros de 16 bits. Por otra parte, el puntero de instrucciones EIP, también es un registro de 32 bits, cuyo contenido se modifica dependiendo de los cambios que experimente el flujo del programa que el procesador ejecute. Por lo tanto, EIP se modifica implícitamente mediante instrucciones en código máquina.

ARQUITECTURA BASE

La pastilla microprocesadora 80386 proporciona al programador 32 registros. Estos 32 registros pueden ser divididos en siete categorías principales.

- Registros de propósito general

- Registros de segmentos

- Puntero de instrucción y señalizaciones

- Registros de control

- Registros de direcciones del sistema

- Registros de test.

Estos registros son un superconjunto de los registros del 8086 y el 80286; además, todos los registros de 16 bits del 8086 y el 80286 están contenidos en el microprocesador 80386 de 32 bits.

REGISTROS DE PROPOSITO GENERAL

Los ocho registros de propósito general se utilizan de forma análoga a los ocho registros de propósito general asociados al 80286, excepto que los registros tienen ahora 32 bits. Estos registros son capaces de soportar operandos de datos de 1, 8, 16 y 32 bits y campos de bits de 1 a 32 bits. Los ocho registros son el EAX (acumulador), EBX (base), ECX (contador), EDX (datos), ESP (puntero de pila), EBP (puntero base), ESI (índice fuente) y EDI (índice destino).

Page 103: Los Microprocesadores 8086 y 8088

Para acceder a los 32 bits de un registro, todas las referencias del registro deben comenzar "E". Cada uno de los ocho registros de propósito general puede ser descompuesto en sus equivalentes de 16 bits del 8086/80286 referenciando los registros sin usar el prefijo "E".

REGISTOS DE SEGMENTOS

El microprocesador 80386 contiene seis registros segmento de 16 bits. Los seis registros segmento mantiene los valores del selector en las posiciones de memoria actualmente direccionables. En modo de dirección real, un segmento puede variar desde 1 byte hasta un tamaño de segmento máximo de 64 bytes, o 216. El direccionamiento en modo protegido habilita rangos de segmento desde 1 byte hasta un máximo de 4 gigabytes, o 232 bytes.

4.- Tecnologías Paralelas

COPROCESADOR MATEMÁTICO

El coprocesador matemático esta diseñado para que funcione en paralelo con el microprocesador. El conjunto de instrucciones incluye muchas operaciones extremadamente potentes en coma flotante.

Cuando el microprocesador encuentre una instrucción en coma flotante, envía el código de operación necesario y direcciones de memoria de operandos al coprocesador matemático. Esto libera al microprocesador de ejecutar la siguiente instrucción, mientras el coprocesador matemático realiza simultáneamente el cálculo numérico.

Page 104: Los Microprocesadores 8086 y 8088

El coprocesador matemático puede hacer peticiones de acceso a memoria a través de una canal de datos dedicado permanente en el microprocesador.

OVERDRIVE

El nombre de OverDrive no corresponde explícitamente a un microprocesador de Intel, sino que se utiliza indistintamente para designar tanto un nuevo zócalo que incluye algunas placas madres 486 como el microprocesador que se puede insertar en dicho zócalo, que no es otro que un 486DX2. En definitiva, OverDrive es sinónimo de insertar un nuevo microprocesador en la placa madre, ya sea en un zócalo vacío dispuesto para tal fin o en el zócalo donde reside el antiguo microprocesador. Hay que señalar que solo soportan OverDrive las placas madres 486, ya sean 486DX o 486SX.

PROCESADOR Pentium

Page 105: Los Microprocesadores 8086 y 8088

El Pentium es una CPU que, manteniendo la compatibilidad a nivel binario con procesadores anteriores de la familia 80x86, introdujo en su día varias características hasta entonces desconocidas para los programadores de esta serie de micropocesadores.

Sin duda alguna, uno de los puntos más nefastos de la arquitectura 80x86 es el limitado número de registros del procesador. Debemos tener en cuenta que, sin embargo, esto es una consecuencia lógica al tratarse de una maquina CISC (Complex Instruction Set Chip). Tradicionalmente los procesadores CISC han estado dotado de un menor número de registros a cambio de un variado número de instrucciones, mientras que sus competidores RISC (Reduced Instruction Set Chip) gozan de una gran cantidad de registros a cambio de un menor número de instrucciones.

El Pentium mantiene el mismo juego de registros que sus predecesores de 32 bits, el 386 y el 486, de forma que el programador dispone de registros con una longitud de 32 bits. De estos registros 4 de ellos, denominados EAX, EBX, EFX y EDX también se pueden manejar como registros de 16 bits, tomando en dicho caso los nombre de AX, BX, CX, DX. Estos últimos registros de 16 bits pueden manejarse, además, como pares de registros de 8 bits: AX se divide en AH y AL, BX se divide en BH y BL, CX se divide en CH y CL, y, finalmente, DX lo hace en DH y DL.

Otros registros de 32 bits (ESI, EDI, EBP, y ESP) no se pueden dividir en registros de 16 bits. Por otra parte el puntero de instrucciones EIP, también es un registros de 32 bits, cuyo contenido se modifica dependiendo de los cambios que experimente el flujo del programa que el procesador ejectute. Por lo tanto EIP se modifica explícitamente mediante instrucciones como CALL.

Para alcanzar un elevado rendimiento el Pentium es capaz de ejecutar, en teoría, dos instrucciones de forma simultánea ya que el procesador dispone de dos unidades de enteros y una más de coma flotante. Sin embargo la ejecución de mas de dos instrucciones en paralelo tiene alguna restricciones, ya que el Pentium impone algunas condiciones para que esto sea posible. En concreto, solo se pueden ejecutar dos instrucciones en paralelo si cualquiera de ellas que sea dependiente de los resultados producidos por otra anterior esta alejada de esta al menos tres instrucciones.

Además el Pentium tiene algunas instrucciones implementadas directamente en hardware y otras, debido a su complejidad lo están en microcódigo. Si una de las instrucciones a ejecutar esta implementada de esta última forma no será posible la ejecución en paralelo de dos instrucciones.

Intel dispone de modelos del procesador Pentium preparados para trabajar en equipos multiprocesador con hasta cuatro CPUs. La principal diferencia entre un Pentium normal y otro preparado para multiproceso, es la integración en el chip de la APIC (Advanced Programmable Interrupt Controller).

Page 106: Los Microprocesadores 8086 y 8088

Mediante la APIC integrada en el Pentium se forma un bus especial entre todos los procesadores instalados en el sistema. A través de este bus un procesador puede enviar mensajes y recibirlos de otra CPU.

El Pentium dispone también de una cache integrada de 16 KB, dividida en dos bloques de 8 KB cada una, estando destinado uno de ellos a código y, el otros, a datos. La actualización en memoria RAM de los datos contenidos en la cache interna se lleva a cabo mediante los sistemas Write Back o Write Through, ya que, al menos en modo protegido, esta característica es modificable mediante software, si bien estos cambios no pueden realizarlos las aplicaciones ya que se requiere un nivel de privilegio que, normalmente, no esta disponible para las aplicaciones de los usuarios y solo determinadas capas del sistema operativo son capaces de acceder a esta funcionalidad del procesador.

Desde el punto de vista del rendimiento, es mas eficiente la política Write Back de actualización de la cache y de la memoria RAM del ordenador. Mediante este sistema el contenido de la cache solo se vuelca a la RAM del sistema cuando una línea de la cache es marcada como no valida. Por otro lado el sistema Write Through, refleja de forma inmediata en la RAM del ordenador cualquier cambio que se produzca en la cache del procesador, lo cual produce un mayor consumo de ancho de banda del bus de la CPU.

Al contrario que ocurría con el 486, Intel no ha publicado la información técnica necesaria para manejar directamente por software la memoria interna cache del procesador. Por lo tanto, algunos trucos, que hacían posible dejar residentes de forma permanente en la caché interna del 486 un bloque de código de datos, no puede realizarse en el Pentium.

  Fecha de Introducci

ón

Velocidad del Reloj

Ancho del Bus

Numero de

transistores

Memoria direcciona

ble

Memoria

Virtual

Breve Descripción

Pentium®

Processor

3/22/93 60MHz

66MHz

75MHz

90MHz

100MHz

120MHz

133MHz

150MHz

32 bits

3.1 million

(.8 micron)

4 gigabytes

64

terabytes

La Arquitectura Superescala

r

trajo la 5º generación

de la representaci

ón

del procesador

Page 107: Los Microprocesadores 8086 y 8088

166MHz Intel486 DX

a 33-MHz

5.- Nuevas Tecnologías.

5.1 Procesadores MMX

La tecnología MMX es un mejor realce a la arquitectura Intel que convertirá a los PCs en una mejor plataforma de Multimedia y Comunicaciones. Es el más significativo en la arquitectura Intel desde el procesador i386. Este realce incluye 57 nuevas instrucciones orientadas a operaciones altamente paralelas con Multimedia y los tipos de datos en las Comunicaciones. Estas instrucciones usan una técnica conocida como SIMD (Simple Instrucción, Múltiples Datos) para dar un mejor rendimiento a la Multimedia y la computación de las comunicaciones. Los procesadores que soportan la tecnología MMX serán completamente compatibles con las generaciones anteriores de la Arquitectura Intel y el software instalado.

La tecnología MMX demostrará la calidad de las aplicaciones Multimedia y de las Comunicaciones. Por ejemplo, los juegos usarán 24-bits de color Real en lugar de 8-bits, y con grandes ratios de frames. La tecnología MMX también permitirá más actividades en tiempo real. Un ejemplo sería múltiples canales de audio, vídeo de gran calidad y animación, y conexión a Internet, todo corriendo en la misma aplicación. Esta tecnología MMX será incorporada en general en la generación de procesadores P6.

Las aplicaciones Multimedia han empezado a dirigir los procesadores. Intel formó un grupo de chips y algoritmos expertos para analizar vídeo interactivo, realidad virtual, y aplicaciones en 3D de gran calidad. Se ha descubierto que estas aplicaciones aparentemente diferentes tienen mucho en común. Hacen mucha computación, muchas de ellas en paralelo, y tienden a usar pequeños tipos de datos integer. Estas nuevas instrucciones - usando la arquitectura SIMD - fueron específicamente seleccionadas para ayudar a incrementar la velocidad de la esencia de estos algoritmos y mejorar así todas las aplicaciones.

Algunas de las aplicaciones que se beneficiarán de la tecnología MMX son los gráficos 2D/3D, sonido, reconocimiento de voz, vídeo y compresión de datos. La tecnología MMX es compatible con los entornos de SO. Además, el sistema operativo no necesita modificación de la tecnología MMX para funcionar. Sin embrago, las aplicaciones que más se beneficiarán cuando se incorpore esta tecnología, tienden a ser las aplicaciones de Multimedia y Comunicaciones con cierta cantidad de loops de computación-intensiva repetitivos donde la información pueda ser organizada para ser procesada en paralelo.

Page 108: Los Microprocesadores 8086 y 8088

Es importante destacar que las instrucciones MMX son nuevas instrucciones que no existen en generaciones anteriores de los procesadores de Intel. El soporte de la tecnología MMX debe estar en el procesador para que se ejecuten estas instrucciones.

En lo que corresponde al Software para utilizar estas nuevas aplicaciones, se debe usar la instrucción CPUID en tiempo de ejecución para comprobar el tipo de procesador y saber si soporta esta tecnología. Si la soporta, se usarán las DLLs que usen la tecnología MMX, sino se usarán las DLLs que usan las instrucciones corrientes de la Arquitectura Intel.

Para terminar, los usuarios de Internet quieren interactuar con el mismo entorno, por ejemplo sonido, vídeo y gráficos, como el usuario Multimedia. Se espera que la tecnología MMX realzará los "plug ins" o los "helpers apps" se convertirán muy comunes y activarán incluso mejor el contenido de internet en los PCs con la tecnología MMX.

5.2 P6

Intel sostiene que el P6 es, aproximadamente, el doble de rápido que el Pentium. Pero Intel está comparando el rendimiento estimado de un P6 de 133 Mhz (200 SPECint92) al de un Pentium de 100 Mhz (112,7 SPECint92). El P6 tiene superpipelines, de forma que su frecuencia de reloj es más alta.

Los conductos pipeline del P6 tienen hasta 14 etapas mientras que en el Pentium tienen solamente 5. Las instrucciones se pueden mover más rápido por el pipeline del P6 porque las etapas tienen tiempos de latencia más bajos. Además, P6 posee otras muchas ventajas como pipelines de 3 vías, una cache‚ secundaria integrada en el chip, un bus transaccional de entrada/salida y más unidades de ejecución. Estas son exactamente las prestaciones que distinguen una microarquitectura de otra.

Intel fabrica un Pentium de 133 Mhz con la misma tecnología de proceso que se utiliza para el P6 (0,6 micras, BiCMOS metálico de 4 niveles).

El rendimiento estimado de un Pentium de 133MHz es de 150 SPECint92. Entonces, un P6 que funcione a la misma velocidad de reloj viene a ser un 33% más rápido, y no el doble de rápido.

Novedades del P6.

En el núcleo de la CPU 5,5 millones de transistores, en la caché secundaria integrada 15,5 millones.

Microarquitectura superescalar de 3 vías.

Superpipeline de 14 etapas.

Cinco unidades de ejecución paralelas: dos para enteros, una para carga, una para almacenamiento y una para com flotante.

Page 109: Los Microprocesadores 8086 y 8088

8KB de caché primaria asociada de instrucciones de dos vías y 8 KB de caché primaria asociativa de datos con cuatro vías.

256 KB de cach‚ secundaria SRAM (RAM est tica) en un bus dedicado con la misma velocidad que la CPU, integrada con ‚ esta en un solo paquete PGA cerámico de 387 patillas de cavidad dual

Bus transaccional de entrada/salida y jerarquía de caché no interferente.

Ejecución de variación de orden, predicción din mica de bifurcaciones y ejecución especulativa.

Rendimiento proclamado por Intel: 200 SPECint92 a 133 MHz.

Tecnología de proceso de fabricación BiCMOS metálica de cuatro niveles, 0,6 micras y 2,9 voltios.

Superficie de la CPU: 306 mm2.

Superficie de la SRAM: 202 mm2.

Consumo energético estimado máximo: 20 vatios a 133 Mhz.

Comentarios

Para dejar un comentario, regístrese gratis o si ya está registrado, inicie sesión.

Agregar un comentario Enviar comentario

Los comentarios están sujetos a los Términos y Condiciones

Historia de Intel

Publicado el 21 de January, 2008

Intel fue creada en 1968 por Gordon E. Moore y Robert Noyce. La que empezó creando el corazón de calculadoras se ha convertido en estos 40 años en la empresa más importante en lo que a microprocesadores se refiere. Tanto es así que se llegó a conocer al modelo de ordenador por el nombre de su microprocesador Intel. Pentium, Pentium II etc… Veamos el recorrido de esta gran empresa.

El origen de Intel Inside

Page 110: Los Microprocesadores 8086 y 8088

Rozando la década de los 70 Gordon E. Moore y Robert Noyce decidieron formar una empresa llamada Moore Noyce pero debido al equívoco que provocaba el juego de palabras, lo cambiaron por Integrated Electronic. El resultado de la unión de estas siglas es Intel. El nombre ya estaba en uso por una empresa hotelera así que Moore y Noyce compraron los derechos para poder utilizarlo.

En sus inicios se dedicaban a la creación de memorias, las de más éxito fueron DRAM, SRAM y ROM. En 1971, tan sólo 3 años después de su inauguración, crearon el primer microprocesador. Al contrario de lo que nos puede parecer por lo que conocemos de la empresa, el 4004 no era el microprocesador de un ordenador. Se trataba de un encargo para Busicom, una empresa japonesa que planeaba sacar al mercado una nueva calculadora.

Este primer microprocesador fue creado gracias al ingenio de Ted Hoff que diseñó un chip con una memoria capaz de hacer varias acciones. Este chip es el elemento clave del cuerpo del microprocesador. Posee 4 chips como éste y dos más de memoria. El gran avance era que ya no hacía falta crear un circuito integrado para cada parte de la calculadora, sólo hacía falta uno, el 4004.

Esta claro y es indiscutible que éste fue el primer microprocesador de Intel. Muchos le atribuyen también el mérito de ser el primero de la historia pero como siempre ocurre en la informática ante una afirmación tan contundente surge la polémica y otros consideran que el mérito es de Texas Instruments.

El inicio del casi monopolio

El 4004 era capaz de hacer 60.000 operaciones por segundo, visto su éxito Intel continuó investigando en el campo y poco después sacaba al mercado el 8008, capaz de transmitir el doble de datos, acceder a más memoria, procesar a 8 bits y alcanzar una velocidad de 740 Khz. Era el inicio de la alta velocidad, Intel se incorporaba a aparatos de gasolineras, aeropuertos, salones recreativos, etc.

Intel Corporation se centra en el mundo de los microprocesadores rechazando entrar en el que parece que es el mercado del momento, las computadoras. Su gran oportunidad llega de la mano de IBM en 1980.

La mayoría de nosotros conocemos a IBM por su papel en el mundo de la informática y los ordenadores pero el gigante azul existía mucho antes de integrarse en este mundillo. En 1980 da el gran paso y se pone en contacto con diversas empresas especializadas para comprarles la pieza que formaría parte del IBM PC. La empresa escogida para que participe con su microprocesador es Intel.

Page 111: Los Microprocesadores 8086 y 8088

El IBM PC sale al mercado en 1981, con los microprocesadores de Intel, el 8088 con un chip de 8 bits trabajando a 4,77 MHz y el 8086 cuyo chip era de 16 bits. El IBM PC se vendía a diferentes precios según sus prestaciones. De los dos microprocesadores de Intel, el que tuvo mayor acogida en el mercado fue el 8088 ya que tan sólo les diferenciaban 8 bits y el segundo era mucho más económico. Las características de los microprocesadores más famosos de la historia son:

8 o 16 bits Velocidad de reloj: 5, 8 y 10 Mhz 29.000 transistores usando energía de 3 micras 1 Mega de memoria direccionable

Este ordenador fue también el primero en disponer de MS-DOS como sistema operativo.

IBM fue creada a finales del siglo XIX, en todo ese tiempo consiguió hacerse un nombre en el mercado. La gran confianza que había conseguido depositar en la gente se vio reflejada en el gran éxito de su primera computadora personal. El modelo de IBM se convertiría en un estándar cuando el resto de fabricantes viendo el éxito que tenía trataron de copiar su equipo.

Así pues IBM compartió fama y éxito con Microsoft (por su sistema operativo MS-DOS) y con Intel por su procesador. Era sólo cuestión de tiempo que Intel se hiciera con las cuotas más altas del mercado. La que empezara con un equipo de 12 expertos estaba camino de convertirse en una de las empresas más importantes en el mundo de la informática, una multinacional sin sombra a la que han llegado a acusar de monopolio.

Los sucesores del procesador 8086

El siguiente paso de Intel fue crear en 1982 la nueva saga de microprocesadores con un diseño mucho más moderno y parecido al actual. Se trataba de 80286, 80386, 80386 XS y 80486DX aunque fueron más conocidos por sus tres últimos números: 286, 386, etc.

Los microprocesadores 80286 y 80386SX

Este microprocesador fue creado en 1982, en un principio lo utilizaría IBM para su PC. Pero el sistema de “licencias cruzadas” permitió la aparición de Compaq, una empresa que se dedicó a hacer ordenadores clónicos en masa. Surgió en 1985 lanzando al mercado el clónico de IBM. Compaq convirtió así al 286 en el primer microprocesador utilizado para hacer clónicos. Sus características son:

Velocidad de entre 6 y 25 Mhz. Primero que permite el uso de memoria virtual. Soporta 1 Giga de memoria virtual.

En 1988 aparece una simplificación del 286. El 80386SX es, a grandes rasgos, el mismo microprocesador pero con una arquitectura más simple y barata, de 16 bits. La aparición de estos microprocesadores coincidía con la del entorno gráfico de Windows que había sido desarrollado unos años antes pero que aún no conseguía la plena aceptación del público.

Page 112: Los Microprocesadores 8086 y 8088

El microprocesador 80386

El 386 fue creado en 1986 y se siguió fabricando hasta que en el 2006 Intel anunció el cese de su producción. La principal característica era su arquitectura de 32 bits. Además tenía una velocidad de entre 16 y 40 MHz.

El microprocesador 80486DX

En 1989 llega el Intel 80486DX. Basado en 32 bits y con dos novedades:

Caché nivel 1. Que aceleraba la transferencia de datos del caché al microprocesador.

Co-procesador matemático. El 486 del mismo año alcanzaba velocidades de entre 16 y 100Mhz.

Todos conocen a Pentium

En 1989 un fallo judicial prohibía que se usaran números para dar nombre a los microprocesadores por lo empezaba el tiempo de los Pentium. A estas alturas los procesadores de Intel eran tan conocidos y utilizados que a menudo el público se refería a un modelo de ordenador por el nombre de su procesador Intel. Frases como “me he comprado un Pentium II” estaban integradas en la cultura popular.

El primer Pentium data de mayo de 1993, estos microprocesadores partían de una velocidad de 60 MHz y llegaron a superar lo inimaginable en su época, los 200 MHz. Las innovaciones más destacables que surgirían después fueron: el Pentium Pro, Pentium II, Pentium D y Core 2 Duo, la tecnología móvil Centrino desarrollada para el mercado de portátiles y la tecnología HyperThreading, integrada en los procesadores Intel Pentium 4.

Aunque hasta el momento tan sólo hemos hecho referencia a la relación entre Intel y Pc debemos destacar que a lo largo de esta historia Intel ha firmado también contratos con Apple y otros fabricantes desarrollando así microprocesadores pasa sus computadoras.

A día de hoy uno de los productos más novedosos de Intel es el procesador Intel® Core™2 Duo. Según la propia empresa, permite realizar más tareas a la vez aunque sean “pesadas” sin abandonar la protección del antivirus. Además, se puede actualizar fácilmente el PC a aplicaciones de 64 bits y al sistema operativo Windows Vista Premium*.

Que sea el mayor fabricante de microprocesadores y el que tiene más cuota de mercado con diferencia no implica necesariamente que sea el mejor. Para muchos, Intel es superado por AMD, prestigioso fabricante de microprocesadores con cuotas de mercado muy inferiores a las de Intel pero el único capaz de hacerle un mínimo de sombra.

Expertos en el tema recomiendan comparar las dos marcas utilizando un procesador de cada una en la misma máquina. Este experimento que no está al alcance de todos pero que puede resultar realmente útil.