Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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).
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.
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.
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).
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.
Los 40 pines del 8088 en modo mínimo tienen las siguientes funciones:
1. GND (Masa)
2. A14 (Bus de direcciones)
3. A13 (Bus de direcciones)
4. A12 (Bus de direcciones)
5. A11 (Bus de direcciones)
6. A10 (Bus de direcciones)
7. A9 (Bus de direcciones)
8. A8 (Bus de direcciones)
9. AD7 (Bus de direcciones y datos)
10. AD6 (Bus de direcciones y datos)
11. AD5 (Bus de direcciones y datos)
12. AD4 (Bus de direcciones y datos)
13. AD3 (Bus de direcciones y datos)
14. AD2 (Bus de direcciones y datos)
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:
DT/R /SSO
S2 IO/M Significado
S1 S0
1 0 0 0 Acceso a código (instrucciones)
1 0 0 1 Lectura de memoria
1 0 1 0 Escritura a memoria
1 0 1 1 Bus pasivo (no hace nada)
0 1 0 0 Reconocimiento de interrupción
0 1 0 1 Lectura de puerto de entrada/salida
0 1 1 0 Escritura a puerto de E/S
0 1 1 1 Estado de parada (Halt)
QS1 QS0 Significado
0 0 No hay operación
0 1 Primer byte del código de operación
1 0 Se vacía la cola de instrucciones
1 1 Siguiente byte de la instrucción
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).
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:
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 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").
00 02 04 06 08 0A 0C 0E 10 12 3FC 3FE
Posición memoria
IP CS IP CS IP CS IP CS IP CS .... IP CS
Tipo de interrupción 00 01 02 03 04 FF
Como se puede observar, la tabla ocupa el primer kilobyte de memoria (256 tipos * 4
bytes/tipo = 1024 bytes).
Una vez que se pusieron en la pila los flags, CS e IP (en ese orden), la CPU hace IF <- 0
(deshabilita interrupciones) y TF <- 0 (deshabilita la ejecución de instrucciones paso a
paso) para que el manejador de interrupción no sea interrumpido, y carga IP y CS con
los valores hallados en la tabla, con lo que se transfiere el control al manejador de
interrupción, que es el procedimiento encargado de atender la fuente de interrupción.
Luego de haber hecho su trabajo, el manejador debe terminar indicándole al controlador
de interrupciones que ya fue atendido el pedido y finalmente deberá estar la instrucción
IRET, que restaura los valores de los registros IP, CS y el registro de indicadores. El
manejador debe poner en la pila todos los registros que use y restaurar sus valores antes
de salir (en orden inverso al de su introducción en la pila), en caso contrario el sistema
corre peligro de "colgarse", ya que, al ocurrir la interrupción en cualquier momento de
la ejecución del programa, se cambiarían los valores de los registros en el momento
menos esperado, con consecuencias imprevisibles.
Las interrupciones por software ocurren cuando se ejecuta la instrucción INT tipo. De
esta manera se pueden simular interrupciones durante la depuración de un programa. El
tipo de interrupción (para poder buscar el vector en la tabla) aparece en la misma
instrucción como una constante de 8 bits. Muchos sistemas operativos (programas que
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.
- 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 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.
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).
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.
Las caracter�sticas generales del 286 son: tiene un bus de datos de 16 bits, un bus
de direcciones de 24 bits (16 Mb); posee 25 instrucciones m�s que el 8086 y admite 8
modos de direccionamiento. En modo virtual permite direccionar hasta 1 Gigabyte. Las
frecuencias de trabajo t�picas son de 12 y 16 MHz, aunque existen versiones a 20 y 25
MHz. Aqu�, la instrucci�n m�s lenta es la misma que en el caso del 8086, solo que
emplea 29 ciclos de reloj en lugar de 206. Un 286 de categor�a media (16 MHz)
podr�a ejecutar m�s de medio mill�n de instrucciones de estas en un segundo, casi
15 veces m�s que un 8086 medio a 8 MHz. Sin embargo, transfiriendo datos entre
registros la diferencia de un procesador a otro se reduce notablemente, aunque el 286 es
m�s r�pido y no s�lo gracias a los MHz adicionales.
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 486 se diferencia del 386 en la integraci�n en un solo chip del coprocesador 387.
Tambi�n se ha mejorado la velocidad de operaci�n: la versi�n de 25 MHz dobla en
t�rminos reales a un 386 a 25 MHz equipado con el mismo tama�o de memoria
cach�. La versi�n 486sx no se diferencia en el tama�o del bus, tambi�n de 32 bits,
sino en la ausencia del 387 (que puede ser a�adido externamente). Tambi�n existen
versiones de 486 con buses de 16 bits, el primer fabricante de estos chips, denominados
486SLC, ha sido Cyrix. Una tendencia iniciada por el 486 fue la de duplicar la
velocidad del reloj interno (pongamos por caso de 33 a 66 MHz) aunque en las
comunicaciones con los buses exteriores se respeten los 33 MHz. Ello agiliza la
ejecuci�n de las instrucciones m�s largas: bajo DOS, el rendimiento general del
sistema se puede considerar pr�cticamente el doble. Son los chips DX2 (tambi�n hay
una variante a 50 MHz: 25 x 2). La culminaci�n de esta tecnolog�a viene de la mano
de los DX4 a 75/100 MHz (25/33 x 3).
Estos procesadores disponen de 14 registros de 16 bits (el 286 alguno m�s, pero no
se suele emplear bajo DOS). La misi�n de estos registros es almacenar las posiciones
de memoria que van a experimentar repetidas manipulaciones, ya que los accesos a
memoria son mucho m�s lentos que los accesos a los registros. Adem�s, hay ciertas
operaciones que s�lo se pueden realizar sobre los registros. No todos los registros
sirven para almacenar datos, algunos est�n especializados en apuntar a las direcciones
de memoria. La mec�nica b�sica de funcionamiento de un programa consiste en
cargar los registros con datos de la memoria o de un puerto de E/S, procesar los datos y
devolver el resultado a la memoria o a otro puerto de E/S. Obviamente, si un dato s�lo
va a experimentar un cambio, es preferible realizar la operaci�n directamente sobre la
memoria, si ello es posible. A continuaci�n se describen los registros del 8086.
AX SP CS IP
BX BP DS flags
CX SI SS
DX DI ES
Registros
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.
BX = Base.
Se usa como registro base para referenciar direcciones de memoria con
direccionamiento indirecto, manteniendo la direcci�n de la base o comienzo de tablas
o matrices. De esta manera, no es preciso indicar una posici�n de memoria fija, sino la
n�mero BX (as�, haciendo avanzar de unidad en unidad a BX, por ejemplo, se puede
ir accediendo a un gran bloque de memoria en un bucle).
CX = Contador.
Se utiliza com�nmente como contador en bucles y operaciones repetitivas de
manejo de cadenas. En las instrucciones de desplazamiento y rotaci�n se utiliza como
contador de 8 bits.
DX = Datos.
Usado en conjunci�n con AX en las operaciones de multiplicaci�n y divisi�n
que involucran o generan datos de 32 bits. En las de entrada y salida se emplea para
especificar la direcci�n del puerto E/S.
- Registros de segmento:
- Registros �ndices:
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).
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.
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
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).
ADD AX,0fffh
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
MOV DX,AX
MOV AH,AL
MOV AX,[57D1h]
MOV AX,ES:[429Ch]
MOV AX,dato
MOV AX,ES:dato
CS SS DS ES
IP S� No No No
SP No S� No No
BP con prefijo por defecto con prefijo con prefijo
BX con prefijo con prefijo por defecto con prefijo
SI con prefijo con prefijo por defecto con prefijo
DI con prefijo con prefijo por defecto con prefijo(1)
(1) Tambi�n por defecto en el manejo de cadenas.
3.5. - LA PILA.
Como se puede ver, la segunda instrucci�n (bytes de c�digo m�quina 0B8h, 0 y 0B8h colocados
en posiciones consecutivas) est� colocada a partir del desplazamiento 7A13h, ya que la anterior que
ocupaba 3 bytes comenzaba en 7A10h. En el ejemplo cargamos el valor 0B800h en DS apoy�ndonos en
AX como intermediario. El motivo es que los registros de segmento no admiten el direccionamiento
inmediato. A medida que se van haciendo programas, el ensamblador da mensajes de error cuando se
encuentra con estos fallos y permite ir aprendiendo con facilidad las normas, que tampoco son
demasiadas. La instrucci�n MOV BYTE PTR [BX],32 equivale a decir: «poner en la direcci�n de
memoria apuntada por BX (DS:[BX] para ser m�s exactos) el byte de valor 32». El valor 0F8h del
c�digo m�quina de la �ltima instrucci�n es el complemento a dos (n�mero negativo) del valor 8.
Normalmente, casi nunca habr� que ensamblar a mano consultando unas tablas, como hemos hecho
en este ejemplo. Sin embargo, la mejor manera de aprender ensamblador es no olvidando la estrecha
relaci�n de cada l�nea de programa con la CPU y la memoria.
Volver al �ndice+
El microprocesador 8086/8088
La arquitectura de estos dos procesadores es similar, la únicas diferencias entre ambos
es que el diseño del 8088 tiene un bus de 8 bits para los datos, mientras que el 8086
puede transferir 16 bits a la vez en el mismo bus. Y la cola de instrucciones del 8088 es
de 4 bytes y la del 8086 es de 6 bytes. Sus características que destacan son el bus de
direcciones de 20 bits, con lo que pueden direccionar hasta 1 Megabyte de memoria
RAM, y hacer el manejo de memoria en forma segmentada en bloques de 64K bytes.
Para esto cuenta con 4 registros de segmento de 16 bits cada uno (CS, SS, DS y ES) y
con registros de 16 bits como offset (IP, SP, DI y SI principalmente).
Estos microprocesadores tiene 2 procesadores conectados internamente, como se puede
apreciar en la figura 2.1, estos procesadores son:
EU
Unidad de ejecución (Execution Unit).
BIU
Unidad de interfaz con el Bus (Bus Interface Unit).
EL 80286.
EL 80386.
EL PROCESADOR 1486
Aunque vaya a ejecutar las mismas tareas que con Microsoft Word
5.5 (es decir, escribir cartas) necesitara una computadora mas
potente.
3.- EL COPROCESADOR.
1 0 0 1 Lectura de memoria
1 0 1 0 Escritura a memoria
0 1 0 0 Reconocimiento de interrupción
0 0 No hay operación
IP CS IP CS IP CS IP CS IP CS …… IP CS
Tipo de 00 01 02 03 04 FF
Interrupción
CONTENIDO
Historia de los microprocesadores Intel
• CISC
• RISC
• Características mas importantes de los microprocesadores Intel
• Los microprocesadores 8086 y 8088
• Historia del 8086/8088
• Arquitectura de los procesadores 8088 y 8086
• Unidad aritmética lógica
• Sistema de Control de la Unidad de Ejecución
• Cola de Instrucciones
• Registros de la unidad de interfaz con el bus
• Lógica de control del bus
• Modos de direccionamiento del 8086/8088
• Estructuras de interrupciones del 8086/8088
Comentarios
El microprocesador 80286
por Dario Alejandro Alpern
Introducción
El 80286 revisa cada acceso a instrucciones o datos para comprobar si puede haber una
violación de los derechos de acceso. Este microprocesador está diseñado para usar un
sistema operativo con varios niveles de privilegio. En este tipo de sistemas operativos
hay un núcleo que, como su nombre indica, es la parte más interna del sistema
operativo. El núcleo tiene el máximo privilegio y los programas de aplicaciones el
mínimo. Existen cuatro niveles de privilegio. La protección de datos en este tipo de
sistemas se lleva a cabo teniendo segmentos de código (que incluye las instrucciones),
datos (que incluye la pila aparte de las variables de los programas) y del sistema (que
indican los derechos de acceso de los otros segmentos).
Para un usuario normal, los registros de segmentación (CS, DS, ES, SS) parecen tener
los 16 bits usuales. Sin embargo, estos registros no apuntan directamente a memoria,
como lo hacían en el 8086. En su lugar, apuntan a tablas especiales, llamadas tablas de
descriptores, algunas de las cuales tienen que ver con el usuario y otras con el sistema
operativo. Actualmente a los 16 bits, cada registro de segmento del 80286 mantiene
otros 57 bits invisibles para el usuario. Ocho de estos bits sirven para mantener los
derechos de acceso (sólo lectura, sólo escritura y otros), otros bits mantienen la
dirección real (24 bits) del principio del segmento y otros mantienen la longitud
permitida del segmento (16 bits, para tener la longitud máxima de 64 KB). Por ello, el
usuario nunca sabe en qué posición real de memoria está ejecutando o dónde se ubican
los datos y siempre se mantiene dentro de ciertas fronteras. Como protección adicional,
nunca se permite que el usuario escriba en el segmento de código (en modo real se
puede escribir sobre dicho segmento). Ello previene que el usuario modifique su
programa para realizar actos ilegales y potencialmente peligrosos. Hay también
provisiones para prever que el usuario introduzca en el sistema un "caballo de Troya"
que pueda proporcionarle un estado de alto privilegio.
El 80286 tiene cuatro nuevos registros. Tres de ellos apuntan a las tablas de descriptores
actualmente en uso. Estas tablas contienen información sobre los objetos protegidos en
el sistema. Cualquier cambio de privilegio o de segmento debe realizarse a través de
dichas tablas. Adicionalmente hay varios indicadores nuevos.
Existen varias instrucciones nuevas, además de las introducidas con el 80186. Todas
estas instrucciones se refieren a la gestión de memoria y protección del sistema
haciendo cosas tales como cargar y almacenar el contenido de los indicadores especiales
y los punteros a las tablas de descriptores.
Como en modo real, en modo protegido se utilizan dos componentes para formar la
dirección física: un selector de 16 bits se utiliza para determinar la dirección física
inicial del segmento, a la cual se suma una dirección efectiva (offset) de 16 bits.
La diferencia entre los dos modos radica en el cálculo de la dirección inicial del
segmento. En modo protegido el selector se utiliza para especificar un índice en una
tabla definida por el sistema operativo. La tabla contiene la dirección base de 24 bits de
un segmento dado. La dirección física se obtiene sumando la dirección base hallada en
la tabla con el offset.
Segmentación
Terminología
Tablas de descriptores
Estas tablas definen todos los segmentos utilizados en un sistema basado en el 80286.
Hay tres tipos de tablas que mantienen descriptores: la tabla de descriptores globales o
GDT (Global Descriptor Table), la tabla de descriptores locales o LDT (Local
Descriptor Table) y la tabla de descriptores de interrupción o IDT (Interrupt Descriptor
Table). Todas las tablas son arrays de longitud variable, que pueden tener entre 8 y
65.536 bytes. Cada tabla puede mantener hasta 8192 descriptores. Los 13 bits más
significativos de un selector se usan como un índice dentro de la tabla de descriptores.
Las tablas tienen registros asociados que contienen la dirección base de 24 bits y el
límite de 16 bits de cada tabla.
Cada una de las tablas tiene un registro asociado. Estos se llaman GDTR, LDTR, IDTR
(ver las siglas en inglés que aparecen en el párrafo anterior). Las instrucciones LGDT,
LLDT y LIDT cargan (Load) la base y el límite de la tabla de descriptores globales,
locales o de interrupción, respectivamente, en el registro apropiado. Las instrucciones
SGDT, SLDT y SIDT almacenan (Store) los valores anteriormente mencionados de los
registros en memoria. Estas tablas son manipuladas por el sistema operativo, por lo que
las instrucciones de carga son instrucciones privilegiadas (sólo se ejecutan si el CPL
vale cero).
Esta tabla contiene descriptores que están disponibles para todas las tareas del sistema.
La GDT puede contener cualquier clase de descriptores de segmento excepto los
relacionados con interrupciones. Todos los sistemas basados en el 80286 en modo
protegido contienen una GDT. Generalmente la GDT contiene los segmentos de código
y datos usados por el sistema operativo y los TSS (cuya explicación aparece más
adelante) y los descriptores para las LDT en un sistema.
La primera entrada de la GDT corresponde al selector nulo y no se usa.
La tercera tabla necesaria para sistemas 80286 que operan en modo protegido es la IDT.
Esta tabla contiene los descriptores que apuntan a la ubicación de hasta 256 rutinas de
servicio de interrupción (interrupt handlers). Debe conocerse cuál es el valor máximo
del tipo de interrupción que se va a utilizar y poner el límite del IDTR igual a ocho
veces ese valor (ya que, como se explicó anteriormente, cada descriptor ocupa ocho
bytes). Cada interrupción utilizada por el sistema debe tener una entrada propia en la
IDT. Las entradas de la IDT se referencian mediante instrucciones INT, vectores
externos de interrupción y excepciones (interrupciones internas del microprocesador).
Como se indicó anteriormente, existen cuatro registros del 80286 que apuntan a las
tablas de descriptores.
LDTR y TR: Estos registros mantienen los selectores de 16 bits para el descriptor de
LDT y de TSS, respectivamente. Estos segmentos, como son específicos para cada
tarea, se definen mediante valores de selector almacenado en los registros de segmento
del sistema. Éste apunta a un descriptor apropiado (de LDT o TSS). Nótese que un
registro descriptor del segmento (invisible para el programador) está asociado con cada
registro de segmento del sistema.
Descriptores
El objeto apuntado por el selector se llama descriptor. Los descriptores son cantidades
de ocho bytes que contienen atributos sobre una región de memoria (es decir, un
segmento). Estos atributos incluyen la dirección base de 24 bits, la longitud de 16 bits,
el nivel de protección (de 0 a 3), permisos de lectura, escritura o ejecución (esto último
para segmentos de código), y el tipo de segmento. A continuación se muestra el formato
general de un descriptor.
El byte de derechos de acceso es el que define qué clase de descriptor es. El bit 4 (S)
indica si el segmento es de código o datos (S = 1), o si es del sistema (S = 0). Veremos
el primer caso.
Los segmentos de código cuyo bit C vale 1, pueden ejecutarse y compartirse por
programas con diferentes niveles de privilegio (ver la sección sobre protección, más
adelante).
Como se pudo observar hay atributos en común entre los distintos descriptores: P, DPL
y S.
Ahora se verá con más detalle los diferentes descriptores del sistema.
Las compuertas de tarea se usan para cambiar tareas. Las compuertas de tarea
sólo se pueden referir a un TSS y por lo tanto sólo se utiliza el campo del
selector, siendo ignorado el de offset.
Aparte del valor del selector, cada registro de segmento tiene un registro caché de
descriptor del segmento invisible para el programador. Al cargar un registro de
segmento con un nuevo selector, el descriptor de ocho bytes asociado con ese selector
se carga automáticamente en el chip. Una vez que se hizo esto, todas las referencias a
ese segmento utilizan la información almacenada en el caché en vez de volver a acceder
el descriptor. Como los cachés de los descriptores sólo varían cuando se carga un
registro de segmento, los programas que deben modificar las tablas de descriptores
deben volver a cargar los registros de segmento apropiados después de cambiar el valor
de un descriptor.
Protección
El 80286 tiene cuatro niveles de protección que están optimizados para soportar las
necesidades de los sistemas operativos multitarea para aislar y proteger los programas
de un usuario de otros y del sistema operativo. Los niveles de privilegio controlan el uso
de instrucciones privilegiadas, instrucciones de entrada/salida, y el acceso a segmentos
y descriptores de segmento. A diferencia de los sistemas tradicionales basados en
microprocesadores donde esta protección sólo se logra a través de un hardware externo
muy complejo con el correspondiente software, el 80286 provee esta protección como
parte de la unidad de manejo de memoria (MMU: Memory Management Unit)
incorporada.
Reglas de privilegio
Privilegio de entrada/salida
El nivel de privilegio de entrada/salida (IOPL, que ocupa los bits 13 y 12 del registro de
indicadores) define el nivel menos privilegiado para el cual se pueden realizar
instrucciones de I/O (IN, OUT, INS, OUTS, REP INS, REP OUTS). Si CPL > IOPL,
al ejecutar alguna de estas instrucciones se generará una excepción 13. IOPL también
afecta otras instrucciones, como STI, CLI y el prefijo LOCK. Además afecta si IF
(indicador de interrupciones) puede cambiarse cargando un valor en el registro de
indicadores (mediante POPF). Si CPL es menor o igual que IOPL, entonces IF se
puede cambiar. Si CPL > IOPL el valor de IF no varía mediante la ejecución de la
instrucción POPF (en este caso no se genera ninguna excepción).
Validación de privilegio
Las instrucciones para verificar punteros son ARPL, VERR, VERW, LSL y LAR.
Todas estas instrucciones ponen el indicador de cero a uno si la verificación se pudo
realizar; si no se puede realizar pone ZF <- 0, en vez de generar una excepción 13 como
hace con otras instrucciones.
Acceso a descriptores
Básicamente hay dos tipos de accesos de segmentos: aquéllos que se refieren a los
segmentos de código como las transferencias de control, y aquéllos que se refieren a
segmentos de datos. Para determinar si una tarea puede acceder un segmento se necesita
conocer el tipo de segmento a acceder, las instrucciones utilizadas, el tipo de descriptor
utilizado y los CPL, RPL y DPL, como se describió más arriba.
Cada vez que una instrucción carga los registros de segmentos de datos (DS, ES), el
80286 hace validaciones de protección. Los selectores almacenados en esos registros
sólo pueden referirse a segmentos de datos o segmentos de código con habilitación de
lectura. Las reglas de accesos de datos se especificaron anteriormente. La única
excepción a estas reglas la constituye el segmento de código legible con el bit C = 1 de
los derechos de acceso que se puede acceder desde cualquier nivel.
Finalmente se realizan las verificaciones de privilegio. El CPL se compara con EPL y si
EPL es más privilegiado que CPL se genera una excepción 13 (Violación general de
protección).
Las reglas para el segmento de pila son ligeramente diferentes que aquéllos referidos a
los segmentos de datos. Las instrucciones que cargan los selectores en SS deben
referirse a descriptores de segmentos de datos con habilitación de escritura (ya que la
pila debe poder ser leída y escrita). El DPL y RPL deben ser iguales al CPL. Cualquier
otro tipo de descriptor o una violación de privilegio causará una excepción 13. Si el
segmento de pila está marcado como no presente (P = 0) se genera una excepción 12. La
excepción 11 ocurre en el caso de segmentos de código o datos no presentes.
Los tipos de descriptores que se usan para transferencia de control son los siguientes:
Las transferencias de control sólo pueden ocurrir si la operación que cargó el selector se
refiere al tipo correcto de descriptor. Cualquier violación de estas reglas causará una
excepción 13 (por ejemplo, un salto a través de una compuerta de llamado, o un IRET
desde una subrutina de interrupción).
Para que el sistema sea aún más seguro, todas las transferencias de control también se
sujetan a las reglas de privilegio, que indican lo siguiente:
Todas las transferencias de control que cambian CPL dentro de la misma tarea causan
un cambio de pilas como resultado del cambio de privilegio. Los valores iniciales de
SS:SP para los niveles de privilegio 0, 1 y 2 se almacenan en el segmento de estado de
tarea (ver más abajo el formato de dicho segmento). Durante la ejecución de JMP o
CALL, el nuevo puntero de pila se carga en los registros SS y SP y el puntero previo se
pone en la nueva pila.
Los descriptores de compuertas siguen las mismas reglas de privilegio que los datos,
esto es, una tarea puede acceder una compuerta sólo si el EPL (Effective Privilege
Level) es igual o más privilegiado que el DPL (Descriptor Privilege Level). Las
compuertas siguen las reglas de privilegio de las transferencias de control y por lo tanto
sólo pueden transferir el control a un nivel más privilegiado.
Cambio de tareas
Cada tarea debe tener un TSS asociado. El TSS actual se identifica mediante un registro
especial en el 80286 llamado TR (Task State Segment Register). Este registro contiene
un selector que se refiere al descriptor de TSS de la tarea. Un registro de base y límite
del segmento (invisible para el programador) asociado con TR se carga cada vez que
TR se carga con un nuevo selector. El retorno de una tarea se realiza mediante la
instrucción IRET. Cuando se ejecuta IRET, el control retorna a la tarea que había sido
interrumpida. El estado de la tarea que se está ejecutando se almacena en el TSS y el
estado de la vieja tarea se restaura de su propio TSS. Algunos bits en el registro de
indicadores y la palabra de estado de la máquina (MSW) dan información sobre el
estado de una tarea que son útiles para el sistema operativo. El bit 14 del registro de
indicadores (NT = Nested Task) controla la función de la instrucción IRET. Si NT = 0,
dicha instrucción realiza un retorno normal, pero si NT = 1, IRET realiza una operación
de cambio de tarea para volver a ejecutar la tarea anterior. El bit NT se pone a cero o
uno de la siguiente manera: cuando una instrucción CALL o INT inicia un cambio de
tarea, el nuevo TSS se marca como ocupado y el puntero del nuevo TSS se carga con el
selector del viejo TSS. El bit NT de la nueva tarea se pone entonces a 1. Una
interrupción que no causa un cambio de tareas pondrá a cero el bit NT (el bit NT será
restaurado a su valor anterior luego de la ejecución del manejador de interrupciones). El
bit NT también puede ser afectado por las instrucciones POPF o IRET.
Como el 80286 comienza la ejecución (después de activar el pin RESET) en modo real,
es necesario inicializar las tablas del sistema y los registros con los valores apropiados.
Los registros GDTR e IDTR deben referirse a tablas de descriptores globales y de
interrupción (respectivamente) que sean válidas.
Para entrar en modo protegido debe ponerse el bit PE (bit 0 de MSW) a 1 utilizando la
instrucción LMSW. Después de entrar en modo protegido, la siguiente instrucción
deberá ser un JMP intersegmento para cargar el registro CS y liberar la cola de
instrucciones. El paso final es cargar todos los registros de segmentos de datos con los
valores iniciales de los selectores.
Aparte de las instrucciones del 8086/8088 y las nuevas del 80186, el 80286 posee
nuevas instrucciones. Éstas corresponden todas al modo protegido y son las siguientes:
ARPL dest, src (Adjust Requested Privilege Level of selector): Compara los bits RPL
de dest contra src. Si el RPL de dest es menor que el RPL de src, los bits RPL del
destino se cargan con los bits RPL de src y el indicador ZF se pone a uno. En caso
contrario ZF se pone a cero. Ver nota 1.
CLTS (Clear Task Switched Flag): Pone a cero el indicador TS (bit 3 de la palabra de
control de la máquina MSW). Ver nota 2.
LAR dest, src (Load Access Rights): El byte más alto del registro destino se carga con
el byte de derechos de acceso del segmento indicado por el selector almacenado en src.
Pone ZF a uno si se puede realizar la carga. Ver notas 1 y 3.
LGDT mem64 (Load Global Table register): Carga el valor del operando en el registro
GDTR. Antes de ejecutar esta instrucción la tabla debe estar en memoria. Ver nota 2.
LIDT mem64 (Load Interrupt Table register): Carga el valor del operando en el registro
IDTR. Antes de ejecutar esta instrucción la tabla debe estar en memoria. Ver nota 2.
LMSW {reg16|mem16} (Load Machine Status Word): Carga el valor del operando en la
palabra de estado de la máquina MSW. El bit PE (bit 0) no puede ser puesto a cero por
esta instrucción, por lo que una vez que se cambió a modo protegido, la única manera
de volver a modo real es mediante un RESET del microprocesador. Ver nota 2.
LSL dest, src (Load Segment Limit): Carga el límite del segmento de un selector
especificado en src en el registro destino si el selector es válido y visible en el nivel de
privilegio actual. Si ocurre lo anterior el indicador ZF se pone a uno, en caso contrario,
se pone a cero. Ver notas 1 y 3.
LTR {reg16|mem16} (Load Task Register): Carga el selector indicado por el operando
en el registro TR. El TSS (Task State Segment) apuntado por el nuevo TR deberá ser
válido. Ver notas 1 y 2.
SGDT mem64 (Store Global Descriptor Table register): Almacena el contenido del
registro GDTR en el operando especificado.
SIDT mem64 (Store Interrupt Descriptor Table register): Almacena el contenido del
registro IDTR en el operando especificado.
Notas:
2) Si se ejecuta en modo protegido en alguno de los anillos 1-3 ocurre una excepción 13
(Violación general de protección).
Intel 80286
De Wikipedia, la enciclopedia libre
Fabricantes:
• Intel
• AMD
• Harris Corporation
• Siemens AG
Velocidad de CPU: 6 MHz a 25
MHz
Procesos: 1.5 µm
(Longitud de canal del
MOSFET)
Conjunto de x86
instrucciones:
Socket: PLCC de 68
pines
El Intel 80286 (llamado oficialmente iAPX 286, también conocido como i286 o 286) es
un microprocesador de 16 bits de la familia x86, que fue lanzado al mercado por Intel el
1 de febrero de 1982. Cuenta con 134.000 transistores. Las versiones iniciales del i286
funcionaban a 6 y 8 MHz, pero acabó alcanzando una velocidad de hasta 25 MHz. Fue
el microprocesador elegido para equipar al IBM Personal Computer/AT, lo que causó
que fuera el más empleado en los compatibles PC (más propiamente compatibles AT)
entre mediados y finales de los años 80 .
Tras las versiones iniciales a 6 y 8 MHz, Intel lanzó un modelo a 12,5 MHz. AMD y
Harris ampliaron esa velocidad a 20 MHz y 25 MHz, respectivamente. En promedio, el
80286 tenía una velocidad de unas 0,21 instrucciones por ciclo de reloj.1 El modelo de 6
MHz operaba a 0,9 MIPS, el de 10 MHz a 1,5 MIPS, y el de 12 MHz a 2,66 MIPS.2
El rendimiento del 80286 es más del doble que el de sus predecesores (los Intel 8086 e
Intel 8088) por ciclo de reloj. De hecho, el aumento de rendimiento por ciclo de reloj
puede ser el mayor entre las diferentes generaciones de procesadores x86. El cálculo de
los modos de direccionamiento más complejos (como base + índice) utilizaban menos
ciclos de reloj porque eran realizados por un circuito especial en el 286; el 8086, ha de
realizar el cálculo de la dirección efectiva en la ULA general, lo que consume muchos
ciclos. Además, operaciones matemáticas complejas (como MUL/DIV) ocupan menos
ciclos que en el 8086.
Al tener un bus de direcciones de 24 bits, es capaz de direccionar hasta 16 MB (16
MiB) de memoria RAM, mientras que el 8086 sólo puede 1 MB. Aunque MS-DOS
puede utilizar la RAM adicional ( memoria extendida ) mediante una llamada a la BIOS
INT 15h, AH=87h), como disco RAM o mediante emulación de memoria expandida
previamente habilitada mediante software la memoria extendida, pocos ordenadores
basados en el i286 tuvieron más de 1 MB de memoria.
A pesar de su gran popularidad, hoy en día quedan pocos ordenadores con el i286
funcionando.
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).
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.
Las caracter�sticas generales del 286 son: tiene un bus de datos de 16 bits, un bus
de direcciones de 24 bits (16 Mb); posee 25 instrucciones m�s que el 8086 y admite 8
modos de direccionamiento. En modo virtual permite direccionar hasta 1 Gigabyte. Las
frecuencias de trabajo t�picas son de 12 y 16 MHz, aunque existen versiones a 20 y 25
MHz. Aqu�, la instrucci�n m�s lenta es la misma que en el caso del 8086, solo que
emplea 29 ciclos de reloj en lugar de 206. Un 286 de categor�a media (16 MHz)
podr�a ejecutar m�s de medio mill�n de instrucciones de estas en un segundo, casi
15 veces m�s que un 8086 medio a 8 MHz. Sin embargo, transfiriendo datos entre
registros la diferencia de un procesador a otro se reduce notablemente, aunque el 286 es
m�s r�pido y no s�lo gracias a los MHz adicionales.
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 486 se diferencia del 386 en la integraci�n en un solo chip del coprocesador 387.
Tambi�n se ha mejorado la velocidad de operaci�n: la versi�n de 25 MHz dobla en
t�rminos reales a un 386 a 25 MHz equipado con el mismo tama�o de memoria
cach�. La versi�n 486sx no se diferencia en el tama�o del bus, tambi�n de 32 bits,
sino en la ausencia del 387 (que puede ser a�adido externamente). Tambi�n existen
versiones de 486 con buses de 16 bits, el primer fabricante de estos chips, denominados
486SLC, ha sido Cyrix. Una tendencia iniciada por el 486 fue la de duplicar la
velocidad del reloj interno (pongamos por caso de 33 a 66 MHz) aunque en las
comunicaciones con los buses exteriores se respeten los 33 MHz. Ello agiliza la
ejecuci�n de las instrucciones m�s largas: bajo DOS, el rendimiento general del
sistema se puede considerar pr�cticamente el doble. Son los chips DX2 (tambi�n hay
una variante a 50 MHz: 25 x 2). La culminaci�n de esta tecnolog�a viene de la mano
de los DX4 a 75/100 MHz (25/33 x 3).
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.
BX = Base.
Se usa como registro base para referenciar direcciones de memoria con
direccionamiento indirecto, manteniendo la direcci�n de la base o comienzo de tablas
o matrices. De esta manera, no es preciso indicar una posici�n de memoria fija, sino la
n�mero BX (as�, haciendo avanzar de unidad en unidad a BX, por ejemplo, se puede
ir accediendo a un gran bloque de memoria en un bucle).
CX = Contador.
Se utiliza com�nmente como contador en bucles y operaciones repetitivas de
manejo de cadenas. En las instrucciones de desplazamiento y rotaci�n se utiliza como
contador de 8 bits.
DX = Datos.
Usado en conjunci�n con AX en las operaciones de multiplicaci�n y divisi�n
que involucran o generan datos de 32 bits. En las de entrada y salida se emplea para
especificar la direcci�n del puerto E/S.
- Registros de segmento:
- Registros �ndices:
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
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.
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
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).
ADD AX,0fffh
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
MOV DX,AX
MOV AH,AL
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
CS SS DS ES
IP S� No No No
SP No S� No No
BP con prefijo por defecto con prefijo con prefijo
BX con prefijo con prefijo por defecto con prefijo
SI con prefijo con prefijo por defecto con prefijo
DI con prefijo con prefijo por defecto con prefijo(1)
(1) Tambi�n por defecto en el manejo de cadenas.
3.5. - LA PILA.
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.
Microprocesadores
• Introducción
• Procesador
• La unidad de procesamiento central
• Unidad central de procesamiento (CPU)
• Avance tecnológico de los procesadores
• 8088/8086
• 80286
• 80386 DX y SX
• 80486DX/80486SX
• 80486DX2, 80486DX4, 80486SX2
• Overdrives
• La familia Pentium
• Pentium Overdrive
• Pentium Pro
• Ejecución dinámica
• El futuro próximo de Intel
• Anexos
INTRODUCCION
El microprocesador es uno de los logros más sobresalientes del siglo XX. Esas
son palabras atrevidas, y hace un cuarto de siglo tal afirmación habría parecido
absurda. Pero cada año, el microprocesador se acerca más al centro de nuestras
vidas, forjándose un sitio en el núcleo de una máquina tras otra. Su presencia ha
comenzado a cambiar la forma en que percibimos el mundo e incluso a nosotros
mismos. Cada vez se hace más difícil pasar por alto el microprocesador como
otro simple producto en una larga línea de innovaciones tecnológicas.
Ninguna otra invención en la historia se ha diseminado tan aprisa por todo el
mundo o ha tocado tan profundamente tantos aspectos de la existencia humana.
Hoy existen casi 15,000 millones de microchips de alguna clase en uso (el
equivalente de dos computadoras poderosas para cada hombre, mujer y niño del
planeta). De cara a esa realidad, ¿quién puede dudar que el microprocesador no
sólo está transformando los productos que usamos, sino también nuestra forma
de vivir y, por último, la forma en que percibimos la realidad?
No obstante que reconocemos la penetración del microprocesador en nuestras
vidas, ya estamos creciendo indiferentes a la presencia de esos miles de
máquinas diminutas que nos encontramos sin saberlo todos los días. Así que,
antes de que se integre de manera demasiado imperceptible en nuestra diaria
existencia, es el momento de celebrar al microprocesador y la revolución que ha
originado, para apreciar el milagro que es en realidad cada uno de esos chips de
silicio diminutos y meditar acerca de su significado para nuestras vidas y las de
nuestros descendientes.
Procesador
La unidad de procesamiento central
La unidad de procesamiento central (CPU) es donde se manipulan los datos. En
una microcomputadora, el CPU completo está contenido en un chip muy
pequeño llamado microprocesador. Todas las CPU tienen por lo menos dos
partes básicas, la unidad de control y la unidad aritméticológica. Todos los
recursos de la computadora son administrados desde la unidad de control,
cuya función es coordinar todas las actividades de la computadora. La unidad de
control contiene las instrucciones de la CPU para llevar a cabo comandos. El
conjunto de instrucciones, que está incluido dentro de los circuitos de la
unidad de control, es una lista de todas las operaciones que realiza la CPU. Cada
instrucción en el conjunto de instrucciones es acompañado por un
microcódigo, que son instrucciones muy básicas que le dicen a la CPU cómo
ejecutar las instrucciones. Cuando la computadora corre un programa, busca los
comandos del programa dentro del conjunto de instrucciones de la CPU y las
ejecuta en orden. La unidad aritmético-lógico (ALU)es cuando la unidad de
control encuentra una instrucción que involucra aritmética o lógica, le pasa el
control al segundo componente de la CPU. La ALU incluye un grupo de
registros, es decir, memoria construida directamente en la CPU que se usa para
guardar datos que están siendo procesados por la instrucción actual.
x = 4195835#
y = 3145727#
z = x - (x / y) * y
PentiumTest = z
End Function
Recientemente han aparecido versiones del Pentium a 75, 90, 100 y 133
MHz, siendo el último, presentado el 23 de octubre, uno a 120 MHz
diseñado especialmente para ordenadores portátiles.
Pentium Overdrive
¡Cómo no íbamos a disponer de una versión "light" del Pentium compatible pin
a pin con nuestros microprocesadores 80486DX y DX2!
El 18 de septiembre de 1995 Intel anuncia la disponibilidad de un nuevo modelo
procesador de mejora Pentium Overdrive a 83 MHz (además del modelo a 63
MHz que ya existía) que permite la actualización de los microprocesadores
80486 DX, DX2 y SX. Compatible pin a pin con estos microprocesadores en
Pentium Overdrive integra la tecnología del Pentium en 3,3 voltios y 0'6 micras.
Aparte de ser como un Pentium genuino cabe destacar la presencia de una
memoria cache de 32 Kb, un regulador de tensión para reducir la tensión de 5 a
3,3 voltios, disipador y ventilador integrado y una circuitería interna que
incrementa en dos veces y media la frecuencia del bus del sistema (33 MHz * 2'5
= 82'5 MHz). El incremento medio en las prestaciones respecto a un 80486 a 66
MHz es de un 50 por ciento aunque en aplicaciones puntuales (AutoCAD 13)
puede ser de un 96 por ciento, lo que lo sitúa en las prestaciones de un Pentium
genuino a 75 MHz. El precio de venta al público es de unas 40.000 pesetas más
IVA.
Antes de comprarlo os recomiendo que llevéis el ordenador a la tienda para que
sepan qué zócalo tiene para su actualización.
Pentium Pro
El Pentium Pro a 133 MHz, que fue
presentado el día 3 de noviembre de 1995 en
el hotel Ritz de Madrid es el primer
microprocesador de la tercera generación de
la gama Pentium. Está preparado
específicamente para ejecutar aplicaciones
compiladas y desarrolladas para 32 bits.
Algunas aplicaciones desarrolladas para
entornos de 16 bits tienen una reducción de
rendimiento en su ejecución en sistemas
basados en un Pentium Pro respecto a los
Pentium normales a 133 MHz. Perfectamente
compatible con sus hermanos menores incorpora nuevas mejoras, de las cuales
destaca la ejecución dinámica, tema al que dedicaremos un apartado especial y
la inclusión de una memoria cache secundaria integrada en el encapsulado del
chip.
Fabricado en una geometría de 0'6 micras, Intel está realizando sus desarrollos
con vistas a reducirla a 0'35 micras como la de los Pentium actuales a 133 MHz,
lo que reducirá su temperatura y podrá elevarse la frecuencia de reloj hasta los
200 MHz.
Intel ha puesto mucho esfuerzo en probar el Pentium Pro para intentar salvarse
de los numerosos bugs que manchan su gran prestigio. Intel nos ofreció
participar en las pruebas de sus Pentium Pro, petición a la cual respondimos
afirmativamente, pero al final, la drástica reducción de unidades nos hicieron
quedar fuera de los elegidos (sólo se probaron 100 unidades que estarían más
que asignadas de las más de 10.000 peticiones que recibió Intel a través de
Internet).
El Pentium Pro no es compatible con las placas que existen en el mercado. El
motivo principal es la inclusión de la memoria cache secundaria dentro del chip.
Se utiliza un bus interno que está optimizado para trabajar con las
temporizaciones de conexión directa, lo cual imposibilita la conexión de la
memoria cache externa (a mi entender no tiene la suficiente justificación,
puesto que a nivel de SETUP la memoria cache secundaria se puede desactivar e
incluso anular retirando los integrados de sus zócalos. El tema de la
sincronización ya es otro cantar y probablemente sea el motivo real).
Este nuevo producto tiene un bus que ha sido diseñado para conectar varios
Pentium Pro en paralelo que soporta el protocolo MESI, es un microprocesador
de 32 bits que incorpora una instrucción más (mover datos condicionalmente)
que supone una mayor predicción de ramificaciones en la ejecución. Tiene 21
millones de transistores, 5'5 millones en el núcleo y 15'5 millones en la memoria
cache secundaria. La CPU consta de dos chips colocados en cavidades
independientes conectadas internamente. El chip correspondiente a la memoria
cache es más pequeño que el del chip del núcleo, ya que la disposición de los
transistores permite una mayor concentración.
Ejecución dinámica
La ejecución dinámica es uno de los dos elementos clave en la ganancia de
prestaciones del Pentium Pro. Esta nueva forma de "pensar" del
microprocesador está basada en la combinación de tres técnicas: la predicción
de ramificaciones múltiples, el análisis del flujo de datos y la ejecución
especulativa.
Predicción de ramificaciones múltiples.
El Pentium Pro utiliza un algoritmo de predicción de ramificaciones múltiples
para anticipar saltos en la ejecución del flujo de instrucciones. Predice dónde
puede encontrar en la memoria las siguientes instrucciones que debe ejecutar
con una precisión del 90%. Esto lo logra porque además de extraer
instrucciones para su ejecución, se adelanta y busca anticipadamente posibles
nuevas instrucciones de programa.
Ejecución especulativa
Cuando el Pentium Pro ejecuta instrucciones (5 por ciclo de reloj) utiliza la
ejecución especulativa. Esto significa que las instrucciones no se ejecutan en el
mismo orden con el que entran al microprocesador, sino que se ejecutan en un
"orden desordenado", lo que paradójicamente hace que sea más eficaz.
En el paso final, todos esos datos desordenados generados por la predicción de
ramificaciones, se ordenan y se ensamblan esos paquetes de unidades de
proceso para montar el orden lógico en la secuencia de ejecución del programa.
ANEXOS
TECNOLOGÍA
INTEL LANZA UN CHIP DE ALTA CAPACIDAD
Intel ha anunciado el lanzamiento al mercado de un chip que ha despertado
esperanzas de un gran desarrollo de la industria informática y de las
capacidades de los microprocesadores, pero cuyo principio fundamental ya
existía desde 1995. El logro de este prodigioso chip está en que dobla la
capacidad de los transistores que lo forman. Hasta ahora, para aumentar las
capacidades de los procesadores se intentaba condensar miles de microscópicos
transistores en el menor espacio posible, para que cada uno de ellos almacenara
un bit. Lo que se consigue con esta tecnología es que cada transistor almacene
dos bits en vez de uno. Y se aspira a que en un futuro sean más de dos los bits
albergados en cada transistor.
El mayor fabricante de chips del mundo, presentó el nuevo chip el miércoles en
Japón. La novedad se aplicará en una primera fase a cámaras digitales,
teléfonos móviles y asistentes personales, pues consiste en memorias flash, las
que no se borran aunque el aparato se desconecte. Por ahora, no se usará en las
memorias RAM, las que usan los ordenadores, y que pierden lo almacenado
cuando se corta el fluido eléctrico. De todos modos, el nuevo chip abre un
número ilimitado de posibilidades, y una carrera por su aplicación con otros
fabricantes de chips que conocen métodos parecidos o que trabajan en otros
sistemas para aumentar la capacidad de los microprocesadores.
La tecnología de StrataFlash ya se conocía. En 1994 Intel anunció este sistema,
presentando un año después un prototipo que luego no desarrolló. Desde
entonces hasta hoy, otros fabricantes como Sandisk e ISD han utilizado
tecnología similar, aunque Intel ha sido la primera empresa en hacer su uso
posible a gran escala. Tanto que espera colocar en el mercado de 1 a1 10
millones de unidades de estos StrataFlash en 1998. La competencia no está
parada: ISD ya tiene chips que almacenan varios bits por transistor de manera
similar a StrataFlash, SanDisk dispone de un sistema parecido en sus tarjetas
PC, alcanzando capacidades de almacenamiento similares. Lucent Technologies
prepara para muy pronto otro tipo de procesadores de señal digital (DSP), un
tipo de chips utilizados en teléfonos celulares y estaciones de comunicación
digital, que siendo un 30% más baratos de los usados hoy, requieren sólo una
quinta parte de energía y memoria que los chips de la competencia. En el
terreno académico, la Universidad de North Carolina en Charlotte anunció el
descubrimiento de un chip capaz de usar tecnología eléctrica y óptica a la vez, lo
que aumenta su velocidad 100.000 veces en relación a los modelos actuales,
aunque de momento se trata sólo de un prototipo desarrollado por Raphael Su y
Qi Zhang, ingenieros eléctricos.
TECNOLOGÍA
EL ÚLTIMO CHIP DE SUN ALCANZA LOS 600 MHZ
En una carrera imparable plagada de nuevos chips cada vez más potentes y
métodos de fabricación innovadores, Sun Microsystems presentó el lunes un
potente microprocesador que alcanza los 600 Mhz de velocidad de reloj, un
rendimiento que dobla la nueva generación Pentium II recién estrenada por
Intel, que se presentó como un gran éxito con "sólo" 300 Mhz.
El nuevo chip de Sun, el UltraSparc-III constituye la tercera generación de su
familia Sparc, el corazón de las estaciones de trabajo y de los servidores de Sun.
Una de sus características más destacables es su escalabilidad, es decir, la
posibilidad de añadir más chips al mismo sistema, de manera que trabajando en
paralelo, multipliquen las posibilidades de esta tecnología. La empresa asegura
que mil de estos chips funcionando juntos pueden rivalizar con los
superordenadores más potentes de hoy. Las aplicaciones para la red forman
parte de la comercialización del prodigioso chip que, aplicado a los servidores,
les permitiría soportar un mayor número de usuarios, abasteciéndolos de más
información y más rápidamente que los modelos actuales. Los primeros de estos
servidores estarán preparados para el próximo verano, y se gobernarán por el
sistema operativo de la casa, el Solaris.
Sun se adelanta así a Intel, ya que el UltraSparc-III utiliza una tecnología de 64
bits, que Intel planeaba presentar como novedad en breves días bajo el nombre
clave de "Merced". Sin embargo, el gigante de los microprocesadores no se ha
quedado atrás y ha presentado a su vez una nueva generación de chips para
servidores conocidos como i960 RISC que, diseñados exclusivamente para redes
de telecomunicaciones, aceleran el tráfico de datos a través de este tipo de
máquinas gracias al protocolo I20. Marcas como Acer America, AST Computer,
Compaq, Dell, IBM, y Hewlett-Packard han anunciado ya que utilizarán este
chip en sus nuevos modelos de servidores, a presentar durante los próximos tres
meses.
Intel: un gigante en el Valle del Silicio
Pocas compañías pueden desafiar el claro dominio de Intel en la
industria de los semiconductores, ni siquiera las rivales de Japón y
Corea del Sur
Louise Kehoe FT Intel es una organización única en su categoría. El gigante del
Valle del Silicio _el fabricante de chips más grande del planeta, con un valor de
mercado superior a los 134 millardos de dólares_ produce la mayoría de los
microprocesadores empleados por la industria de la computación personal en
todo el planeta.
La enorme escala de las operaciones de Intel empequeñecen las de casi todos
sus rivales. La compañía cerró 1997 con un volumen de ventas anual de 25,1
millardos de dólares, un aumento significativo en comparación con los 20,8
millardos de dólares facturados en 1996. Gracias a un margen bruto de
ganancias cercano a 60%, la compañía genera ingresos a un ritmo que supera
con creces el de cualquiera de sus competidores.
Esto le permite a Intel invertir fuertes sumas en investigación y desarrollo de
productos, además de nuevas plantas y equipos. Este año, por ejemplo, Intel
tiene un presupuesto de investigación y desarrollo de 2,8 millardos de dólares y
planea desembolsar otros 5,3 millardos de dólares en nuevas líneas de
producción. Este monto triplica las inversiones que realizará en este campo
cualquier otro fabricante de semiconductores.
Si se toman en cuenta la participación dominante en el mercado de los
microprocesadores Pentium y el rápido ritmo de avance de la compañía en el
desarrollo de nuevas tecnologías, el liderazgo de Intel pudiera parecer
inexpugnable.
Sin embargo, varios cambios en el mercado de las computadoras personales
están creando nuevos desafíos para Intel, los cuales pudieran mermar su
crecimiento en el futuro. En particular, el lanzamiento al mercado de la 'PC
básica', que se vende en Estados Unidos por menos de mil dólares, ha obligado a
Intel a replantear su estrategia. La compañía mejora incesantemente el
rendimiento de sus microprocesadores, por lo que una PC comprada un año o
incluso seis meses atrás queda opacada por los nuevos modelos de mayor
velocidad.
En el pasado, con el lanzamiento al mercado de cada nueva generación de
microprocesadores, Intel solía disminuir los precios de las versiones anteriores,
por lo que los precios de PC permanecían bastante estables, al tiempo que el
rendimiento se incrementaba con celeridad. Microsoft y otras compañías de
software colaboraban en el ascenso de Intel mediante el desarrollo de
programas cada vez más complejos que requieren hardware más moderno.
Luego vino la 'PC básica' que, en términos generales, tiene como base un
microprocesador menos potente que alguno de los rivales de Intel. Al principio,
Intel restó importancia a esta nueva competencia. '¿Quién desearía una PC de
menor capacidad?', se preguntó retóricamente Intel. Empero, el precio de estas
máquinas resultaba muy conveniente y los compradores corrieron a comprarlas.
Se estima que el año pasado 25% de las computadoras personales vendidas en
EEUU se ubicaron en el segmento de equipos con precios inferiores a los mil
dólares. El crecimiento de este nuevo mercado tomó a Intel por sorpresa, lo que
obligo a la compañía a reevaluar la situación. Intel podía ofrecer sus
microprocesadores viejos para que se usaran en estas PC, pero ello mermaría los
márgenes de ganancias que constituyen el orgullo de la compañía. Fue por ello
que Intel anunció recientemente planes para desarrollar chips específicamente
diseñados para las PC de bajos precios.
En noviembre, Intel reorganizó sus grupos de productos para reflejar la nueva
estrategia. La compañía 'abarcará todos los segmentos' del mercado de la
computación, señaló Andrew Grove, director y presidente ejecutivo de Intel. A
mediados de año la empresa planea ofrecer una versión de su microprocesador
Pentium II para máquinas PC de bajo precio. La compañía reducirá el costo de
sus microprocesadores de máximo rendimiento mediante la eliminación de los
costosos chips de memoria que acompañan la versión actual. Esto colocará el
Pentium II en el mismo nivel de precios que los chips más lentos de sus
competidores.
Otro truco para reducir costos que Intel guarda bajo la manga es convertir
funciones actualmente realizadas por los chips en software que puede ser
ejecutado por el microprocesador. Aunque esto incrementa la carga de trabajo
del procesador central, también implica que incluso las computadoras
personales baratas necesitarán los microprocesadores de alto rendimiento de
Intel.
La compañía también aspira liderar el mercado de chips para las nuevas
generaciones de codificadores de TV, los cuales permitirán a los suscriptores de
televisión por cable conectarse a Internet. Asimismo, ha realizado importantes
incursiones en el mercado de servidores. El año pasado, la mayoría de los
servidores vendidos por menos de 25 mil dólares tenían microprocesadores
Intel.
En 1999, Intel lanzará al mercado una nueva generación de microprocesadores
identificados con el nombre clave de Merced, orientada hacia servidores más
complejos. Hewlett-Packard, que ocupa la segunda posición entre las compañías
de computación más grandes de Estados Unidos, colabora con Intel en el
desarrollo de Merced y planea diseñar sus próximos productos para que utilicen
chips de Intel.
Esto establecería los chips de Intel como el estándar dominante para servidores
y convertiría a la compañía en el máximo fabricante de microprocesadores de
toda la industria, un papel al que ninguna empresa puede aspirar.
Debido a que los fabricantes de chips más grandes de Japón y Corea del Sur
enfrentan una situación de inestabilidad económica, pocas compañías pueden
desafiar seriamente el dominio de Intel en la industria. Incluso si otro fabricante
de chips diseña un producto mejor que los de Intel, ninguno posee su capacidad
de producción.
Microprocesadores
1.- INTRODUCCIÓN
Desde la aparición del 8088 hace los principios de funcionamiento de los micros
no se han modificado mucho, a pesar de que ahora se ha llegado a la quinta
generación de estos chips y se ha profundizado en todo lo referente a las
prestaciones, en tema en los que hace diez años uno ni tan sólo se atrevía a
soñar. De todas maneras estas modificaciones se refieren especialmente a la
velocidad de trabajo del procesador con el cual se maneja el DOS, no al concepto
básico, por lo menos en lo referente al modo real.
Echemos de todas formas, en primer lugar, un vistazo a la historia del desarrollo
de los procesadores Intel.
La tarea del procesador es la de tratar las series de órdenes en lenguaje
máquina, pues el lenguaje máquina es el único que entiende el procesador. Las
instrucciones en el lenguaje máquina no son exactamente iguales para todos los
ordenadores, sino que solo son validas para el tipo de microprocesador en
cuestión. Los diferentes miembros de la familia 80xxx trabajan sin embargo con
el mismo lenguaje máquina, lo que permite que estos sean compatibles entre
ellos.
El primer representante de esta familia, el 8086, se desarrollo ya en el año 1978.
Sus sucesores fueron modificados de muchas maneras, y en parte fueron
modificados de forma radical, pero sin perder la compatibilidad con los
anteriores. En el caso del 8088 esto significó un paso hacia atrás, ya que si bien
el 8088 disponía del mismo grupo de instrucciones y la misma estructura
interna que el 8086, se comunicaba con la memoria mediante un bus de datos
de 8 bits, en lugar de 16 bits.
El resto de miembros de esta familia, son desarrollos posteriores del 8086. De
manera que por ejemplo el 80186 dispone de nuevas funciones adicionales,
mientras que al 80286 se le crearon mas registros en comparación al 8086, así
como también se le amplió el área de direcciones. La novedad mas decisiva del
80286 respecto a sus predecesores la representa el modo protegido, que sin
embargo no puede utilizarse con el DOS.
Al 80286 le siguió el 80386, que marcó un notable salto en la capacidad de
rendimiento. Continuó desarrollando el modo protegido y fue el primero de
disponer de un procesador Intel de registros de 32 bits, que sin embargo no
pudo utilizarse correctamente en la programación del DOS. Este procesador
existe también en una versión SX y DX, que se diferencian únicamente en la
frecuencia y en el tamaño del bus de dato; el SX trabaja con un bus de datos de
16 bits, mientras que el DX puede transmitir de una sola vez una palabra de 32
bits mediante su bus.
El micro que sigue al 80386, también llamado "i486" es el 80486. Este se
distingue especialmente del 80386 por la integración del coprocesador
numérico 80387, por la preparación de un código-caché y el tratamiento más
rápido de muchas instrucciones en lenguaje máquina, siendo también
compatible con el 8086.
El hito técnico actual lo marca el procesador Pentium que ha mejorado la
velocidad de proceso interna en relación con el 486. En determinadas
situaciones el procesador esta en situación de procesar dos ordenes consecutivas
al mismo tiempo, siempre y cuando la segunda no dependa del resultado de la
primera.
También la denominación en nueva en el Pentium puesto que se esperaba que
tras el 80486 el sucesor se denominaría 80586. Intel sin embargo rompió con la
tradición puesto que nombres como 8088 o 80486 no
pueden ser patentados. Esto lo aprovecharon durante largo tiempo otros
fabricantes de estos componentes para distribuir procesadores compatibles con
Intel, con otros nombres parecidos.
2.- REGISTROS DEL PROCESADOR
En el centro de todos los procesadores se encuentran sus registros, "variables de
hardware", en los cuales pueden cargarse datos de la memoria, tratarlos allí con
l a ayuda de las instrucciones del lenguaje máquina y finalmente volverlos a
escribir en la memoria. Esto es mucho más rápido que la manipulación de
información dentro de la memoria, ya que los registros se evacuan directamente
en el procesador y por lo tanto no es necesario acceder al bus para poner su
contenido a disposición de las instrucciones en lenguaje máquina. Por esta
razón los registros del procesador juegan un papel muy importante para la
programación del sistema, ya que es mediante estos registros que se desarrollan
el flujo de información entre un programa y las funciones del DOS y BIOS que
este llama.
Todos los registros tienen un tamaño de 16 bits (2 bytes). Así pueden registrar
un valor entre 0 y 65535 (111111111111111b, o FFFFh).
3.- El Procesador 386
El microprocesador 386 (también conocido como 386 DX) supone un paso muy
importante frente al 286. Hasta entonces, tanto los micros 8088 y 8086 como el
286 eran microprocesadores de 16 bits; trabajaban con 16 bits a la vez en cada
ciclo de reloj. Por el contrario, el 386 es un microprocesador de 32 bits, que
procesa 32 bits simultáneamente en cada ciclo de reloj. Los ordenadores 386
tienen una velocidad desde 16 a 50 Mhz.
El bus de direcciones del 386 tiene 32 bits. Con 32 bits se pueden redireccionar
232 celdas de memoria lo que equivale a 4096 MB. También en este caso los
primeros 1024 k se reparten como los micros 80886 y 286: 640k de memoria
convencional y los 364k restantes de memoria superior.
El microprocesador 80386 esta diseñado para soportar aquellos sistemas
operativos optimizados para multitarea. El micro 80386 es capaz de direccionar
hasta 4 gigabytes de memoria física y 64 tetrabytes de memoria virtual. La
gestión de memoria integrada y arquitectura de protección incluye registros de
traducción de direcciones y mecanismo de protección para soportar sistemas
operativos y hardware avanzado de multitarea.
El transvase entre instrucciones - pipelining -, una elevada anchura del bus y
una traducción de direcciones en la pastilla acortan significativamente el tiempo
medio de ejecución de la instrucción, manteniendo un alto rendimiento del
sistema. Estas características de diseño de arquitectura habilitan al 80386 a
ejecutar instrucciones a una frecuencia de 3 a 4 millones por segundo.
Características adicionales se incluyen autotest, acceso directo a la memoria
interna (cache) donde se realiza la traducción de página y cuatro nuevos
registros de "Breakpoint". El 80386 tiene el código objeto compatible con el
8086, 8088 y 80286.
El procesador 386SX
Los microprocesadores 386SX aparecieron después que el 386 como una
solución intermedia en precio y prestaciones entre el 286 y el 386. Los micros
386 puros (386DX) necesitan a su alrededor una circuiteria de 32 bits, mientras
que los SX necesitan una circuiteria de 16 bits, mucho mas barata. De esta
forma, los fabricantes podían utilizar todos los componentes y la circuitería de
16 bits que usaban para un 286, pero ahora incorporando un microprocesador
de 32 bits.
La diferencia entre un ordenador 386DX y un ordenador 386SX se percibe en la
velocidad del ordenador, pero desde el punto de vista de las aplicaciones que se
pueden ejecutar, es totalmente, indiferente tener un microprocesador 386DX
que un 386SX.
El procesador 386SL
El microprocesador 386SL es equivalente al 386SX con la particularidad de
estar diseñado especialmente para los ordenadores portátiles, cuidando sus
especiales necesidades de baja potencia y consumo. El 386SL posee un modo
sleep que utiliza menso energía durante su funcionamiento. Además, existen
nuevos recursos para poder minimizar el funcionamiento del ordenador (el
consumo de energía) cuando no se utiliza. El resultado es que la batería puede
doblar su tiempo en un portátil con 386SL frente a un 386SX. Los
microprocesadores 386SL sólo se utilizan en portátiles y notebooks y, hoy en
día, son los únicos microprocesadores 386 en los que continúa desarrollando y
trabajando.
Tipos de datos
La pastilla microprocesadora 80386 soporta varios tipos de datos además de los
soportados por sus predecesores (80x86). Soporta enteros con signo y sin signo
de 32 bits y campos de bits de 1 a 32 bits de
longitud. También soporta los tipos de punteros estándares, así como un
puntero de desplazamiento de 32 bits y un puntero completo de 48 bits.
Otros registros de 32 bits (ESI, EDI, EBP, ESP) no se pueden dividir en registros
de 16 bits. Por otra parte, el puntero de instrucciones EIP, también es un
registro de 32 bits, cuyo contenido se modifica dependiendo de los cambios que
experimente el flujo del programa que el procesador ejecute. Por lo tanto, EIP se
modifica implícitamente mediante instrucciones en código máquina.
ARQUITECTURA BASE
La pastilla microprocesadora 80386 proporciona al programador 32 registros.
Estos 32 registros pueden ser divididos en siete categorías principales.
- Registros de propósito general
- Registros de segmentos
- Puntero de instrucción y señalizaciones
- Registros de control
- Registros de direcciones del sistema
- Registros de test.
Estos registros son un superconjunto de los registros del 8086 y el 80286;
además, todos los registros de 16 bits del 8086 y el 80286 están contenidos en
el microprocesador 80386 de 32 bits.
REGISTROS DE PROPOSITO GENERAL
Los ocho registros de propósito general se utilizan de forma análoga a los ocho
registros de propósito general asociados al 80286, excepto que los registros
tienen ahora 32 bits. Estos registros son capaces de soportar operandos de datos
de 1, 8, 16 y 32 bits y campos de bits de 1 a 32 bits. Los ocho registros son el EAX
(acumulador), EBX (base), ECX (contador), EDX (datos), ESP (puntero de pila),
EBP (puntero base), ESI (índice fuente) y EDI (índice destino).
Para acceder a los 32 bits de un registro, todas las referencias del registro deben
comenzar "E". Cada uno de los ocho registros de propósito general puede ser
descompuesto en sus equivalentes de 16 bits del 8086/80286 referenciando los
registros sin usar el prefijo "E".
REGISTOS DE SEGMENTOS
El microprocesador 80386 contiene seis registros segmento de 16 bits. Los seis
registros segmento mantiene los valores del selector en las posiciones de
memoria actualmente direccionables. En modo de dirección real, un segmento
puede variar desde 1 byte hasta un tamaño de segmento máximo de 64 bytes, o
216. El direccionamiento en modo protegido habilita rangos de segmento desde 1
byte hasta un máximo de 4 gigabytes, o 232 bytes.
Historia de Intel
Publicado el 21 de January, 2008
En sus inicios se dedicaban a la creación de memorias, las de más éxito fueron DRAM,
SRAM y ROM. En 1971, tan sólo 3 años después de su inauguración, crearon el primer
microprocesador. Al contrario de lo que nos puede parecer por lo que conocemos de la
empresa, el 4004 no era el microprocesador de un ordenador. Se trataba de un encargo
para Busicom, una empresa japonesa que planeaba sacar al mercado una nueva
calculadora.
Este primer microprocesador fue creado gracias al ingenio de Ted Hoff que diseñó un
chip con una memoria capaz de hacer varias acciones. Este chip es el elemento clave del
cuerpo del microprocesador. Posee 4 chips como éste y dos más de memoria. El gran
avance era que ya no hacía falta crear un circuito integrado para cada parte de la
calculadora, sólo hacía falta uno, el 4004.
Esta claro y es indiscutible que éste fue el primer microprocesador de Intel. Muchos le
atribuyen también el mérito de ser el primero de la historia pero como siempre ocurre en
la informática ante una afirmación tan contundente surge la polémica y otros consideran
que el mérito es de Texas Instruments.
El 4004 era capaz de hacer 60.000 operaciones por segundo, visto su éxito Intel
continuó investigando en el campo y poco después sacaba al mercado el 8008, capaz de
transmitir el doble de datos, acceder a más memoria, procesar a 8 bits y alcanzar una
velocidad de 740 Khz. Era el inicio de la alta velocidad, Intel se incorporaba a aparatos
de gasolineras, aeropuertos, salones recreativos, etc.
• 8 o 16 bits
• Velocidad de reloj: 5, 8 y 10 Mhz
• 29.000 transistores usando energía de 3 micras
• 1 Mega de memoria direccionable
IBM fue creada a finales del siglo XIX, en todo ese tiempo consiguió hacerse un
nombre en el mercado. La gran confianza que había conseguido depositar en la gente se
vio reflejada en el gran éxito de su primera computadora personal. El modelo de IBM se
convertiría en un estándar cuando el resto de fabricantes viendo el éxito que tenía
trataron de copiar su equipo.
Así pues IBM compartió fama y éxito con Microsoft (por su sistema operativo MS-
DOS) y con Intel por su procesador. Era sólo cuestión de tiempo que Intel se hiciera con
las cuotas más altas del mercado. La que empezara con un equipo de 12 expertos estaba
camino de convertirse en una de las empresas más importantes en el mundo de la
informática, una multinacional sin sombra a la que han llegado a acusar de monopolio.
El siguiente paso de Intel fue crear en 1982 la nueva saga de microprocesadores con un
diseño mucho más moderno y parecido al actual. Se trataba de 80286, 80386, 80386 XS
y 80486DX aunque fueron más conocidos por sus tres últimos números: 286, 386, etc.
Este microprocesador fue creado en 1982, en un principio lo utilizaría IBM para su PC.
Pero el sistema de “licencias cruzadas” permitió la aparición de Compaq, una empresa
que se dedicó a hacer ordenadores clónicos en masa. Surgió en 1985 lanzando al
mercado el clónico de IBM. Compaq convirtió así al 286 en el primer microprocesador
utilizado para hacer clónicos. Sus características son:
En 1988 aparece una simplificación del 286. El 80386SX es, a grandes rasgos, el mismo
microprocesador pero con una arquitectura más simple y barata, de 16 bits. La aparición
de estos microprocesadores coincidía con la del entorno gráfico de Windows que había
sido desarrollado unos años antes pero que aún no conseguía la plena aceptación del
público.
El microprocesador 80386
El 386 fue creado en 1986 y se siguió fabricando hasta que en el 2006 Intel anunció el
cese de su producción. La principal característica era su arquitectura de 32 bits. Además
tenía una velocidad de entre 16 y 40 MHz.
El microprocesador 80486DX
En 1989 un fallo judicial prohibía que se usaran números para dar nombre a los
microprocesadores por lo empezaba el tiempo de los Pentium. A estas alturas los
procesadores de Intel eran tan conocidos y utilizados que a menudo el público se refería
a un modelo de ordenador por el nombre de su procesador Intel. Frases como “me he
comprado un Pentium II” estaban integradas en la cultura popular.
Aunque hasta el momento tan sólo hemos hecho referencia a la relación entre Intel y Pc
debemos destacar que a lo largo de esta historia Intel ha firmado también contratos con
Apple y otros fabricantes desarrollando así microprocesadores pasa sus computadoras.
A día de hoy uno de los productos más novedosos de Intel es el procesador Intel®
Core™2 Duo. Según la propia empresa, permite realizar más tareas a la vez aunque
sean “pesadas” sin abandonar la protección del antivirus. Además, se puede actualizar
fácilmente el PC a aplicaciones de 64 bits y al sistema operativo Windows Vista
Premium*.
Que sea el mayor fabricante de microprocesadores y el que tiene más cuota de mercado
con diferencia no implica necesariamente que sea el mejor. Para muchos, Intel es
superado por AMD, prestigioso fabricante de microprocesadores con cuotas de mercado
muy inferiores a las de Intel pero el único capaz de hacerle un mínimo de sombra.