00 historia de los micros

1,377 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,377
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
20
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

00 historia de los micros

  1. 1. El Microprocesador - Historia UNIDAD CENTRAL DE PROCESO Un ordenador procesa los datos de forma automática para obtener así los resultados que se buscan. Se puede observar que un ordenador es la unión de tres elementos: Dispositivos de entrada Unidad de proceso Dispositivos de salida Se puede decir que la Unidad Central de Proceso dirige y supervisa el conjunto del ordenador, es decir, ejecuta operaciones aritméticas y lógicas con los datos. La Unidad de Proceso ha de tener dos características bien definidas: 1. Ha de ser capaz de reconocer y ejecutar una serie de instrucciones (programa) elementales en base a las cuales se puede realizar cualquier proceso de datos deseado, por complejo que sea éste. 2. Ha de tener separadas dos estados diferentes. En una primera fase ha de poder recibir y memorizar las instrucciones que configuran el proceso pedido (introducción del programa) y en segunda fase debe ejecutar en secuencia las instrucciones recibidas (ejecución del programa). Al realizar esta ejecución se leerán los datos que se necesiten a través de un dispositivo de entrada de datos en el momento en que sean requeridos, realizándose las operaciones que forman el proceso hasta la obtención de los resultados, los cuales serán enviados al usuario a través de un dispositivo de salida. A través de estas características, se puede observar que la Unidad Central de Proceso está compuesta por tres partes fundamentales: * Unidad de Control * Unidad Aritmético-Lógica * Memoria Central Unidad de Control: es la que dirige todas las actividades del ordenador, o sea, es responsable del correcto funcionamiento de los restantes componentes de la Unidad Central de Proceso. Su función es la de posibilitar la actuación coordinada de todos los elementos que, en cada momento, hayan de intervenir en un proceso concreto. Cabe decir, en este sentido, que la Unidad de Control debe gobernar el funcionamiento de los periféricos de entrada, salida y almacenamiento, al tiempo que las actuaciones de la Memoria Central y la Unidad Aritmético-Lógica. Por esta razón es la encargada de interpretar el programa del que recibe las instrucciones, codificadas convenientemente, así como de enviar las órdenes oportunas a las unidades periféricas implicadas. La Unidad de Control utiliza una señal generada por un reloj interno con objeto de sincronizar el funcionamiento operativo de cada elemento. Esta tarea es de carácter fundamental, ya que, en caso contrario, no podría establecerse un ritmo de operación adecuado que controlara la velocidad de trabajo de cada componente en particular. Se comprende fácilmente que de la mayor o menor frecuencia del reloj interno, dependerá la capacidad de hacer un número mayor o menor de instrucciones por segundo. No todas las instrucciones que tenga que ejecutar la Unidad de Control consumen el mismo número de señales generadas por el reloj, sino que las instrucciones complejas Página : 1
  2. 2. El Microprocesador - Historia necesitarán más ciclos que una instrucción simple. En cualquier caso, la Unidad de Control se encargará de las siguientes funciones: * Fijar si el ordenador está en fase de introducción del programa o en fase de ejecución del mismo. * Decodificar la instrucción en curso y, según sea el código de operación de la misma, mandar señal para que actúe la Unidad Aritmético Lógica a una Unidad de Entrada o a una Unidad de Salida. * Verificar de que se efectúan los traspases de información entre los registros y la memoria principal y viceversa. * Llevar el control de cuál es la instrucción que en cada momento se está ejecutando y cuál es la instrucción que deberá de seguirle a continuación. En la etapa de introducción del programa, la Unidad de Control activa la unidad de entrada de datos y controla que las sucesivas instrucciones que componen el programa vayan siendo almacenadas en posiciones contiguas de memoria. En la fase de ejecución del programa, la Unidad de Control decodifica la primera instrucción del programa y según sea la naturaleza de dicha instrucción encarga su ejecución al dispositivo adecuado: las entradas y salidas a los periféricos o al canal (gestiona la unidad de control de cada periférico) y las operaciones aritméticas y lógicas al procesador. UNIDAD ARITMETICO-LOGICA La Unidad Aritmético-lógica es la encargada de descifrar las instrucciones que componen el programa almacenado en la Memoria y encargarse de su ejecución en la secuencia programada, es decir, tiene por misión la ejecución de las operaciones matemáticas básicas y lógicas. Las operaciones básicas son: "+" Sumar "-" Restar "*" Multiplicar "/" Dividir Las operaciones lógicas son: "No" lógico "Y" lógico "O" lógico Sólo con estas operaciones básicas es procesada toda la información y se obtienen los resultados esperados. Es asombroso que, con sólo estas operaciones, se pueda construir todo un sistema de pensamiento válido para cubrir completamente cualquier tipo de necesidad informática. El conjunto formado por la Unidad de Control y la Unidad Aritmético-Lógica se denomina Procesador Central. Para entender mejor todo el proceso de trabajo de un ordenador, se realizará un símil didáctico con el que se tratará de emular el comportamiento de un ordenador mediante un empleado metódico. El ejemplo consta de los siguientes elementos: * Un empleado llamado CONTROL. * Una mesa de escritorio con el siguiente material: - una hoja de papel dividida en casillas numeradas, - un bloc para tomar notas, - una calculadora, - una bandeja para recibir hojas con información, - una bandeja para entregar hojas con los resultados, - un lápiz para escribir y una goma para borrar. Para que CONTROL pueda trabajar, necesita que le pasen los datos necesarios en hojas de papel y depositar todo el conjunto de hojas en la bandeja de recepción de datos. CONTROL pasará las instrucciones recibidas a la hoja dividida en casillas sin indicar ningún comentario sobre la corrección de las mismas. Escritas todas las instrucciones recibidas, CONTROL pasará a su lectura y ejecución. Cogerá la primera casilla y copiará la instrucción depositada en ella en el bloc de registros para analizarla. Si entiende la instrucción realizará los cálculos necesarios, pero si no la entiende, quedará detenido hasta que se le ayude a entenderla. Las instrucciones que es capaz de realizar son las siguientes: * las cuatro operaciones aritméticas, * coger los datos de la bandeja de entrada y copiarlos en la hoja de casillas numeradas, Página : 2
  3. 3. El Microprocesador - Historia * coger los datos de la hoja de memoria, hoja de casillas, y los copiará en una hoja para depositarla en la bandeja de salida, * comparar números y ver cuál es el mayor, * efectuar la instrucción siguiente, * detenerse. Después de cada instrucción, CONTROL leerá la próxima casilla de instrucción y la ejecutará, a medida que se apunta en el bloc de registros cual es la casilla que le toca la próxima vez. Historia de los microprocesadores Página : 3
  4. 4. El Microprocesador - Historia Página : 4
  5. 5. El Microprocesador - Historia Microprocesadores 8086/88, 286, 386, 486 y Pentium. 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 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 Página : 5
  6. 6. El Microprocesador - Historia 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 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 ( 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 Página : 6
  7. 7. El Microprocesador - Historia 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. 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. Aquí se describen los registros del 8086. AX SP CS IP BX BP DS flags CX SI SS DX DI ES Registros Registros Registro puntero Registros punteros de de de instrucciones de datos pila e segmento y flags índices 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 manejo de cadenas. En las instrucciones de desplazamiento y rotación se utiliza como contador de 8 bits. Página : 7
  8. 8. El Microprocesador - Historia 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. 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). REGISTROS DEL 386 Y PROCESADORES SUPERIORES. Página : 8
  9. 9. El Microprocesador - Historia 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. 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). 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). 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 Página : 9
  10. 10. El Microprocesador - Historia 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] 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 BP con prefijo por defecto con prefijo con prefijo BX con prefijo con prefijo por defecto con prefijo Página : 10
  11. 11. El Microprocesador - Historia 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. 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): 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 Página : 11
  12. 12. El Microprocesador - Historia 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 pantalla 14D3:7A16 8E D8 MOV DS,AX ; apuntar segmento de datos a la misma 14D3: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 bits 14D3:7A1E 43 INC BX ; BX=BX+1 -< apuntar al byte de color 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 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. Página : 12
  13. 13. El Microprocesador - Historia Los nuevos procesadores Deschutes, Covington, Mendocino, Willamette, Merced, Katmai, K6, K6 3D y K7 (Próximos procesadores Intel) Parece que Intel no tiene fin. Si ya nos ha sorprendido con todo lo existente hasta hoy, ahora tiene planteado sacar nuevas generaciones de procesadores ultrarrápidos como respuesta a la aplicación de nuevas tecnologías. Todos los procesadores hasta ahora conocidos se van a quedar obsoletos en cuestión de meses (en este caso nos referimos a los Pentium II, ya que todos los demás como el Pentium sin y con MMX lo hicieron hace ya mucho tiempo). Deschutes o Tillamook Este procesador en realidad ya no es una novedad. Es el nombre con el que se conocen a los Pentium II más avanzados, y, con la salida de los dos modelos de 350 MHz y 400 MHz en abril de este año, ya está la casi familia al completo. Tan sólo falta el inminente procesador a 450 MHz, el cual tiene la salida prevista para el cuarto trimestre el 98; pero seguramente se adelantará, ya que decían que el modelo de 400 MHz iba a salir en el tercer trimestre y a salido a comienzos del segundo. Todos estos procesadores son los que vienen después del Pentium II tradicional o Klamath, de 233, 266 y 300 Mhz. La familia Deschutes se caracteriza por reducir el tamaño de los transistores de 0,35 a 0,25 micras y el voltaje de 2,8 a 2,5 voltios. Esto permite un tamaño de CPU más pequeña y un mejor funcionamiento eléctrico: menos calentamiento y por tanto más velocidad. Covington o Celeron y Mendocino Son Pentium II económicos. No es más que intentar conseguir ordenadores con configuración de Pentium II con sólo 150.000 ptas (9.999 dólares). Para ello, aparecerán Covington y Mendocino, el primero de ellos, también conocido como Celeron, es un PII 266 Mhz por 15.000 ptas. (ese es el precio final, ahora está disponible por 23.000) y el segundo un PII 300 Mhz por 45.000 ptas. ¿Cómo se obtiene la reducción del coste? Pues, eliminando varios elementos, como la memoria caché. Mendocino limitará la memoria a 128 Kb. y Covington no tendrá nada. Con esto los actuales Pentium MMX tienen los días contados (los Pentium II están pensados para sustituirlos), junto con las placas con zócalos Socket, los SIMMs, la EDO RAM, el BUS ISA... Willamette Es un procesador de la familia P6 (Pentium Pro y Pentium II), pero incorporará varias características de la familia P7 o Merced. Aparecerá en el cuatro trimestre del 98 y será el último de los procesadores de 0,25 micras. Merced Página : 13
  14. 14. El Microprocesador - Historia Merced o P7 es el gran proyecto de Intel, el primer procesador de 64 bits puros (recuerda que los Pentium actuales tienen el bus de direcciones de 64 bits pero el de datos a 32). Tendrá un ancho de transistor de 0.18 micras y estará basado en la arquitectura IA-64: un juego de instrucciones totalmente nuevo. Intel ya a pagado 700 millones de dólares a Digital para poder usar la tecnología de su procesador Alpha, el cual le había acusado a aquél de copiarle su arquitectura. El paso de 32 a 64 bits supondrá un cambio mucho mayor al de 16 a 32 bits. El sistema de codificación nuevo, que supera al anterior del x86, es el EPIC (Codificación de Instrucciones Explícitamente en Paralelo), que combina tres instrucciones en un único registro de 128 bits, procesable a una mayor velocidad. Otras implementaciones son la arquitectura superescalar, predecodificación y carga especulativa. Intel también asegura que Merced será compatible con todas las aplicaciones de 32 bits existentes, utilizando un decodificador que convertirá las instrucciones x86 en microinstrucciones IA-64. Merced partirá de 600 MHz y llegará hasta 1.000 MHz ó 1 GHz. Tendrá dos versiones: una con una caché L2 dentro de la CPU de 2 ó 4 Mb para ordenadores servidores, y una segunda versión doméstica que tendrá la caché fuera del micro, como los PII actuales. Merced será conectado a la placa base con la ranura Slot 2, y tendrá un bus que funcionará a 100 MHz. Más de 20 empresas, como Microsoft, Bull, Oracle, Compaq y Dell, están desarrollando software para la nueva tecnología. Quizá el primer sistema operativo que explote este procesador sea Summit 3D, compatible UNIX, de 64 bits. También fomentará el desarrollo del llamado "Windows 2000". El lanzamiento de Merced ha sido aplazado hasta finales de 1999/principios de 2000. Slot 2 y PC '98 Si bien el Pentium II actual utiliza el tipo de conexión llamado "Slot 1", Merced (destinado en principio a ordenadores servidores con más de un procesador) se basará en el concepto "Slot 2" para el acoplamiento en la placa base. Este último será usado en todos los Pentium II de gama alta mayores de 300 MHz. Es un bus de 128 bits a una velocidad de 100 Mhz. Durante un tiempo ambos coexistirán, de echo, habrá dos versiones de Pentium II a 333 MHz: Slot 1 y 2. Se acabaron las tarjetas ISA. Las recomendaciones desarrolladas por Microsoft e Intel y recogidas en la propuesta PC98 proponen la eliminación total de slots para tarjetas ISA en la nueva arquitectura de las placas base. Otra de las "recomendaciones" es que los nuevos PCs no podrán soportar periféricos que se conecten a través de los puertos serie y paralelo, excepto las impresoras. Según las especificaciones, los OEMS tienen hasta enero de 1999 para eliminar las tarjetas módems internas que utilizan solos ISA y las tarjetas de sonido. Otras especificaciones hacen especial hincapié en el tema de los gráficos. Así las tarjetas deberán ser alojadas en buses PCI de 64 bits o bien AGP y se prevé que los ordenadores dedicados al entretenimiento incorporen un sintonizador analógico de TV. El PC' 98 es una revolución total al tradicional ordenador que hasta ahora hemos conocido. Katmai En concreto, el diseño de estos nuevos chips estará orientado a conseguir mejoras sustanciales en la renderización de gráficos 3D y el reconocimiento de voz. Lo más interesante es que su velocidad mínima será de 500 MHz. La tecnología Katmai era previamente conocida como MMX 2 y esencialmente representa la siguiente fase de la estrategia de informática visual de Intel. De la misma manera que el MMX, Katmai es en realidad una nueva serie de 70 instrucciones incorporadas en los procesadores Intel (frente a las 57 incorporadas por MMX). Los desarrolladores usarán estas instrucciones para crear entornos informáticos más ricos. Hay que tener en cuenta que el lanzamiento de Katmai coincidirá con mejoras en chips gráficos y de la tecnología AGP (Accelerated Graphics Port) de Intel, con lo que las posibilidades son grandes. Para animar a la aceptación de la nueva tecnología, Intel sacará al mercado programas y aplicaciones que usen la tecnología, mucho antes de que se ponga a la venta el chip. Por su parte, ciertas herramientas de desarrollo para Katmai ya fueron distribuidas en Página : 14
  15. 15. El Microprocesador - Historia 1997. Uno de los campos en los que se espera más desarrollo y más pronto, es precisamente en el de los juegos, por lo que este mercado se introducirá cada vez mas en nuestras casas. La introducción de Katmai se producirá previamente al lanzamiento del chip Merced de Intel, su nueva generación de chips de 64 bits. La nueva tecnología aparecerá exclusivamente a partir de 1999 en procesadores Pentium II. Precisamente, sobre esas fechas, uno de los competidores de Intel, AMD, lanzará también sus nuevos procesadores K6 3D (Chompers) y, seguidamente, su esperado y secreto K7. AMD: K6, K6 3D y K7 AMD es una empresa fabricante de microprocesadores y la principal competencia de INTEL. Sus nuevos procesadores ofrecerán características no incluidas en los Pentium's. Ya han sido presentados el AMD K6 a 266 MHz y 300 MHz, con la tecnología de 0,25 micras y 68 milímetros cuadrados de tamaño. El K6 3D a 300 Mhz saldrá en el tercer trimestre del 98. Incluirá 24 instrucciones MMX nuevas aparte de las ya existentes, bus de 100 MHz y AGP. Está montado unas las placas con el socket 7 utilizado hasta ahora en los Pentium's tradicionales llamada Super 7. Tendrá un rendimiento mayor al Pentium II, y permitirá reproducir MPEG-2 y sonido AC-3 gracias a DirectX 6.0 sin hardware adicional. En el cuarto trimestre del 98 aparecerá K6 + 3D, a 350 Mhz, con 21,3 millones de transistores en 135 milímetros cuadrados. Tendrá caché L2 de 256 Kb. dentro de la CPU. El más futuro es el K7 a 500 MHz para 1999. Será compatible con el Slot 1 del Pentium II, pero se llamará Slot A. El bus será de 333 Mhz, mucho mayor que los de Intel de entonces de 100 MHz. En el 2001 AMD piensa apoderarse del 30% del mercado de procesadores. www.monografias.com Historia de los Microprocesadores Intel Desde 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, así 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 Instrutions set code o computer". Se refiere a los microprocesadores tradicionales que operan con grupos grandes de instrucciones de procesador (lenguaje de maquina). Los microprocesadores INTEL 80xxx están dentro de esta categoría (incluido el Pentium). Los procesadores CISC tienen un Set de instrucciones complejas por naturaleza que requieren varios a muchos ciclos para completarse. RISC Es una abreviación de "Reduced Instructions 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 rápidas. Tecnología utilizada en Main Frame. Página : 15
  16. 16. El Microprocesador - Historia 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). 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 Página : 16
  17. 17. El Microprocesador - Historia 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. 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. 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. Página : 17
  18. 18. El Microprocesador - Historia 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. 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. Página : 18
  19. 19. El Microprocesador - Historia 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. 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) Página : 19
  20. 20. El Microprocesador - Historia 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) 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. Página : 20
  21. 21. El Microprocesador - Historia 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) 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, 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]. Página : 21
  22. 22. El Microprocesador - Historia  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á: 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 Página : 22
  23. 23. El Microprocesador - Historia 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. Posi 00 02 04 06 08 0A 0C 0E 10 12 … 3F 3 ción … C F mem E oria IP CS IP CS IP CS IP CS IP CS … IP C … S Tipo de 00 01 02 03 04 FF Interrupción 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 Página : 23
  24. 24. El Microprocesador - Historia 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). BIBLIOGRAFIA - Página de Internet: jrugeles@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  Trabajo enviado por: Bethsy Diaz b_diaz@ocensa.com.co Página : 24
  25. 25. El Microprocesador - Historia Procesadores: Aspectos tecnológicos Historia: La historia de los microprocesadores se inicia en 1948 con la invención del transistor por John Bardeen y Walter H. Brattain en los Laboratorios Bell de AT&T [6], y la posterior introducción del circuito integrado IC, en 1959 [4] por Robert Noyce en Fairchild Semiconductors y Jack Kilby en Texas Instruments. • El 15 de Noviembre de 1971 Intel introduce el 4004 que corría a 108 KHz con 2.300 transistores y una tecnología de 10 micras. Este procesador fue desarrollado por encargo de una compañía japonesa para una calculadora (Busicom). • En Abril de 1972 se lanza el 8008 a 200 KHz con 3.500 transistores y tecnología de 10 micras. • En Abril de 1974 se lanza el 8080, a 2 MHz con 6.000 transistores y tecnología de 6 micras. Este procesador es el que inicia la era de la micro computadora, pues originó el primer ordenador personal, el Altair 8800. El Sistema Operativo CP/M fue escrito para él [5], y Microsoft fue fundada para producir un intérprete de Basic para dicho procesador. Su éxito fue tal que incluso fue clonado, dando lugar al Z-80 construido por Zilog, una empresa constituida por ingenieros que provenían de Intel. Este procesador incluía un superconjunto de las instrucciones del 8080 con lo que podía correr el software de aquel. • En Junio de 1978 Intel lanza el 8086 a 5 MHz con 29.000 transistores. Una versión reducida, el 8088 fue el elegido para motorizar el primer IBM-PC. §2 Proceso de fabricación: • Fabricación de un monocristal de silicio de cientos de quilos de peso; unos 20 cm x 150 cm, en un proceso muy lento (10 a 40 mm/hora) a alta temperatura (1370º C). • Rectificado de la superficie y corte de sus extremos hasta conseguir un cilindro perfecto. • Separación de obleas por corte mediante sierra de diamante. Cada una de menos de 1 mm de grosor (se obtienen miles de ellas de cada barra). • Las obleas se pulen hasta conseguir un acabado especular y se recubren de una primera capa aislante de óxido de silicio mediante deposición de vapor. • Fotolitografía: Deposición de una película de material fotosensible; a continuación se proyecta sobre esta película la primera máscara. Un ataque caústico disuelve las zonas en que el material fotosensible ha sido expuesto a la luz, con lo que se crean zanjas microscópicas (0.25, 0.18 y 0.13 micras). • El proceso sigue con el dopaje, que consiste en crear capas con propiedades semiconductoras (que serán posteriormente parcialmente disueltas) mediante la adición de impurezas. El Pentium III utiliza más de 20 máscaras para crear seis capaz de interconexiones de metal y semiconductoras. • Las zonas de interconexión se efectúan mediante metalización. Actualmente (2002) se utiliza principalmente aluminio, pero empieza a utilizarse cobre que es mejor conductor que aquel, y permite interconexiones más pequeñas (aunque presenta más problemas de corrosión que el aluminio). • Testeo y corte: Se marcan las unidades malas y se cortan con laser o diamante. (tasa de errores). • Encapsulado y comprobación final a diversas velocidades y temperaturas. Estado actual: Se pretende llegar a monocristales de 30 cm de diámetro con unos 670 circuitos por oblea. Se está en 140 millones de transistores en un solo circuito integrado (Pentium III Xeon). Página : 25
  26. 26. El Microprocesador - Historia §3 Características distintivas: §3.1 Tamaño de los registros internos (8088 16; 80386 y siguientes 32 bits). §3.2 Anchura del bus de datos (8088 8; 80286 16; 80486 32; Pentium 64 bits) §3.3 Anchura del bus de direcciones (8088 20; 80286 24; 80486 32 y Pentium 36 bits). §3.4 Velocidad §3.5 Encapsulado §3.6 Voltaje §4 Velocidad No hay un estándar para medirla. Uno de los pocos datos objetivos es la frecuencia a que funciona, aunque existen otros muchos factores, tales como el número de instrucciones que es capaz de ejecutar en cada ciclo (arquitectura súper escalar), los juegos de instrucciones para aplicaciones específicas como la tecnologías MMX, las extensiones SIMD o 3DNow, la ejecución dinámica, arquitectura de bus independiente, etc. Tiempos medios por instrucción 8086 y 8088: Un promedio de 12 ciclos por instrucción 80286 y 80386: Un promedio de 4.5 ciclos por instrucción (el 80386 fue el primer procesador de ordenador personal en implementar arquitectura de ejecución paralela). 80486: Media de 2 ciclos por instrucción Pentium y AMD serie K6: 2 instrucciones por ciclo. Pentium Pro, Celerón, Athlon y Duron: Por encima de 3 instrucciones por ciclo. A partir del Intel 80486 los procesadores funcionan a una velocidad mayor que lo que pueden hacer los circuitos y buses de la placa-base (bus externo). La situación actual es que las velocidades típicas de las placas-base son de 60- 66- 100- 133 MHz mientras que los procesadores funcionan a frecuencias múltiplos de aquellas; típicamente de 1x hasta 10x, es decir, desde 60 a 1330 MHz. Dado que el procesador está conectado con el bus externo, es fácil comprender que en su interior existan buses que trabajan a distintas velocidades. Para distinguirlos es frecuente referirse a la velocidad del bus más rápido como velocidad del núcleo y a la del bus que conecta con el bus externo como velocidad del bus frontal ("Front-side bus"). §4.1 Tecnología MMX La tecnología MMX ("MultiMedia eXtensions") fue introducida en 1.997 por Intel en sus procesadores Pentium para mejorar la manipulación de imágenes y tratamiento de codecs de audio/video, mediante un conjunto de 57 nuevas instrucciones, así como una nueva capacidad denominada SIMD ("Single Instrucction Multiple Data"). §4.2 Extensiones SIMD Con la aparición del Pentium III en 1.999 se introdujeron nuevas mejoras en la tecnología MMX, introduciendo 70 nuevas instrucciones denominadas SSE ("Streaming SIMD Extensions") o KNI ("Katmai News Instrucctions") puesto que Katmai que era el nombre clave del Pentium III antes de su lanzamiento. Las instrucciones SSE son especialmente adecuadas para decodificación de MPEG2, que es el codec utilizado normalmente en los DVDs, procesamiento de gráficos tridimensionales y software de reconocimiento de voz. Página : 26
  27. 27. El Microprocesador - Historia §4.3 3DNow La tecnología 3DNow es la respuesta AMD a las SSE de Intel. Se introdujo por primera vez en 1.998 en la serie K6 de procesadores, y son un conjunto de 21 instrucciones que mejoran las capacidades multimedia de estos procesadores. Enhanced 3DNow añade otras 24 nuevas instrucciones a las anteriores. §4.4 Arquitectura DIB La arquitectura de bus dual independiente DIB ("Dual Independent Bus") consiste en que el procesador dispone de dos buses exteriores que pueden funcionar simultanea e independientemente. El principal es el que comunica con el bus de la placa-base (bus del sistema); el segundo (bus de apoyo), comunica el procesador con la cache L-2. Para sacar pleno rendimiento de este segundo bus, se sacó esta caché de la placa-base y se la acercó al procesador, permitiendo que funcionase a la misma velocidad que el núcleo (la caché L-1 siempre ha estado incluida en el procesador). §4.5 Sobrecarga La Sobrecarga ("Overclocking") consiste en aumentar la eficiencia del procesador aumentando su velocidad de trabajo (frecuencia) por encima de la prevista por el fabricante. Aspectos relativos al marcaje de la velocidad de los procesadores por los fabricantes; remarcado y mercado negro de procesadores; limitación de la velocidad por el fabricante. Nota: La compañía Intel proporciona gratuitamente un software especial, denominado Processor Frequency ID Utility support.intel.com que permite a los usuarios determinar si un determinado procesador Intel está operando a la frecuencia correcta. Además permite identificar el tipo de procesador utilizado en el sistema y algunas de sus características como tipo y tamaño de caché; encapsulado y tecnología (MMX y SMID). El programa existe en dos versiones. Una de ellas corre bajo Windows, la otra, denominada "bootable", no necesita un Sistema Operativo instalado para correr [2]; puede instalarse en un disquete y arranca antes que el SO. §5 Encapsulados: Concepto: Relación con el tipo de zócalo. Existen varios tipos de encapsulado: • DIP "Dual In-line Package". El 8088 estaba encapsulado en un DIP de 40 pines. • PGA "Pin Grid Array". Se utiliza a partir de la introducción de 80286 en 1.982. Existen muchas versiones: Socket 1, 169 pines; Socket 2, 238 p; Socket 3, 237 p; Socket 4, 273 p; Socket 5, 320 p; Socket 6, 235 p [1]; Socket 7, 321 p y Socket 8, 387 p. • SE "Single Edge". Ranura 1 cartuchos SEC (Single Edge Card) y SEP (Single Edge Connector) de 242 pines. Ranura 2 con 330 pines. Servidores y sistemas de altas prestaciones con Pentium Xeon. Historia: Zócalos de patillas planas y torneadas; origen de los zócalos LIF y ZIF. Se requieren unas 100 libras de fuerza para insertar un procesador de 169 pines en un zócalo estándar (unos 45 Kg). Página : 27
  28. 28. El Microprocesador - Historia Se diseñaron los zócalos LIF ("Low Insertion Force") que limitaban a 60 libras (unos 27 Kg), y los ZIF ("Zero Insertion Force") que no requieren ninguna fuerza para su inserción o retirada. §6 Voltaje e intensidad: Consideraciones generales sobre el binomio tensión-intensidad, potencia consumida (W = V * I). La potencia consumida se disipa en forma de calor ( 1 Wh = 860.42 calorías). El procesador es el elemento de mayor consumo de la placa-base; tendencia a reducir el consumo/calentamiento. Los primitivos procesadores, incluyendo el 8088 funcionaban a 5 V., al igual que el resto de los componentes de la placa-base. Posteriormente el voltaje ha ido reduciéndose: 3.5; 3.3; ... 2.2 V. Aunque la tensión de los elementos de la placa- base se ha mantenido en 3.3 V. (tecnología de reducción de voltaje VRE), de forma que la tensión del núcleo es distinta que la del resto del sistema. Métodos de regulación del voltaje: • Ninguno (sistemas antiguos) • Selección mediante jumpers en la placa-base • Selección automática (pines VID). §6.1 Disipadores: §6.1.1 Motivo de su utilización. §6.1.2 Tipos: Activos y pasivos (con y sin ventilador o elemento de refrigeración incorporado). • Todos los tipos: Colocación (grasa de transferencia térmica, generalmente un compuesto de plata que facilita la transmisión del calor desde el chip al disipador). • Disipadores activos: Están provistos de un ventilador que en ocasiones puede ser de velocidad variable en función de la temperatura, de unas 500 r.p.m. Su capacidad se mide en términos del caudal de aire que proporcionan, generalmente expresado en CFM (Cubic Feet per Minute), equivalentes a 28.316 litros/minuto; la presión no suele estar indicada, pero se expresa en PSI ("Pounds per Square Inch"), equivalentes a 0.488 gr/cm2. Notas de calidad: Preferiblemente con rodamientos, su MTBF de unas 50.000 horas. Formas de alimentación de los disipadores activos. §6.1.3 Programas de control de temperatura. SpeedFan: http://www.almico.com/speedfan.php Control de velocidad de los ventiladores en función de la temperatura del equipo. Además, si sus discos disponen de la capacidad SMART [3], puede también controlar la temperatura de los discos. SiGuardian y HDD Temperature de PalickSoft http://www.siguardian.com/ Control de temperatura de la placa base y de los discos si disponen de capacidad SMART. Existe una versión freeware (limitada) y otra profesional. El programa puede incluso enviar mensajes de advertencia por e-mail si la temperatura de los discos sube excesivamente. Página : 28
  29. 29. El Microprocesador - Historia Nota: Este tipo de programas solo funcionan con sistemas (placa-base y discos) modernos. Inicio. [1] No llegó a instalarse en ningún sistema. [2] Esta versión es útil para diagnóstico de sistemas que tienen problemas de arranque o que no tienen instalado aún el SO. [3] SMART - Self Monitoring Analisis and Reporting Technology. Una técnica que incrementa la fiabilidad de los discos intentando adelantarse a la posible aparición de fallos, de forma que permita al usuario guardar los datos antes de su pérdida. Surge de la unión de dos técnicas: La PFA de IBM y la IntelliSafe de Compaq, que condujeron al actual SMART. Aunque específicamente se admite que hay fallos no predecibles (entre los que se encuentran determinados fallos mecánicos y eléctricos, incluyendo eventuales caídas de tensión), otros en cambio pueden ser detectados por determinados síntomas previos, la alteración de determinados "parámetros de predicción" que son constantemente monitorizados y pueden activar una alarma; Entre estos están la variación de la altura del cabezal sobre la superficie durante el vuelo y determinados síntomas mecánicos. [4] "The Birth Of The Microprocessor" por Federico Faggin. BYTE Magazine Marzo de 1.992 [5] Gary Kildall: "CP/M: A Family of 8-and 16-Bit Operating Systems". BYTE Magazine Junio de 1.999 [6] Más información en http://www.pbs.org/transistor Inicio. Página : 29

×