Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG...

46
1 1 Unidad N Unidad N ° ° 7 7 Entradas/Salidas Anal Entradas/Salidas Anal ó ó gicas e Interrupciones gicas e Interrupciones 7 .1. .1. - - Introducci Introducci ó ó n n Las Unidades previas han tratado de la transferencia de datos digitales entre el microprocesador y un dispositivo de entrada o salida (periférico). En muchas aplicaciones del microprocesador, sin embargo, los datos de entrada que han de ser procesados son una señal analógica continuamente variable, por ejemplo, el voltaje de salida de un transductor de temperatura. De forma similar, los datos de salida del microprocesador se necesitan a menudo en forma analógica, por ejemplo, un voltaje que gobierna un motor. Por ello es necesario, en estas circunstancias, disponer de una circuitería adicional de interface entre las puertas de entrada/salida del microprocesador y los dispositivos periféricos controlados, teniendo que convertir las señales analógicas en digitales y viceversa. Un circuito que convierta una señal analógica en digital es conocido como un convertidor analógico-digital, (ADC), analogue-to-digital-converter y el circuito que convierte la señal

Transcript of Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG...

Page 1: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

11

Unidad NUnidad N°°77Entradas/Salidas AnalEntradas/Salidas Analóógicas e Interrupcionesgicas e Interrupciones

7.1..1.-- IntroducciIntroduccióónnLas Unidades previas han tratado de la transferencia de datos digitales entre el microprocesador y un dispositivo de entrada o salida (periférico). En muchas aplicaciones del microprocesador, sin embargo, los datos de entrada que han de ser procesados son una señal analógica continuamente variable, por ejemplo, el voltaje de salida de un transductor de temperatura. De forma similar, los datos de salida del microprocesador se necesitan a menudo en forma analógica, por ejemplo, un voltaje que gobierna un motor. Por ello es necesario, en estas circunstancias, disponer de una circuitería adicional de interface entre las puertas de entrada/salida del microprocesador y los dispositivos periféricos controlados, teniendo que convertir las señales analógicas en digitales y viceversa. Un circuito que convierta una señal analógica en digital es conocido como un convertidor analógico-digital, (ADC), analogue-to-digital-converter y el circuito que convierte la señal

Page 2: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

22

digital en analógica como un convertidor digital-analógico (DAC), digital-to-analogue-converter. Esta unidad describe primero la teoría y la operación típica de los DACs y ADCs y después considera las facilidades de interrupción proporcionadas por los microprocesadores para el control de las transferencias de datos de entrada/salida.

7.2.7.2.-- ConversiConversióón Digital Analn Digital Analóógica (DAC)gica (DAC)Un número digital puede ser convertido en un voltaje analógico seleccionando voltajes analógicos adicionales que sean proporcionales a los pesos de cada dígito binario. Esto se realiza por medio de una red resistiva escalonada, “ladder network”, como ejemplo se ilustra un convertidor de 3 bits.

Page 3: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

33

Las tres entradas A, B y C han sido conectadas, cada una, bien con 0 o con V voltios, dependiendo de la salida digital procedente del microprocesador, un 1 lógico corresponde a V voltios y un 0 lógicos a 0 voltios. La tabla de verdad que se acompaña a continuación ilustra cómo la salida del voltaje analógico aumenta en escalones, determinados por el número de dígitos binarios, equivalentes a la magnitud de la salida binaria.

Hay convertidores disponibles para ocho o más bits en forma de circuitos integrados. Estos están basado a menudo en redes escalonadas del tipo R-2R, para producir incrementos de voltaje ponderados en

Page 4: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

44

forma binaria y pueden ser conectados directamente a la puerta de salida de un dispositivo PI/O. Un diagrama esquemático de tal estructura se dá en la siguiente figura.

Page 5: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

55

Ejemplo de programa Conversión Digital AnalógicaEl programa de la figura muestra el proceso DAC por medio de la generación de una onda en diente de sierra. Se admite que un DAC de 8 bits está conectado a la puerta B de un PI/O, la cual está a su vez direccionada como 22(hex). Una onda en diente de sierra se genera fácilmente después, utilizando el registro A como un contador y haciendo salir su contenido después de cada incremento. Cuando los contenidos rebosan y vuelven a cero, el proceso se repite por sí mismo, como se representa en la figura.

Page 6: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

66

Ejemplo de programa Conversión Digital AnalógicaEl programa de la figura muestra el proceso DAC por medio de la generación de una onda en diente de sierra. Se admite que un DAC de 8 bits está conectado a la puerta B de un PI/O, la cual está a su vez direccionada como 22(hex). Una onda en diente de sierra se genera fácilmente después, utilizando el registro A como un contador y haciendo salir su contenido después de cada incremento. Cuando los contenidos rebosan y vuelven a cero, el proceso se repite por sí mismo, como se representa en la figura.

Page 7: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

77

7.3.7.3.-- ConversiConversióón Analn Analóógica Digital (ADC)gica Digital (ADC)La conversión de una señal analógica en un número digital presupone un proceso de muestreo de señales. Un número digital solamente puede representar con precisión una señal analógica variable durante un breve período de tiempo. Sin embargo, el proceso de conversión puede necesitar un período relativamente largo de tiempo. El proceso del muestreo que resulta queda ilustrado en la siguiente Figura.

Page 8: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

88

7.3.1.7.3.1.-- ConversiConversióón Analn Analóógica Digital (ADC)gica Digital (ADC)Es posible distorsionar gravemente la representación digital de una señal analógica por medio de un muestreo demasiado poco frecuente.El efecto de un muestreo poco frecuente se representa en la siguiente figura. El teorema del muestreo de Shannon permite que una señal analógica puede quedar completamente reconstruidas si es muestrada a una velocidad uniforme dos veces mayor que la frecuencia del componente de valor más alto de la señal original. Es usual el muestrear una señal con mucha más frecuencia de la que se establece por su mínimo teórico.

Page 9: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

99

La figura anterior representa una señal reconstruida la cual tiene componente de la frecuencia que no estaban presentes, evidentemente, en la señal original, debido a una frecuencia demasiado baja en el muestreo; este proceso se denomina “aliasing”. Se debe tener cuidado y cerciorarse de que el rendimiento del sistema no quede afectado debido a este tipo de distorsión, cuando se realice la conversión analógica-digital.

Page 10: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

1010

7.3.2.7.3.2.-- Un ADC basado en un contadorUn ADC basado en un contadorUn convertidor analógico-digital emplea un convertidor digital-analógico en un lazo de realimentación. Un sistema común y de bajo costo se representa en el esquema de la Figura.La secuencia de las operaciones es la siguiente. El contador es borrado inicialmente al arranque de la conversión. Los impulsos de reloj son entonces permitidos hasta que la salida DAC excede a la entrada analógica, lo que ocasiona que el comparador inhiba los demás impulsos del contador de reloj. La representación digital de la entrada analógica es, por ello, el número binario de salida del contador.

Page 11: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

1111

Durante la conversión el DAC tiene una salida escalonada en rampa hasta que alcanza un valor aproximadamente igual a la de la entrada analógica del circuito. Este tipo de conversión es lento, puesto que el DAC tiene que estabilizarse después de cada uno de los impulsos; típicamente, los tiempos de conversión son aproximadamente de 1 milisegundo. Aún más lentos, aunque esto sea necesario, son los ADCs basados en la técnica de la rampa doble, que es usada a menudo por los voltímetros digitales. Este tipo de convertidor tiene unas propiedades útiles en el rechazo del “ruido” si es tolerable la lentitud de su tiempo de conversión (de 20 a 200 milisegundos).

Page 12: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

1212

7.3.3.7.3.3.-- Un ADC aproximaciones sucesivasUn ADC aproximaciones sucesivasEste tipo de convertidor se usa ampliamente cuando es necesaria la conversión rápida. La técnica básica es la de una aproximación sucesiva a un valor de la salida digital, alterando este valor cada vez, de tal manera que se aproxime a la salida correcta.Son muy frecuentes los convertidores que emplean hardware para realizar este algoritmo de aproximaciones sucesivas (los tiempos de conversión varían entre los submicrosegundos a los 200 microsegundos). Es posible esto, sin embargo usar un programa demicrocomputador para realizar este algoritmo e implementar la conversión analógico-digital usando un convertidor digital-analógico y un comparador. Esta aproximación es válida por dos cosas, por permitir una mejor comprensión de la técnica de aproximaciones sucesivas y como un ejercicio en la apreciación de los compromisos “hardware-software” que, son posibles en un sistema microcomputador. En la siguiente figura se representa una indicación esquemática del hardware necesario para un convertidor de 8 bits.

Page 13: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

1313

El algoritmo consiste esencialmente en la puesta del bit más significativo de la entrada DAC en 1 y después los bits sucesivos en su orden de significación. En cada etapa o escalón, la salida del comparador es examinada para ver si la salida del DAC es mayor omenor que la entrada analógica. Si es mayor, el bit correspondiente que ha sido analizado es borrado y se pasa a analizar el que le sigue en orden. Si es menor, el bit analizado es mantenido en 1 y se analiza el próximo bit. El proceso se repite hasta que se analizan todos los bits. Un diagrama de flujo para el algoritmo, se expone a continuación y la secuencia de aproximación para un convertidor de 4 bits.

Page 14: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

1414

- Decisión ascendente si la salida del DAC no es mayor que la entrada.

- Decisión descendente si la salida del DAC es mayor que la entrada.

Page 15: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

1515

Se da a continuación una definición alternativa del algoritmo para ilustrar con sencillez otra posible representación de un algoritmo.

Algoritmo de aproximaciones sucesivasAlgoritmo de aproximaciones sucesivasArranque con el m.s.b., most significative bit, del DAC en 1, los demás bits en 0.REPITAsalida de datos DAC.LEA la salida del comparador.Si la salida del DAC es mayor que la entrada analógicaENTONCES el bit analizado de la corriente DAC es borrado.Energizar el más significativo de los bits de los datos del DAC.HASTA QUE se analicen todos los bits de los datos del DAC.Los datos actuales del DAC son el equivalente digital del voltaje analógico de entrada.

Page 16: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

1616

Ejemplo de programa Conversión Analógica DigitalEl programa de la figura realiza el algoritmo anterior de aproximaciones sucesivas, lo que asume que el DAC de 8 bits estáconectado a la puerta B del PI/O y que la salida del comparador estáconectada al m.s.bit (Bit 7) de la puerta A. La salida del comparador se admite que es alta (1 lógico) si la salida del DAC es mayor que la entrada analógica y baja (0 lógico) si es menor que la entrada analógica. Los registros del procesador se usan de la manera siguiente:

A es un registro de trabajo.B contiene los datos actuales del DAC.C contiene el bit que se analiza.D contiene la cuenta de bits.

Se dispone de un cierto número de dispositivos adicionales que son utilizados frecuentemente para el interfasado de dispositivos analógicos con un microcomputador. Tres de estos dispositivos se mencionan a continuación:

Page 17: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

1717

Algoritmo de aproximaciones sucesivasAlgoritmo de aproximaciones sucesivas

- Arranque con el m.s.b. bit, del DAC en 1, los demás bits en 0.- REPITA- salida de datos DAC.- LEA la salida del comparador.- Si la salida del DAC es mayor que la entrada analógica- ENTONCES el bit analizado de la corriente DAC es borrado.- Energizar el más significativo de los bits de los datos del DAC.- HASTA QUE se analicen todos los bits de los datos del DAC.- Los datos actuales del DAC son el equivalente digital del voltaje analógico de entrada.

Page 18: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

1818

1.- Circuitos de muestreos y retención. Se emplean para muestrear una señal en el momento preciso y mantener el valor constante durante el proceso de conversión.

22.- Multiplexores Analógicos. Estos dispositivos permiten que una señal analógica sea seleccionada, de entre varias, por medio de señales lógicas de control.

3.- Reloj en tiempo real. El muestreo de la señal y su construcción se realiza a menudo en unión de un interruptor gobernado por un reloj en tiempo real. Este dispositivo libera al procesador de la carga de calcular los tiempos de retardo.

Page 19: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

1919

Unidad Unidad NN°°88Arquitectura y ProgramaciArquitectura y Programacióón de un n de un Microprocesador de 16 bits (8086)Microprocesador de 16 bits (8086)

8.1..1.-- IntroducciIntroduccióónnVamos a estudiar, un microprocesador denominado 8086.La principal característica de este microprocesador es que es capaz de trabajar con operandos de 16 bits; de ahí que, como veremos más adelante, tanto la arquitectura como su repertorio de instrucciones serán más complejos que en el caso del 8085, que conviene recordar que sólo manejaba operandos de 8 bits.De todos los microprocesadores de 16 bits que existen en el mercado hemos elegido éste, el 8086, para su estudio porque es uno de los más utilizados en la actualidad. Basta decir que la inmensa mayoría de los computadores de tipo PC lo llevan incorporado y su desarrollo esta basado en torno a este microprocesador.

Page 20: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

2020

8.2..2.-- Arquitectura BArquitectura Báásica del 8086sica del 8086Como puede apreciarse en la Figura 8.1, la arquitectura del 8086 es muy parecida a la del procesador elemental que ya conocemos bien. Podemos observar la ALU, el registro de estado, el acumulador. Sin embargo, también podemos observar una serie de dispositivos nuevos: registros generales o de datos, registros punteros, registros índice, registros de segmento y puntero de instrucciones , etc.Esta aparente complejidad no tiene por qué asustarnos, ya que es una consecuencia inmediata y esperada de la complejidad que requieretrabajar con datos de 16 bits. Poco a poco iremos viendo con más detalle estos dispositivos nuevos y nos daremos cuenta de que, en el fondo, el funcionamiento del 8086 es similar al del procesador elemental.La arquitectura interna del 8086 se compone, a primera vista de dos partes diferenciadas: La Unidad de Ejecución y la Unidad de Interfaz con el bus.

Page 21: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

2121

La tarea principal de la Unidad de Ejecución es ejecutar las instrucciones que extrae de la cola de espera, a donde llegan procedentes de la Memoria Principal.El trabajo principal de la Unidad de Interfaz con el bus es buscar y traer las instrucciones de la MP. Para ello tendrá que generar la dirección de la instrucción a ejecutar.

Page 22: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

2222

8.2.1.- Registros Generales o de DatosVamos a tener 4 registros de 16 bits cada uno y cada uno con unautilidad concreta:AX = Registro Acumulador, que va a continuar teniendo el protagonismo de todos conocido en las operaciones aritméticas principalmente.

BX = Registro de Base, se utiliza, como su nombre se indica, para hacer referencia a direcciones base de memoria a partir de las cuales se encuentran situados vectores, matrices o tablas en general y a las que accederemos sumando a la base valores de desplazamiento.

CX = Registro Contador, (no debe confundirse con el contador de programa), utilizado como talen los loops y en las operaciones de tipo repetitivo.

DX = Registro de Datos, se utiliza en algunas operaciones aritméticas, como complemento de las acciones del acumulador y en algunas operaciones de entrada y salida, para especificar la dirección del dispositivo utilizado.

Page 23: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

2323

Estos 4 registros, aunque sean de 16 bits, tienen una propiedad común, y es que podemos considerar a cada uno de ellos como 2 registrosindependientes de 8 bits. De este modo tendremos: AH ( byte más alto o significativo de AX ), AL ( byte más bajo o menos significativo de AX ) y análogamente, BH, BL, CH, CL, DH y DL.

bytes más bytes menossignificativos significativos

AH AL AX Acumulador

BH BL BX Base

CH CL CX ContadorDH DL DX Datos

n° de bit 15…………….8 7……………….0

Page 24: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

2424

8.2.2.- Registros de Segmento. SegmentaciónEl hecho de que el bus de datos del 8086 tenga 16 bits no debería extrañar a nadie, pues hemos dicho antes que estamos tratando con palabras de 16 bits. Pero el que nos digan que el bus de direcciones tiene 20 bits, cuando los registros que ya conocemos y los que vamos a ver van a ser todos de 16 bits, si que debería extrañarnos.¿A que se debe esta presunta incongruencia?. ¿Que se puede hacer para generar direcciones de 20 bits a partir de registros e 16 bits?Las respuestas a estas preguntas nos la va a dar una técnica de acceso a memoria denominada segmentación; técnica muy utilizada por muchos procesadores de 16 bits para generar direcciones de memoria y enparticular por el 8086.Para ello, el microprocesador dispone de 4 registros, denominados registros de segmento, que van a servir de base para el cálculo de la dirección absoluta por medio de un desplazamiento que se va a sumar a esta base. El algoritmo utilizado para generar la dirección es el siguiente:

Page 25: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

2525

Dirección real = 16 x Registro de segmento + DesplazamientoDirección real = 10 x Registro de segmento + Desplazamiento

según utilicemos el sistema decimal o hexadecimal respectivamente.

Teniendo en cuenta que 1610 = 1016 = 00010002, lo que estamos haciendo realmente en la multiplicación es desplazar 4 bits a la izquierda el contenido del segmento. Por ejemplo, supongamos que uno de los registros de segmentación contiene el dato hexadecimal 0100 y que el desplazamiento en un momento dado es 50. En estas condiciones, la dirección real vendría dada por:

0100 x 10 + 50 = 01000 + 50 = 01050que, como resulta fácil comprobar, se trata de una dirección de 20 bits. Más evidente resulta esta comprobación si realizamos el cálculo tal como ocurre en el interior del procesador, es decir, en binario:

0000 0001 0000 0000 x 0001 0000 + 0101 0000 =0000 0001 0000 0000 0000 + 0101 0000 =

0000 0001 0000 0101 0000

Page 26: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

2626

Por tanto, las dos componentes que tiene una dirección de memoria son: un segmento y un desplazamiento y se expresa de la forma:

segmento:desplazamientoAsí, continuando con el ejemplo anterior, la dirección hexadecimal real 01050 se puede expresar de las siguientes maneras equivalentes, todas ellas hexadecimales:

0:1050 10:950 100:50 105:0El dispositivo que realiza todo este proceso de cálculo de la dirección se denomina generador de direcciones y es algo que no existía en el procesador elemental.De este modo, cada registro de segmento define una zona de memoria de 64 kbytes (zona direccionable con 16 bits = 216 posiciones de memoria), dentro de la cual se desplazarán los punteros correspondientes sin modificar para nada el contenido del registro de segmento que sirve de referencia.

Page 27: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

2727

El registro CS (segmento de código) es el que define la zona de memoria donde se encuentran las instrucciones a ejecutar o programas.El registro DS (segmento de datos) es el que define la zona donde se encuentran los datos que van a ser utilizados por el programa.El registro SS (segmento del stack o pila) define la zona de memoria que se va a utilizar como pila. Veremos más adelante que este registro es el que se toma como referencia cuando se accede a la pila.El registro ES (segmento extra), como su nombre se indica, contiene la dirección del segmento extra, que se utiliza cuando se sobrepasa la capacidad de 64 kbytes del segmento de datos y para realizar determinadas transferencias de datos entre segmentos.

8.2.3.- Registros punteros e índicesEste tipo de registros, todos ellos de 16 bits, se utilizan para almacenar desplazamientos que se han de añadir a los registros de segmento para generar las direcciones reales de memoria y así poder acceder a ellas.

Page 28: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

2828

SI (registro de índice de origen [source]) y DI (registro de índice destino)contienen normalmente los desplazamientos de los datos con respecto a los registros de segmento ES y DS.En operaciones con cadenas de caracteres SI se asocia a la zona de llamada fuente, apuntada por DS y DI a la zona de destino, apuntada por ES, como veremos con más detalle cuando estudiemos las instrucciones de tratamiento de cadenas de caracteres.SP (puntero o apuntador de pila) y BP (puntero o apuntador de la base)son los registros que, en combinación con el registro de segmento del stack SS, nos va a permitir operar en la pila, es decir, apilar y desempilar. SP apunta siempre a la posición superior de la pila y BP nos a servir para efectuar desplazamientos dentro de la pila.IP (puntero de instrucciones), desempeña el mismo papel que el contador de programa en el procesador elemental. Es un registro que contiene el desplazamiento que hay que sumar al comienzo del segmento de código, señalado por el contenido de CS, para generar la dirección de la siguiente instrucción a ejecutar. En otras palabras, podemos decir que la dirección de la siguiente instrucción a ejecutar vendrá por: CX x 10(hex) + IP

Page 29: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

2929

8.2.4.- El Registro de EstadoEstá formado por 16 bits, de los cuales 9 se utilizan para indicar diferentes situaciones que se producen durante la ejecución de un programa; los 7 bits restantes no se utilizan.

Los podemos agrupar en dos grupos: indicadores de condición, que reflejan los resultados de operaciones del programa e indicadores de control.Indicador de acarreo o Carry (CF), que se pone a 1 siempre que se produce algún acarreo como resultado de una operación aritmética.

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

Registro de estado del 8086

Page 30: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

3030

Indicador de paridad (PF), que se pone a 1 cuando el resultado producido por la ALU tiene un número para de 1 y se pone 0 cuando el resultado contiene un número impar de 1.Indicador auxiliar de acarreo (AF), que indica cuando está a 1 que se ha producido un acarreo entre grupos de 4 bits. Esto es útil cuando se opera con datos representados según el código BCD para que el resultado se ajuste al citado código.Indicador de cero (ZF), que se pone a 1 cuando el resultado de una operación es 0.Indicador de signo (SF), que indica 1 cuando el número es negativo. El 8086 trabaja de manera similar al 8085, utiliza el complemento a 2 para representar las cantidades numéricas.Indicador de desbordamiento (OF), que indica si se ha producido o no un desbordamiento como resultado de una operación aritmética poniéndose a 1 o 0, respectivamente.

Page 31: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

3131

Los bits indicadores de control son:Indicador de dirección (DF), que cuando está a 1 indica que las cadenas de caracteres se van a procesar en el sentido de las posiciones de memoria más altas a las más bajas, decrementando los registros índices SI o DI; mientras que cuando esté a 0, las cadenas se procesarán en sentido contrario, es decir, de las direcciones de memoria más bajas a las más altas.Indicador de interrupción (IF), que indica cuando está a 1, están permitidas las interrupciones enmascarables, mientras que cuando estáa 0 no estarán permitidas o habilitadas. Indicador de traza (TF), que cuando está a 1 indica que el llamado modo de intercepción esta activado, con lo que se genera una interrupción después de la ejecución de cada instrucción con objeto de poder visualizar los registros de trabajo y poder detectar posibles errores.

Page 32: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

3232

8.2.5.- La cola de esperaComo hemos visto anteriormente, la arquitectura del 8086 se compone de dos partes; la unidad de ejecución, que realiza las operaciones aritméticas, lógicas y de control habituales y la unidad de interfaz con el bus, encargada de controlar la comunicación con el exterior a través de los buses.Con esta separación se pretende conseguir una mayor rapidez del proceso, ya que mientras la ALU ejecuta una instrucción, la unidad de interfaz con el bus, de forma independiente, va buscando en la memoria las siguientes instrucciones en secuencia a ejecutar, almacenándolas en una lista o cola de espera formada por una memoria de 6 bytes y de la cual serán extraídas al finalizar la instrucción en curso sin necesidad de ir a buscarlas de nuevo a la memoria; de esta forma se habráconseguido una ganancia de tiempo a la fase de búsqueda de la instrucción.

Page 33: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

3333

8.3..3.-- OrganizaciOrganizacióón y Acceso a la Memorian y Acceso a la MemoriaVimos anteriormente que el bus de direcciones del 8086 tenía 20bits, por lo que va a ser capaz de direccionar 220 posiciones de memoria (1024 kBytes), y que esto se conseguía dividiendo la memoria en segmento lógicos, a cuya base apuntaban los registros de segmentación.Físicamente la memoria va a estar formada por dos bloques de 512 kBytes cada uno: a) conteniendo las direcciones pares y b) las direcciones impares y dando como resultado un bloque de 512 kpalabras. Conviene puntualizar que en el 8086 (1 palabra = 16 bits) y en un 8085 (1 palabra = 8bits). El primero de ellos es que cuando se va almacenar en memoria unapalabra de 16 bits, el byte menos significativo se almacena en la dirección de memoria inferior, mientras que el más significativo lo hace inmediatamente superior. Por ejemplo, después de almacenar los datos hexadecimales AA44 y BB55 en las posiciones 3F04 y 3F07, respectivamente, tendremos la situación que se da en la siguiente figura:

Page 34: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

3434

El primero de ellos es que cuando se va almacenar en memoria unapalabra de 16 bits, el byte menos significativo se almacena en la dirección de memoria inferior, mientras que el más significativo lo hace inmediatamente superior. Por ejemplo, después de almacenar los datos hexadecimales AA44 y BB55 en las posiciones 3F04 y 3F07, respectivamente, tendremos la situación que se da en la siguiente figura:

Posiciones Posicionespares impares

3F00 3F013F02 3F033F04 4 4 A A 3F053F06 5 5 3F073F08 B B

Situación particular de la memoria

Page 35: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

3535

8.4..4.-- Modos de DireccionamientoModos de DireccionamientoExisten 8 modos de direccionamiento para acceder a los datos de memoria que se pueden utilizar en el 8086:1.- Implícito 2.- Inmediato3.- A registro 4.- Absoluto o directo5.- Indirecto 6.- Indirecto por base7.- Indirecto por índice 8.- Indexado respecto de una base

Antes de pasar a ver con más detalles cada uno de los modos citados conviene aprender la forma de representar las constantes numéricas en diferentes sistemas de numeración para el microprocesador pueda entendernos.Lo único que hay que tener en cuenta es que las cantidades numéricas irán seguidas de la letra:- B, si son binarias. - O, si son octales.- D o nada, si son decimales. - h, si son hexadecimales.

Page 36: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

3636

Por ejemplo, las siguientes cantidades representan la misma constante numérica en diferentes sistemas de numeración:- 1010101B, en binario.- 125O, en octal.- 85D, en decimal.- 55H, en hexadecimal.

1.1.-- Direccionamiento implDireccionamiento implíícitocitoVamos a tener en el repertorio de instrucciones del 8086 un conjunto de instrucciones que no necesitarán ir seguidas de ningún operando por ir implícito con el código de operación. Por ejemplo AAA (ajuste ASCII para la suma), CLC (puesta a 0 del bit CF) y muchas más.

2.2.-- Direccionamiento inmediatoDireccionamiento inmediatoEn este modo de direccionamiento el operando se indica explícitamente. Por ejemplo: - MOV AL, 142 carga el registro AL, con el valor decimal 142.- ADD AH, 1AH suma al registro AH la constante hex. 1A.

Page 37: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

3737

3..-- Direccionamiento a registroDireccionamiento a registroEn este tipo de direccionamiento los operandos son los contenidos de los registros especificados en la instrucción. Por ejemplo:- MOV AL, DL traslada el contenido del reg. DL al reg. AL.- ADD AH, CX suma el reg. AH el contenido del reg. CX.

4.- Direccionamiento absoluto o directoDireccionamiento absoluto o directoLa instrucción MOV NUM,8 cargará la constante numérica 8 (direccionamiento inmediato) en la dirección resultante de sumar el desplazamiento NUM al producto resultante de multiplicar por 10H (o 16D) el contenido del registro de segmento DS; es decir, en la dirección DS x 10H + NUM.Otra forma de escribir la instrucción sería: MOV DS:NUM,8Sin embargo, la instrucción MOV ES:NUM,8 no sería equivalente a la anterior porque, aunque es el mismo (NUM), éste no se toma sobre el mismo segmento de memoria. En la siguiente figura se puede apreciar de forma más clara la diferencia entere las dos instrucciones.

Page 38: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

3838

Memoria principal

CSDSSSES

Registros de Segmento

Direccionamiento absoluto

DS * 10H + NUM

ES * 10H + NUM

Segmento de datos

Segmento extra

5..-- Direccionamiento indirectoDireccionamiento indirectoEste modo de direccionamiento es muy parecido al anterior. En este caso el operando o desplazamiento, se encuentra en uno de los registros índice o base (BX, BP, SI o DI) y se indica encerrando entre paréntesis cuadrado el nombre del registro referido.Por ejemplo: MOV [BX],CX llevará el contenido del registro CX (direccionamiento a registro) a la dirección resultante de sumar el contenido del registro BX al resultado de multiplicar por 10H elcontenido del registro de segmento DS, es decir a la dirección

DS x 10H + BX

Page 39: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

3939

6..-- Direccionamiento indirecto respecto a una baseDireccionamiento indirecto respecto a una baseEste tipo de direccionamiento es una mezcla entre el directo y el indirecto, ya que la posición del dato o mejor dicho el desplazamiento que nos va a dar la posición del dato con respecto al registro de segmento, viene dado por un registro de contenido interno que hace de base, BX o BP y un desplazamiento sobres esa base indicado de forma indirecta normalmente; aunque a veces también se hace de forma inmediata. Por ejemplo, la instrucción MOV AX,[BX+8] llevará al registro AX (direccionamiento a registro) el contenido resultante de la operación:

DS x 10H + BX + 8Este direccionamiento es útil cuando una tabla unidimensional o vector en memoria en la que cada elemento está formado por varios campos y en un momento dado se desea acceder a todos los campos que representan un misma característica. Por ejemplo, supongamos que tenemos un conjunto de datos formados por los nombres y las notas de tres asignaturas (Cálculo, Física y Química) de los 40 alumnos de un curso, almacenados a partir de la posición 1000H como se indica en la siguiente figura:

Page 40: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

4040

Conocemos según la figura que: BX → Base (Nombre)Desplazamiento necesario para acceder a las notas de Química. → 3Desplazamiento necesario para acceder a otro alumno. → 4Así, si quisiéramos recorrer la tabla para acceder a cada una de las notas en Química de los 40 alumnos y almacenarlas en la parte baja del acumulador, AL y después procesarlas tendríamos que hacer el siguiente algoritmo:

Direcciones Memoria (hex) principal

1095 Nota QuímicaNota Física

Nota CálculoNombre

------

1007 Nota Química1006 Nota Física1005 Nota Cálculo1004 Nombre1003 Nota Química1002 Nota Física1001 Nota Cálculo1000 Nombre

Alumno 2

Alumno 1

Alumno 40

Page 41: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

4141

CONTADOR ← 0BX ← 1000HRepetir

MOV AL,[BX+3]-------Proceso-------

BX ← BX + 4CONTADOR ← CONTADOR + 1

hasta que CONTADOR = 40

7.7.-- Direccionamiento indirecto con Direccionamiento indirecto con ííndicendiceMuy parecido al anterior, ya que el desplazamiento que nos da ladirección del dato respecto al registro de segmento correspondiente (DS normalmente) viene dado por una base, que será constante o una variable y un desplazamiento con respecto a esa base, que viene dado por el contenido de uno de los registros índice, SI o DI.Por ejemplo, la instrucción ADD AX,[DI+8] sumará al registro AX

Page 42: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

4242

(direccionamiento a registro) el contenido de la dirección resultante de la siguiente operación:

DS x 10H + 8 + DIEste direccionamiento puede ser útil para acceder a los datos de un vector simple (un campo por componente). Para lo cual la base deberáapuntar a la posición donde se encuentre el primer elemento o vector, quedando el índice como variable para acceder a la posición o posiciones deseadas.Por ejemplo, supongamos que tenemos un vector con los nombres de los 40 alumnos de una clase, almacenados a partir de la posición 1000H, como se indica en la siguiente figura.

Direcciones Memoria (hex) principal

1027 Nombre Alumno 40------

10021001 Nombre Alumno 21000 Nombre Alumno 1

Direccionamiento indirecto por índice

Page 43: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

4343

Conocemos que:Base ← 1000H (Nombre) y SI ← DesplazamientoEn estas condiciones, para acceder a los nombres de los 40 alumnos, llevarlos a la parte baja del acumulador (AL) y procesarlos tendríamos que hacer el siguiente algoritmo:SI ← 0Repetir

MOV AL,[SI + 1000H]----Proceso----

SI ← SI +1hasta que SI = 28H (40 en decimal)

Page 44: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

4444

8..-- Direccionamiento indexado respecto de una baseDireccionamiento indexado respecto de una baseEste modo de direccionamiento es una combinación del indirecto con índice y del indirecto con respecto de una base. En este caso el desplazamiento que nos da la posición del dato con respecto al registro del segmento correspondiente viene dado por la suma de los contenidos de un registro de base (BX o BP) , de un registro de índice (DI o SI) y de forma opcional, un desplazamiento adicional, dado por una constante o una variable.Por ejemplo, la instrucción ADD (BX+DI+NUM),AX sumará el contenido del registro AX (direccionamiento a registro) al dato contenido en la dirección dada por:

DS x 10H + BX + DI + NUMEste tipo de direccionamiento es útil cuando necesitamos acceder a una tabla bidimensional o matriz en la que los accesos se tienen que realizar por medio de dos variables.Por ejemplo y continuando con el ejemplo del punto 6, supongamos que lo que tenemos en memoria no son sólo los datos (nombre y nota en 3 asignaturas) de los 40 alumnos de una clase, sino los de las 20 clases de

Page 45: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

4545

un colegio. Entonces, si en un momento dado quisiéramos acceder a la nota de Física (dato 3 de cada alumno) del alumno n°7 del curso 10 y cargarla en el registro AL, tendríamos que hacer lo siguiente:BX ← 1000H ; dirección de comienzo de los datos

---BX ← BX + 09HSI ← 7 MOV AL,[BX + SI + 3]

------

Page 46: Unidad N°7 Entradas/Salidas Analógicas e Interrupcionesgspano/Lab de Microprocesadores IPVG 2008/Unidad 7y8.pdf · analógicas en digitales y viceversa. Un circuito que convierta

4646

FINFIN