SISTEMAS DIGITALES I Agustín Suárez Fernández Donaciano Jiménez Jiménez Vázquez Departamento de Ingeniería Eléctrica UAM-Iztapalapa, México, D.F.
CAPITULO I
INTRODUCCIÓN Inicialmente, se presenta la estructura de un sistema que se basa en un microprocesador, describiendo cada una de sus partes principales. Puesto que, del microprocesador depende la funcionalidad del sistema, se analizan las tareas básicas que debe realizar y a partir de éstas, se propone una arquitectura para el microprocesador. A continuación, se estudia en forma detallada la arquitectura, del microprocesador 8088. El objetivo de éste capítulo es aprender lo siguiente:
1]
La estructura de un sistema que se basa en un microprocesador. microproc esador.
2]
La arquitectura de un microprocesador micropr ocesador de propósito general.
3]
La arquitectura del microprocesador microproces ador 8088.
4]
El desarrollo de los microprocesadores microproc esadores de la familia 8086/8088 de Intel ®.
En las descripciones de circuito que requieren de una señal que es activa en nivel bajo, normalmente, una transición de +5 a 0 volts, se emplea la convención que forman las siglas de la señal seguidas de ‘. Por ejemplo, CS’ es una señal activa en nivel bajo, que conecta a un circuito, de tercer estado, al canal de un sistema con un microprocesador.
1.1 Estructura de un sistema que se basa en un microprocesador Un sistema de propósito general que se basa en un microprocesador tiene la estructura básica que se muestra en la Fig. 1.1 y realiza las tareas más comunes, que son en las que están interesados la mayoría de los posibles usuarios. Un ejemplo de éste sistema puede ser una computadora personal y las tareas: procesamiento de texto, empleo de hojas de cálculo, acceso a Internet, etc. Si el sistema es de propósito específico, puede ser la parte principal de algún instrumento, sistema de control o una aplicación similar. Aun en éste caso su estructura básica sería igual, pero con los circuitos adicionales que requiera la aplicación específica. Tanto para el sistema de propósito general como para el específico, su atractivo y poder se deben al hecho de que se basa en un dispositivo programable: el microprocesador que junto con los demás componentes, tanto de
1
circuito como de programación,
forman el sistema completo que proporcionan a sus
usuarios los servicios necesarios para realizar en forma atractiva los trabajos que están interesados en llevar a cabo.
Fig.1.1 Estructura de un sistema que se basa en un microprocesador.
Las partes siguientes forman el sistema: microprocesador, circuito de temporización, que incluye la parte de reinicialización, canal del sistema, memoria, circuitos de entrada y salida. A continuación, se describe cada una de las partes.
Microprocesador : es un dispositivo programable que es la parte principal del sistema y le
proporciona sus principales características, entre otras:
velocidad de procesamiento,
espacio de memoria y de entrada/salida que puede direccionar, tipo de sistemas operativos que puede soportar, posibilidades de actualización.
Circuito de temporización: temporización el microprocesador requiere de una señal de reloj, muy estable,
a fin de sincronizar tanto su operación interna como la de todo el sistema a través de su canal. Aquí está incluida la parte de reinicialización que al encender el sistema, o cuando es necesario, lleva al microprocesador a un estado inicial conocido, que siempre es el mismo, y a partir del cual, típicamente se ejecuta un programa de inicialización y autocomprobación.
2
Canal del sistema: sistema determina las características de comunicación del microprocesador
con
los periféricos que forman el sistema y a su vez lo constituyen el canal de
direcciones, de cuyo número de bits depende el espacio de memoria y de entrada/salida que es posible direccionar, así como el canal de datos que determina el número máximo de bits que se pueden transferir en un dato. Como se observa en la Fig. 1.1, al canal del sistema están conectados la memoria y todos los periféricos que lo forman. Sin embargo, ya que son dispositivos de tercer estado están en alta impedancia la mayor parte del tiempo, eléctricamente están desconectados, y sólo se conectan al canal cuando les corresponde. Las señales que conectan a la memoria o a un periférico al canal del sistema las proporciona, el canal de control. Por ejemplo, al encender el sistema el microprocesador inicia la ejecución del programa de inicialización a partir de una dirección de memoria que siempre es la misma. Esto requiere que la memoria que lo contiene, usualmente ROM, reciba, entre otras, la señal de selección de integrado CS’, que la conecta al canal y otra de lectura, ambas señales, con la temporización adecuada, las proporciona el canal de control. Algo similar sucede cuando se requiere realizar alguna operación con un periférico.
Memoria: Memoria como se mencionó al principio el poder y la flexibilidad del sistema se deben a
que se basa en un microprocesador que es un dispositivo programable. Los programas que ejecuta el microprocesador están en el subsistema de memoria, que forman diferentes dispositivos, de memoria ROM y RAM, cuya capacidad de almacenamiento depende de las necesidades del usuario.
Subsistema de entrada/salida: entrada/salida son los periféricos que requiere el sistema. Por ejemplo,
se requiere una interfaz de usuario, que permita solicitar tareas y obtener resultados. En el caso de una computadora personal, esa interfaz está formada principalmente por el teclado y el monitor, si el sistema es muy pequeño sólo cuenta con un pequeño teclado que puede ser decimal o hexadecimal y algún tipo de despliegue, típicamente de diodos emisores de luz, leds, o dispositivos de cristal líquido. Los periféricos restantes pueden ser dispositivos de almacenamiento masivo como unidades de disco duro, óptico o flexible, así como impresora, convertidores analógicos/digitales, digitales/analógicos y otros periféricos que dependen de las necesidades del usuario. 3
Como se verá posteriormente, un sistema que se basa en un microprocesador, generalmente, tiene una estructura de capas, la primera y más básica la forman el microprocesador y los demás circuitos, en términos coloquiales “los fierros”, la capa siguiente la forman los programas, en lenguaje ensamblador, que forman el sistema básico de entrada/salida BIOS que está grabado en ROM, encima de ésta capa está el interprete de comandos del sistema operativo.
1.2 Funciones básicas del microprocesador Como ya se mencionó, la parte principal del sistema es el microprocesador. Las funciones básicas que se espera pueda realizar son las siguientes:
1]
Las operaciones aritméticas básicas: suma, resta, multiplicación y división.
2]
Las operaciones lógicas: AND, OR, XOR, NOT.
3]
Operaciones sobre cadenas o arreglos básicos de datos.
4]
Transferencias incondicionales del control de ejecución del programa.
5]
Transferencias condicionales del control de ejecución del programa.
6]
Llamadas a subrutinas.
7]
Operaciones sobre el espacio de entrada/salida.
Si el microprocesador es capaz de realizar éstas funciones en forma eficiente o muy eficiente. El sistema será funcional, considerando que tiene como objetivo principal ejecutar las tareas en las que están interesados la gran mayoría de los usuarios. Si se requiere realizar tareas más especializadas: procesamiento matemático intensivo, procesamiento de señales, el sistema puede requerir de algún coprocesador. Considerando que, al menos por el momento, sólo son de interés las funciones básicas,
4
listadas inicialmente, conviene analizar la posible arquitectura de un microprocesador que las realice.
1.3 Arquitectura de un microprocesador La posible arquitectura de un microprocesador que cumpla las tareas básicas señaladas, se muestra en la Fig.1.2.
Fig. 1.2 Arquitectura interna del microprocesador
5
El microprocesador está formado por las unidades siguientes:
Unidad de cont control rol: rol realiza la ejecución de los programas sincronizando la operación de las
diferentes unidades del microprocesador, según lo requiera el programa. Contiene los registros siguientes:
Contador de programa: este registro apunta a la dirección de la siguiente instrucción que se va a ejecutar.
Registro de la instrucción actual: decodifica la instrucción presente, y la transfiere para su ejecución. Ya que al decodificar la instrucción determina su número de bytes y actualiza el contenido del contador de programa.
Palabra de estado del procesador: contiene bits de estado que reflejan el resultado de la ejecución de una instrucción, típicamente aritmética o lógica, que por ejemplo, resultó en cero o es negativo. También puede tener bits de control que determinan alguna característica del funcionamiento del microprocesador. Por ejemplo, la habilitación y deshabilitación de interrupciones.
Apuntador de pila: este registro apunta a una dirección de la memoria que forma la “pila de memoria”, que es una cantidad determinada de localidades de memoria RAM, que emplean el microprocesador y el programador para almacenar datos importantes, posteriormente se detalla su funcionamiento.
Registros de trabajo: ejecutan las diferentes instrucciones del microprocesador utilizando registros de propósito general y de direccionamiento.
Unidad aritmética y lógica, ALU: realiza las operaciones aritméticas y lógicas que requieren algunas instrucciones, el resultado de algunas de éstas se refleja en la palabra de estado del procesador. Por ejemplo, si el resultado de una resta fue cero.
6
Unidad de lógica de control de entrada/salida: realiza la comunicación entre el microprocesador y los periféricos del sistema mediante las instrucciones de entrada/salida. A continuación, se describen en mayor detalle éstas partes.
Al encender el sistema el microprocesador recibe una señal de reinicialización, del circuito de temporización, que siempre lo lleva al mismo estado inicial que, entre otras acciones, carga en el contador de programa de la unidad de control, la dirección en la que el microprocesador va a ejecutar el primer ciclo de recuperación de código de programa. Esta dirección, siempre es la misma, la unidad de control la transfiere a las terminales de salida del microprocesador que forman el canal de direcciones del sistema. Generalmente, ahí empieza el programa de inicialización del sistema, la memoria que contiene esa dirección inicial, usualmente ROM, recibe del canal de control la señal de habilitación, CS’ que la conecta al canal del sistema, y poco después una señal de lectura, RD’.
Algunos
ciclos
de reloj
después,
que determina
la temporización
del
microprocesador, la memoria coloca en el canal del sistema el dato de la dirección que se presentó a su entrada. A continuación, el microprocesador lee ése dato de sus terminales que forman el canal de datos, lo transfiere al registro de la instrucción actual, dónde será decodificado para su ejecución, y actualiza el valor del contador de programa a fin de que apunte a la dirección donde se encuentra la siguiente instrucción.
Una vez que decodifica la instrucción, el microprocesador sabe de cuántos bytes consta y en donde se ejecutará. Por ejemplo, si la instrucción es aritmética o lógica, se va ejecutar en la ALU empleando registros de propósito general. Adicionalmente, como ya se mencionó, la ALU tiene asociado un registro de palabra de estado del procesador en el que puede reflejar en un bit específico, bandera, el resultado de una operación aritmética que dio, por ejemplo, un resultado negativo o igual a cero.
Registros de propósito general
Son los registros que emplea el microprocesador para ejecutar diferentes instrucciones. Por ejemplo, si se ejecuta una suma, un registro contiene uno de los sumandos y un segundo registro el otro, una vez que se realiza la suma uno de los dos debe tener el resultado: es un acumulador , al inicio de la suma contiene uno de los sumandos y al final contiene el resultado. Los registros de propósito general que se emplean para las operaciones aritméticas se conocen como registros aritméticos.
7
El microprocesador no sólo tiene la capacidad de realizar operaciones aritméticas entre operandos que están en sus registros, también las puede realizar entre un operando que se encuentre en memoria y otro que esté en un registro. En éste caso, se utiliza un registro para “ apuntar ” a la localidad de memoria que contiene el otro operando. Los registros que cumplen ésta función, se conocen como registros apuntadores y forman parte de los registros de direccionamiento, algunos de éstos pueden ser específicos para ejecutar instrucciones sobre cadenas o arreglos de datos. Por ejemplo, puede haber un apuntador fuente y uno destino para transferencias entre cadenas de datos. Con lo expuesto hasta ahora, la arquitectura básica propuesta cumple con las 4 primeras funciones requeridas.
1.4 Transferencias del control de ejecución del programa El contador de programa, es el registro que determina la localidad de memoria donde se ejecuta un ciclo de recuperación de código. Si se requiere transferir la ejecución del programa, a una localidad de memoria diferente a la cual apunta ése registro es necesario cambiar su contenido, esto se puede realizar en forma incondicional o condicional.
1.4.1 Transferencias incondicionales En las transferencias
incondicionales
la unidad de control del microprocesador lleva a
cabo el cambio que se requiere: desecha el contenido previo del contador de programa y carga el nuevo. De ésta forma transfiere el control de ejecución del programa a la localidad de memoria que se indicó y que NO es la siguiente de la instrucción de transferencia de ejecución del programa.
1.4.2 Transferencias condicionales
Para las transferencias
condicionales la
unidad de control del microprocesador antes de
llevar a cabo el cambio que se requiere, del contenido del contador de programa, determina si la condición de transferencia se cumple. Por ejemplo, para una transferencia del control del programa en función de la activación de la bandera de cero, del registro de estado del procesador, antes de la instrucción que transfiere el control de ejecución del programa se ejecuta una instrucción aritmética o lógica y si su resultado es cero, activa
8
la bandera correspondiente del registro de estado del procesador. Así, sólo si la condición de transferencia se cumple, se lleva a cabo. Por lo tanto, el control de ejecución del programa pasa a una localidad diferente a la que seguía en secuencia. En caso contrario, la ejecución del programa continúa en ésa localidad. Si la transferencia del control de ejecución del programa se realiza, el contenido previo del contador de programa se desecha. La Fig. 1.3 muestra el diagrama de flujo de un brinco condicional, con las instrucciones correspondientes a lado de los bloques.
Fig. 1.3 Brinco Condicional.
9
La parte de código, que es para el 8086/8088, que incluye la figura merece algunos comentarios:
1]
Inicialmente, se ejecuta una instrucción que resta el contenido del registro BX, al contenido del registro AX, una vez que se ejecuta la resta el resultado queda en el registro AX. La notación que se emplea para representar ésta instrucción es:
AX ← AX-BX
El símbolo
←
SUB AX, BX
se interpreta como transfiere a. En éste caso, se transfiere al registro
AX el resultado de la resta de su contenido previo menos el contenido del registro BX. Si los contenidos de ambos registros son iguales su resta dará cero, si ése es el resultado al ejecutar la resta la ALU del microprocesador activa, en 1, la bandera de cero del registro de estado del procesador y si no es cero la bandera se mantiene inactiva, en 0. Así, a continuación de la instrucción de resta se puede ejecutar una instrucción de transferencia condicional del programa, que “pregunte” si la bandera de cero está activa.
2]
La instrucción: JZ CAMBIO
Transfiere el control de ejecución del programa a la localidad que tiene la etiqueta CAMBIO, sólo si la bandera de 0 está activa. En caso contrario ejecuta la siguiente instrucción.
1.4.3 Llamadas a subrutina Cuando el microprocesador ejecuta una llamada a subrutina, Fig. 1.4, que es un servicio del programa que se está ejecutando, también es necesario cambiar el contenido del contador de programa. Pero a diferencia de las transferencias incondicional y condicional, ahora sólo se transfiere momentáneamente el control de ejecución del programa y se debe regresar a ejecutar la instrucción siguiente a la llamada a la subrutina. Así, el
10
microprocesador “ debe recordar” la dirección de la instrucción que sigue a la llamada a la subrutina. Para ésta, y otras situaciones similares, el microprocesador tiene un área de memoria, RAM externa, denominada “pila” y que forma parte de la memoria del sistema, En la que almacena temporalmente, para recordarla, la dirección de la instrucción que sigue a la llamada a la subrutina. La unidad de control cuenta con un registro apuntador de pila que apunta a ésa área de la memoria. Cuando el microprocesador decodifica la instrucción de llamada a una subrutina, sin la intervención del programador , “ hace lugar” en la pila y ahí guarda el contenido del contador de programa, que es la dirección de la instrucción que sigue a la llamada y que debe ejecutar al regresar de ésta. A continuación, cambia el contenido, del contador de programa, por el de la dirección de la primera instrucción de la subrutina e inicia su ejecución. Siempre, la última instrucción de la subrutina es un retorno que regresa el control de ejecución del programa a la instrucción que sigue a la llamada. Ahora el microprocesador, nuevamente sin que intervenga el programador , recupera de la “pila” de memoria la dirección de la instrucción que sigue a la
llamada, la carga en el contador de programa, actualiza el valor del apuntador de pila y la ejecución continua. De ésta forma el microprocesador es capaz de ejecutar llamadas a subrutinas y regresar de éstas.
Fig. 1.4 Llamada a subrutina
11
En la Fig. 1.4 se muestra un programa que tiene una llamada a una subrutina llamada CONV1, una vez que el microprocesador encuentra la instrucción de llamada: CALL CONV1
Transfiere el control de ejecución del programa a la localidad de la primera instrucción de ésa subrutina, pero “ debe recordar ” la dirección de la instrucción que sigue a la llamada. Esto se logra de la forma siguiente:
1]
Haciendo “lugar” en la pila de memoria: SP← SP-2
2]
Almacenando, en la dirección de memoria a que apunta el registro SP y la siguiente, se denota por el paréntesis, el contenido del contador de programa: (SP:SP+1) ←CP
Esto lo ejecuta el microprocesador sin la intervención del programador y de ésta forma se “recuerda” la dirección de la siguiente instrucción a la llamada.
La subrutina CONV1 termina con la instrucción: RET
Que ejecuta lo siguiente: CP ← (SP:SP+1) SP← SP+2
Si se observa la instrucción de regreso de la subrutina ejecuta casi la misma secuencia que la instrucción de llamada. Esta inició “haciendo lugar en la pila”, se requieren 2 localidades de memoria para el contenido del contador de programa, si el CPU es de 16 bits, a continuación, ahí lo almacenó. El regreso primero transfiere el contenido de la pila de memoria al contador de programa y a continuación dejó al apuntador de pila en la misma dirección que tenía antes de la llamada.
Conviene aclarar que se considera una pila con el mismo funcionamiento, último en entrar, primero en salir LIFO, que la del microprocesador 8086/8088 y que al igual que las instrucciones de llamada y de regreso se estudiarán posteriormente.
12
Sección de lógica de control de entrada/salida: entrada/salida comunica al microprocesador con los
periféricos que están en ese espacio, esto se realiza mediante instrucciones de entrada y de salida entre uno de los registros del microprocesador y los registros de los periféricos, éstas instrucciones, en los microprocesadores, sólo transfieren datos pero no afectan ninguna bandera del registro de palabra de estado del procesador. Así, no es posible a continuación de éstas transferir en forma condicional, el control de ejecución del programa.
De acuerdo a lo anterior, ésta arquitectura es capaz de realizar las tareas básicas que esperamos del microprocesador. A continuación, se estudiará la arquitectura del microprocesador 8088 que es uno de los miembros originales de la familia de microprocesadores 8086/8088 y que es muy similar a la que se acaba de exponer.
1.5 Arquitectura del CPU 8088 La unidad de procesamiento central del microprocesador 8088, Fig. 1.5, es esencialmente la misma que la del 8086 y tiene como principal característica incorporar dos unidades independientes de procesamiento. Estas son la unidad de ejecución (EU), y la unidad de interfase del canal (BIU). La unidad de ejecución decodifica y ejecuta las instrucciones y la unidad de interfase del canal realiza todas las operaciones del canal del sistema como son los ciclos de recuperación de código (fetch), lectura de datos y escritura de resultados. Las dos unidades trabajan de manera independiente y paralela, se denomina “pipeline”, que es una de las principales características de los microprocesadores de tercera generación, ésta forma de funcionamiento les proporciona mayor velocidad ya que en un alto porcentaje del programa, la unidad de ejecución tiene disponible en la cola de instrucciones, el código de la siguiente instrucción a ejecutar.
Unidad de Ejecución
Es la responsable de decodificar y ejecutar todas las instrucciones, está constituida por 4 registros de propósito general, 2 registros base, 2 registros apuntadores, un registro de banderas y la unidad aritmética y lógica. Ya que no posee conexión con el canal del sistema,
obtiene las instrucciones de una cola de 4 bytes (6 bytes para el 8086) que
forma parte de la unidad de interfase del canal (BIU).
Cuando una instrucción requiere
13
accesar a la memoria o a un periférico, la unidad de interfase del canal ejecuta los ciclos de canal necesarios ya sea para leer o escribir los datos. Registros de propósito general
Son los registros: AX, BX, CX, DX y pueden considerase completos o dividirse en una parte alta: AH, BH, CH, DH y en una parte baja: AL, BL, CL, DL. Por lo tanto, cada uno se puede utilizar como un registro de 16 bits o dos registros independientes
de 8 bits.
Cualquiera de estos registros puede ser el acumulador para operaciones aritméticas y lógicas.
Fig. 1.5 Diagrama Funcional Simplificado a Bloques, del microprocesador 8088.
Registros índice y apuntadores
Los registros BP, SP, SI, DI sólo se pueden utilizar completos. BP, realiza la función de apuntador base en el segmento de pila y para varias formas de direccionamiento. SP es el
14
apuntador del segmento de pila. SI es un apuntador a un arreglo fuente de datos y DI es el apuntador a un arreglo destino. Estos 4 registros se utilizan en los diferentes modos de direccionamiento del microprocesador. Unidad Unidad aritmética y lógica
En esta unidad se realizan todas las operaciones aritméticas y lógicas que puede ejecutar el microprocesador y el resultado de éstas afecta los diferentes bits del registro de banderas a fin de ejecutar instrucciones condicionales de transferencia del programa. Registro de banderas
Posee 6 banderas de estado y tres de control.
Las banderas de estado reflejan el
resultado de una operación aritmética o lógica y permiten al
programa cambiar
la
secuencia de su ejecución, dependiendo del estado de alguna bandera.
BANDERAS DE CONTROL
TF
DF
IF
BANDERAS DE ESTADO
OF
SF
ZF
AF
PF
CF
ACARREO PARIDAD ACARREO AUXILIAR CERO SIGNO SOBREFLUJO INTERRUPCION DIRECCION TRAMPA
Fig. 1.6 Registro de banderas.
Banderas de estado
Las banderas de estado son las siguientes:
CF bandera de acarreo. Si se activa, en uno, indica que ocurrió un acarreo o un “préstamo” del bit más significativo como resultado de una operación aritmética o lógica de 8 o 16 bits.
15
PF bandera de paridad . Si está activa, en uno, indica que el resultado de una operación tiene paridad par. Esta bandera se utiliza para encontrar errores en caracteres transmitidos y sólo comprueba la paridad de los 8 bits menos significativos del registro AX.
AF bandera de acarreo auxiliar . Si se activa, en uno, indica que en la instrucción ejecutada, se presentó un acarreo o un “préstamo” del bit 3 al 4 del registro destino. Esta bandera la utilizan en forma implícita las instrucciones de ajuste decimal y ascii.
ZF bandera de cero. Si se activa, en uno, indica que el resultado de una operación aritmética o lógica fue cero.
SF bandera de signo . Indica que el resultado de una instrucción, normalmente aritmética es negativo. Las instrucciones que la afectan se ejecutan en aritmética de complemento a 2, en la que el valor del bit más significativo, 7 o 15, da el signo. Por lo tanto, si SF = 0, se trata de un número positivo y si SF = 1, es un numero negativo.
OF bandera de sobreflujo. Indica que ocurrió un sobreflujo. Esto es, el tamaño del resultado excede el tamaño del destino.
Banderas de control
Estas banderas permiten controlar tres estados del microprocesador y son las siguientes:
TF bandera de trampa. Si se activa con uno ésta bandera, el procesador pasa a ejecutar el programa instrucción por instrucción con fines de depuración. Ya que no existen instrucciones ni para activarla ni para desactivarla se requiere ejecutar un enmascaramiento o desenmascaramiento mediante instrucciones lógicas
con el
registro de banderas.
16
IF bandera de habilitación de interrupciones. Al activarla, con uno, se habilitan las interrupciones enmascarables que están dedicadas, usualmente, a los periféricos del sistema.
DF bandera de dirección. Al activarla, con uno, las instrucciones para cadenas o arreglos ejecutan un autodecremento de las direcciones fuente y destino. Si se desactiva, con cero, esas instrucciones se ejecutan con incremento de ambas direcciones.
Unidad de interfase del canal
Ya que la unidad de ejecución no tiene una conexión directa al canal del sistema, obtiene código, operandos y datos a través de la unidad de interfase del canal que ejecuta todos los ciclos
necesarios.
Esta unidad consta de 4 registros de segmento, registros de
comunicación interna, el apuntador de instrucciones, una cola de 4 bytes, la lógica de control del canal, y un sumador dedicado para formar la dirección física.
Mientras la
unidad de ejecución decodifica y ejecuta una instrucción, la unidad de interfase del canal ejecuta un ciclo en el que lee y almacena en la cola, el byte de la siguiente localidad de memoria. Esto es, ambas unidades del CPU trabajan en forma paralela. Por lo tanto, en un alto porcentaje del programa la unidad de ejecución tiene disponible, en la cola, el código de la siguiente instrucción a ejecutar y de esta forma, prácticamente “desaparece” el tiempo del ciclo de recuperación de código (fetch) lo que resulta en un incremento muy notable en la velocidad de ejecución de la mayoría de los programas. La unidad de ejecución normalmente mantiene llenos los 4 bytes de la cola ya que al estar vacío un byte ejecuta un nuevo ciclo a fin de llenarlo.
Registros Registr os Segmentados
El espacio de memoria de los miembros originales de la familia 8086/8088 es de 1 Mbyte que se divide en segmentos lógicos de 64 Kbytes. La unidad de interfase del canal tiene cuatro registros de segmento:
17
CS segmento de código DS segmento de datos ES segmento extra SS segmento de pila
El registro CS tiene la dirección del segmento, de hasta 64kbytes, donde se encuentra el programa en ejecución. El registro DS tiene la dirección inicial de un segmento de datos y ES, típicamente, tiene el mismo propósito. El registro SS tiene la dirección inicial del segmento de pila. Estos registros dan a esta familia una de sus características principales:
la memoria segmentada que les proporciona facilidades únicas para relocalizar programas. Así conviene analizar, en detalle, como se forma una dirección para tener acceso a la memoria. El microprocesador 8088 es capaz de direccionar hasta 1 MByte de memoria, para lo que se requiere una dirección de 20 bits. Si ni en la unidad de ejecución ni en la unidad de interfase del canal existe un registro de 20 bits; cómo se forma una dirección?
Sumador dedicado de 20 bits
La dirección física la forma el sumador dedicado de la unidad de interfase del canal con el contenido de un registro de segmento, más un desplazamiento (offset). Por ejemplo en la reinicialización, varios de los microprocesadores de esta familia inician la ejecución del programa en la localidad FFFF0H. En este caso, el contenido de todos los registros de segmento del microprocesador y del apuntador de instrucciones es 0000H con excepción del registro del segmento de código que “despierta” con FFFFH. La dirección de 20 bits se forma en el sumador mediante la suma del segmento multiplicado por 16 más el desplazamiento:
CS
FFFF0H +
IP
0000H
Dirección = FFFF0H La forma usual para dar las direcciones es mediante una dirección lógica que da las direcciones del segmento y del desplazamiento que para la reinicialización es:
18
FFFFH:0000H a partir de la dirección lógica se forma la dirección física mediante una suma como la anterior.
Apuntador de Instrucciones
El registro apuntador de instrucciones (IP), es de 16 bits y siempre apunta a la dirección de la siguiente instrucción. Por lo tanto, es muy similar al registro contador de programa, PC, de otros microprocesadores. Ninguna instrucción tiene acceso directo a este registro pero, indirectamente mediante algunas instrucciones se puede cambiar, salvar o incluso obtener del segmento de pila. Las únicas diferencias de arquitectura entre el 8086 y el 8088 son la cola de instrucciones, en el 8086 es de 6 bytes, consecuencia de que el ancho de su canal de datos es de 16 bits.
1.6 Sistemas Digitales dedicados Este tipo de Sistemas, a diferencia de una computadora personal, cumplen una tarea específica que implica tanto aspectos de circuito como de programación. Al igual que en una computadora personal, el dispositivo en el que se basan es un dispositivo programable que, usualmente, es un microprocesador o un microcontrolador. Emplean circuitos específicos para la aplicación pero mantienen la estructura, que puede no incluir todos los periféricos de una computadora personal aunque esto depende de la aplicación, de un Sistema que se basa en un microprocesador. Los ejemplos más comunes de Sistemas Digitales dedicados, son los que emplean los aparatos domésticos como: lavadoras de ropa, hornos de microondas, equipo de ejercicio, equipos de audio y vídeo. También, son muy utilizados en Sistemas de Control industrial y de automóviles.
1.7 Base experimental A fin de aprender tanto los aspectos teóricos como los prácticos de los Sistemas Digitales, es indispensable contar con una base experimental que permita poner en práctica los conceptos teóricos. En general, la base experimental tiene la forma de un sistema mínimo que se basa en un microprocesador determinado. En el presente curso, la base experimental es el sistema mínimo UAMI-188EB, que se basa en el microprocesador 80C188EB. Las razones principales para seleccionarlo son:
19
1]
Forma parte de la familia 8086/8088 de Intel, en la que se basan la mayoría de las computadoras personales. Esto tiene, entre otras, la gran ventaja de que existe una gran cantidad de programación desarrollada. Asimismo, los programas necesarios, en lenguaje ensamblador, para los cursos de Sistemas Digitales se pueden desarrollar en cualquier computadora personal desde las versiones originales hasta las más recientes.
2]
El conocimiento de un microprocesador de ésta familia, facilita el empleo de una computadora personal en varias aplicaciones, entre las que están las específicas.
1.8 Objetivos del curso de Sistemas Digitales I Los objetivos de éste curso son:
I]
Aprender los aspectos básicos de la Arquitectura y de la programación de los miembros originales de la familia 8086/8088 de Intel.
II]
Tener funcionando, alrededor de la 4ª semana del trimestre, las partes principales de la tarjeta UAMI-188EB.
Por lo tanto, en éste primer capítulo se revisaron los conceptos básicos de Arquitectura y organización de computadoras, que son materia de un curso de Arquitectura de Computadoras ( ), a partir de una plataforma especifica: los miembros originales de la familia 8086/8088 de Intel ®. Esto no es lo más conveniente; sin embargo, Sistemas Digitales I es sólo el primero de 3 cursos que permiten, además de enseñar los principios básicos para el desarrollo de un Sistema Digital dedicado utilizando una base experimental específica, revisar y comparar los principios generales en que se basan tanto la Arquitectura de referencia como las más avanzadas del mismo y otros fabricantes.
A continuación, se detallará el desarrollo de los microprocesadores de la familia 8086/8088 de Intel ® ya que el 80C188EB forma parte de ella.
20
1.9 Los microprocesadores de Intel® En 1972 Intel ® fabricó el microprocesador 4004 para una empresa japonesa, que lo iba a utilizar en una calculadora, éste microprocesador tenía una arquitectura interna de sólo 4 bits, una canal de datos de 4 bits y un canal de direcciones de 12 bits que le permitía direccionar 4096 localidades de memoria. El conjunto de instrucciones era de 45. La empresa japonesa NO utilizó el 4004, que encontró aplicación en los primeros juegos de vídeo y en controles pequeños, ya que permitía utilizar un menor número de circuitos. En el mismo año considerando que el microprocesador era un producto con buenas posibilidades comerciales Intel ® lanzó el microprocesador 8008 que no era compatible con el 4004 caso único ya que, usualmente, el microprocesador más reciente es compatible con el anterior, el 8008 tenía una arquitectura de 8 bits, con un canal de datos de 8 bits y un canal de direcciones 14 bits que le permitía direccionar una memoria de 16Kbytes, el conjunto de instrucciones era de 48. A medida en que se desarrollaron más aplicaciones para el microprocesador el conjunto de instrucciones y la memoria que se podía
direccionar
resultaron
insuficientes.
Así,
en
1973
Intel ®
desarrolló
el
microprocesador 8080 que se considera el primero de los microprocesadores de 8 bits modernos gracias a sus características: arquitectura interna de 8 bits, canal de datos de 8 bits, canal de direcciones de 16 bits que permitía direccionar hasta 64KBytes de memoria y un conjunto de instrucciones más grande, fue compatible con el 8008 y ejecutaba las instrucciones a una velocidad 10 veces mayor. En 1977 Intel ® lanzó el microprocesador 8085 que era una versión mejorada del 8080, principalmente respecto a las características de circuito y un aumento en la velocidad de alrededor de un 35%, la compatibilidad con el 8080 se mantuvo.
Microprocesadores de 16 bits
En 1978 Intel ® lanzó el microprocesador 8086 que mantenía la compatibilidad con el 8085 pero, incorporaba cambios muy significativos: una arquitectura paralela de 16 bits, la unidad de ejecución y la unidad de interfase del canal trabajando en forma simultánea, con canales de direcciones y de datos de 16 bits que le permite direccionar, mediante el empleo de registros de segmento, hasta 1Mbyte de memoria, el conjunto de instrucciones es de aproximadamente 100. En 1979 Intel ® lanzó el microprocesador 8088 y en 1981, IBM® comercializa la primera computadora personal basada en éste microprocesador. A 21
partir de ése año la aplicación de las computadoras personales creció en una forma muy rápida hasta llegar a ser la herramienta básica, y casi indispensable, que es en la actualidad.
Intel® continuó el desarrollo de microprocesadores de 16 bits con el 80186, ahora es una subfamilia, y el 80286 que incluye una unidad de manejo de memoria y un canal de direcciones de 24 bits que le permite direccionar hasta 16 MBytes. La tabla 1.1 muestra los microprocesadores de Intel ® desde el 4004 hasta el 80286.
Microprocesador
Canal de Datos
Canal de Direcciones
Tamaño de Memoria
Bits
Bits
Bytes
4004
4
12
4K
8085ª
8
16
64K
8086
16
20
1M
8088
8
20
1M
80186
16
20
1M
80188
8
20
1M
80286
16
24
16M
Tabla 1.1 Microprocesadores de Intel ® hasta el 80286
Microprocesadores de 32 bits
El primer microprocesador de 32 bits que fabricó, 1985, Intel ® fue el 80386DX con canales de datos y de direcciones de 32 bits que permiten direccionar hasta 4 gigabytes de memoria, la unidad de manejo de memoria es mejor que la del 80286, y el paralelismo del funcionamiento interno es mayor lo que le permite ejecutar la mayoría de las instrucciones en 2 ciclos de reloj. Existió una versión, 80386SX, con un canal de datos de 16 bits para competir con algunas versiones del 80286 de otros fabricantes. El 80486DX, 1990, es un CPU 386DX mejorado que tiene integrado un coprocesador matemático, equivalente al 80387. En 1990 se comercializó el 80486SX, una versión del 486DX con el coprocesador deshabilitado también para competir con versiones del 386DX de otros
22
fabricantes. En 1993 se lanzó la primera versión del microprocesador PentiumI ® con una arquitectura interna de 32 bits y un canal de direcciones de 64 bits. La tabla 1.2 muestra los microprocesadores de Intel ® de 32 bits.
El desarrollo tecnológico en microelectrónica que hace posible la fabricación
de los
microprocesadores ha tenido un avance espectacular que permitió en las primeras versiones del microprocesador Pentium ® el empleo de alrededor de 3 millones de transistores la Fig. 1.7 muestra las densidades de integración de la familia 8086/8088 de Intel® a partir del 4004 con aproximadamente diez mil transistores.
Fig. 1.7 Densidades de integración de los microprocesadores de Intel ®
Microprocesador
Canal de Datos
Canal de
Memoria
Bits
Direcciones
Bytes
23
80386 DX
32
32
4G
80386SL
16
24
32M
80386SX
16
24
16M
80486DX
32
32
4G
80486SX
32
32
4G
Pentium®
32/64
64
4G
Tabla 1.2 Microprocesadores de 32 Bits de Intel ®
El avance en la velocidad de ejecución de las instrucciones también es espectacular hasta alcanzar los 100 millones de instrucciones por segundo, MIPS, que puede ejecutar la versión inicial de Pentium ®. La Fig. 1.8 muestra el funcionamiento
de los
microprocesadores de Intel ® en función de los MIPS, se incluye el 4004.
24
Fig. 1.8 Evolución de los microprocesadores de Intel ®
Resumen 1. Un sistema que se basa en un microprocesador tiene características de funcionamiento muy atractivas para la mayoría de los usuarios. El ejemplo más común de éste sistema es la computadora personal. 2. Un microprocesador es un dispositivo programable, que le da características muy poderosas y atractivas a un sistema. 3. Las funciones más comunes que debe realizar un microprocesador determinan su arquitectura.
25
4. Las partes principales de un microprocesador de propósito general, son la unidad de control, los registros de propósito general, los de direccionamiento, de palabra de estado del procesador y la unidad aritmética y lógica. 5. Un sistema que se basa en un microprocesador tiene características de funcionamiento muy atractivas para la mayoría de los usuarios. El ejemplo más común de éste sistema es la computadora personal. 6. Un microprocesador es un dispositivo programable, que le da características muy poderosas y atractivas a un sistema. Las funciones más comunes que realiza un microprocesador determinan su arquitectura. 7. Las partes principales de un microprocesador de propósito general, son la unidad de control, los registros de propósito general, los de direccionamiento, de palabra de estado del procesador y la unidad aritmética y lógica. 8. Los microprocesadores 8086/8088 de Intel ® son los miembros originales de ésa familia que es en la que se basan la mayoría de las computadoras personales. 9. La arquitectura interna de los microprocesadores 8086/8088 de Intel ® es de 16 bits y tiene como características principales considerar la memoria en forma segmentada y una arquitectura paralela: la unidad de ejecución y la unidad de interfase del canal trabajan en forma simultánea. 10. La arquitectura paralela, “pipeline”, hace más eficiente la ejecución de los programas ya que la instrucción a ejecutar, en la mayoría de los casos, está en la cola de instrucciones. 11. La arquitectura orientada a segmentos, de memoria, permite direccionar hasta un Megabyte de memoria y da grandes facilidades para la relocalización de programas. 12. La dirección de una localidad de memoria, dirección física, se forma a partir de una dirección lógica que, a su vez la forman un segmento y un desplazamiento. De ésta manera se logra direccionar un Mbyte de memoria. 13. Los microprocesadores de la familia 8086/8088 tienen una palabra de estado del procesador, registro de banderas, con banderas de estado que permiten ejecutar transferencias del control de ejecución del programa en forma condicional. Además ése registro tiene banderas de control que determinan algunas características de funcionamiento como la habilitación de interrupciones.
26
14. En 1971, Intel ® fabricó el primer microprocesador, el 4004 con una arquitectura interna de 4 bits y un canal de direcciones que le permitía accesar hasta 4 Kbytes de memoria. 15. A finales de 1971 se introdujo el 8008 con una arquitectura de 8 bits, conjunto de 45 instrucciones y direccionamiento de 16 Kbytes, a partir de éste microprocesador el siguiente, 8080 en éste caso, siempre fue compatible con el anterior. 16. En 1976 se introdujo el 8086 que fue el primer microprocesador de 16 bits de Intel
®.
17. En 1981 IBM ® comercializa la primera computadora personal, que se basa en un 8088. 18. La gran popularidad de las computadoras personales y los avances tecnológicos en microelectrónica permiten fabricar computadoras más poderosas y económicas. Los niveles de integración tienen números de transistores sin precedente, al igual que los millones de instrucciones por segundo, MIPS, que ejecutan los microprocesadores.
Preguntas 1. ¿Cuáles son las partes que forman la estructura de un sistema que se basa en un microprocesador? 2. ¿Cuál es la función del microprocesador en el sistema de la pregunta anterior? 3. ¿Qué función tienen los circuitos de temporización y de reinicialización? 4. ¿Cómo se conectan el microprocesador y las demás partes del sistema? 5. ¿Qué tipos de dispositivos son los más comunes en el susbsistema de memoria? 6. ¿Cuales son las funciones básicas de un microprocesador? 7. ¿En base a esas funciones cuál es una posible arquitectura del microprocesador? 8. Describa, brevemente, la arquitectura del microprocesador 8088 de Intel ®. 9. ¿Cuál es la dirección en que el 8086/8088 ejecutan su primer ciclo de recuperación de código? 10. ¿Cómo se forma la dirección anterior? 11. ¿Cómo pueden direccionar un Mbyte de memoria el 8086/8088, si su arquitectura es de 16 bits? 12. ¿Cuales son las banderas de estado de la palabra de estado del procesador, registro de banderas, del 8086/8088? 13. ¿Cuales son las banderas de control de la palabra de estado del procesador, registro de banderas, del 8086/8088?
27
14. ¿ Qué función tiene cada una de las banderas de estado y de control? 15. Describa, brevemente, cada uno de los registros del 8086/8088 y su función. 16. ¿Cuáles son las diferencias entre el 8086 y el 8088? 17. Describa, brevemente, un sistema digital dedicado. 18. ¿Existen sistemas digitales dedicados en una computadora personal? 19. ¿Cuáles son las principales ventajas de los microprocesadores 8086/8088, respecto a los microprocesadores de segunda generación como el 8085? 20. Estudie, brevemente, la arquitectura del microprocesador Z-80 de Zilog ® y compárelo con un 8085. 21. En base a su respuesta anterior, ¿por qué fue tan popular el Z-80? 22. Dé las características mínimas de una computadora personal Pentium IV ®, suponiendo que la va a adquirir.
28