En este apartado veremos dos temas importantes a tratar los cuales son Métodos de direccionamiento del procesador y conjunto de instrucciones y el tema de Técnicas de sincronización de datos. Para entender un poco mas de estos temas a continuación se habla de cada uno a detalle.
Unidad 2. Las
computadoras utilizan técnicas de modo de direccionamiento con el fin de acomodar una o ambas de las siguientes provisiones:
1. Dar versatilidad de programación al usuario proporcionando facilidades tales como indicadores, contadores, índices y relocalizadores de programa. 2. Reducir el número de bits en el campo de dirección de la instrucción.
Los modos de direccionamiento se pueden dividir en siete grandes grupos que son: 1. 2. 3. 4. 5. 6. 7.
Direccionamiento a registro. Direccionamiento inmediato. Direccionamiento directo. Direccionamiento indirecto a registro. Direccionamiento relativo a base. Direccionamiento indexado directo. Direccionamiento indexado a base.
El procesador determina cual de los siete modos de direccionamiento se usara mediante la examinación del contenido del campo de modo dentro de la instrucción.
MODO IMPLICITO. En este modo se especifican los operandos en forma implícita en la definición de la instrucción. Por ejemplo, la instrucción "complementar acumulador" es una instrucción de modo implícito porque el operando en el registro de acumulador esta implícito en la definición de la instrucción. De hecho todas las instrucciones de referencia a registro que utilizan un acumulador son instrucciones de modo implícito. Las instrucciones de dirección cero en una computadora organizada con pila son instrucciones de modo implícito porque esta implícito que los operandos están en la parte superior de la pila.
MODO INMEDIATO. En este modo se especifica el operando en la instrucción misma. En otras palabras, una instrucción de modo inmediato tiene un campo operando, en lugar de una campo de dirección. Un campo de operando contiene el operando real que se va a usar junto con la operación especificada en la instrucción. Las instrucciones de modo inmediato son útiles para inicializar registros en un valor constante. El campo de dirección de una instrucción puede especificar una palabra de memoria o un registro de procesador. Cuando el campo de dirección especifica un registro de procesador se dice que la instrucción esta en modo de registro.
MODO DE REGISTRO. En este modo, los operandos están en registros que residen dentro de la CPU. Se selecciona el registro particular de un campo de registro en la instrucción. Un campo k bits puede especificar cualquiera de 2 a la k registros.
MODO INDIRECTO POR REGISTRO. En este modo la instrucción especifica un registro en la CPU cuyo contenido proporciona la dirección del operando en la memoria. En otras palabras, el registro seleccionado contiene la dirección del operando en lugar del operando mismo. Antes de utilizar una instrucción de modo indirecto por registro, el programador debe asegurarse de que la dirección de memoria del operando esta colocada en el registro del procesador con una instrucción previa. Entonces una referencia al registro es equivalente a especificar una dirección de memoria. La ventaja de una instrucción de modo de registro indirecto es que el campo de dirección de la instrucción utiliza menos bits para seleccionar un registro de los que necesitaría para especificar una dirección de memoria en forma directa.
MODO DE DIRECCIONAMIENTO DIRECTO. En este modo la dirección efectiva es igual a la parte de dirección de la instrucción. El operando reside en memoria y su dirección la proporciona en forma directa el campo de dirección de la instrucción. En una instrucción de tipo brinco el campo de dirección especifica la dirección de transferencia de control del programa real.
MODO DE DIRECCIONAMIENTO INDIRECTO. En este modo, el campo de dirección de la instrucción proporciona la dirección en que se almacena la dirección efectiva en la memoria. El control recupera la instrucción de la memoria y utiliza su parte de dirección para accesar la memoria una vez mas con el fin de leer la dirección efectiva. Unos cuantos modos de direccionamiento requieren que el campo de dirección de la instrucción se sume al contenido de un registro especifico en la CPU. En estos modos la dirección efectiva se obtiene del calculo siguiente: Dirección efectiva = Parte de la instrucción + El contenido de registro CPU. EL registro de CPU utilizado en el calculo puede ser el contador de programa, un registro de índice o un registro base. En cualquier caso tenemos un modo de direccionamiento diferente que se utiliza para una aplicación distinta.
MODO DE DIRECCIONAMIENTO INDEXADO. En este modo el contenido de un registro índice se suma a la parte de dirección de la instrucción para obtener la dirección efectiva. El registro índice es un registro CPU especial que contiene un valor índice. Un campo de dirección de la instrucción define la dirección inicial del arreglo de datos en la memoria. Cada operando del arreglo se almacena en la memoria en relación con la dirección inicial. La distancia entre la dirección inicial y la dirección del operando es el valor del índice almacenado en el registro de índice. Cualquier operando en el arreglo puede accesarse con la misma instrucción siempre y cuando el registro índice contenga el valor de índice correcto.
El registro índice puede incrementarse para facilitar el acceso a operandos consecutivos. Nótese que si una instrucción de tipo índice no incluye un campo de dirección en su formato, la instrucción se convierte al modo de operación de indirecto por registro. Algunas computadoras dedican un registro de CPU para que funcione exclusivamente como un registro índice. De manera implícita este registro participa cuando se utiliza una instrucción de modo índice. En las computadoras con muchos registros de procesador, cualquiera de los registros de la CPU pueden contener el numero de índice. En tal caso, el registro debe estar especificado en forma explícita en una campo de registro dentro del formato de instrucción.
MODO DE DIRECCIONAMIENTO REGISTRO BASE.
DE
En este modo, el contenido de un registro base se suma a la parte de dirección de la instrucción para obtener la dirección efectiva. Esto es similar al modo de direccionamiento indexado, excepto en que el registro se denomina ahora registro base, en lugar de registro índice. La diferencia entre los dos modos esta en la manera en que se usan mas que en la manera en que se calculan. Se considera que un registro base contiene una dirección base y que el campo de dirección de la instrucción proporciona un desplazamiento en relación con esta dirección base. El modo de direccionamiento de registro base se utiliza en las computadoras para facilitar la localización de los programas en memoria.
INSTRUCCIONES DEL PROCESADOR. Las instrucciones de un procesador se pueden agrupar en tres tipos: Instrucciones de Transferencia Instrucciones de Operación Instrucciones de Control Instrucciones de Transferencia: Como su nombre lo indica, este grupo de instrucciones se utiliza para efectuar transferencia de datos entre los registros de la CPU, la memoria y los puertos de E/S.
Instrucciones de Operación: Estas instrucciones se emplean para realizar operaciones aritméticas y lógicas entre los registros del procesador y la memoria. Estas operaciones incluyen suma, resta, incremento decremento, complemento, comparación y corrimiento. Instrucciones de Control En el lenguaje Ensamblador y en general en cualquier lenguaje de programación las instrucciones de control juegan un papel muy importante en el flujo de un programa. Su función consiste en alterar el flujo normal del programa, según el estado de ciertos registros del sistema que indican alguna condición después de ejecutar una instrucción. Con este tipo de instrucciones es posible tomar el control del flujo del programa.
TEMPORIZACIÓN DEL SISTEMA. El elemento fundamental del temporizador es un contador binario, encargado de contar los pulsos suministrados por algún circuito oscilador, con una base de tiempo estable y conocida. El simple hecho de contar pulsos de una duración fija nos permite medir el tiempo con precisiones asombrosas, determinadas fundamentalmente por la estabilidad del generador de pulsos y por los circuitos electrónicos del contador binario. Sin embargo, un contador útil debe tener más elementos que permitan sacar provecho a ése circuito básico, es por ello que los microcontroladores utilizan un conjunto de circuitos auxiliares para poder manejar, con cierto nivel de libertad, las características básicas del contador binario y convertir el conjunto en un temporizador/contador programable.
Los temporizadores se utilizan en hacer una lista completa es prácticamente imposible, pero algunos ejemplos de su aplicación, nos ayudarán a adentrarnos en los entresijos de su diseño y sacarle provecho a sus potencialidades. Medición de tiempo División de frecuencia. Medición de periodo y frecuencia Conteo de eventos Base de tiempo para otros periféricos USART PWM Watch Dog
CARACTERÍSTICAS. En el mundo del diseño digital, los temporizadores constituyen periféricos muy útiles. Se diseñan con ciertas características que determinan el uso que podemos darle a un temporizador, veamos algunas: Longitud del contador: Los más comunes son aquellos que tienen 8 ó 16 bits, determina la cantidad máxima de pulsos que se pueden contar. Lectura/escritura: En general, los temporizadores pueden ser escritos o leídos por el procesador del microcontrolador. En algunos casos, donde el temporizador está vinculado a algún periférico muy específico, esta opción puede no existir o estar limitada.
CARACTERÍSTICAS. Modos de trabajo: Existen, en principio dos: contador y temporizador. Como contador, se cuentan los pulsos desde una fuente externa al microcontrolador. Los pulsos contados pueden tener período variable. Como temporizador, se cuentan los pulsos suministrados por una fuente estable y conocida, que puede ser externa, o alguna fuente generada internamente por el microcontrolador. Forma de conteo: La forma típica es el conteo ascendente, sin embargo, existen contadores con la opción de configurar el modo de conteo, sea éste ascendente, descendente o de otro tipo específico. Configuración de activación por frente: Permite establecer cuando se produce el conteo, si en el frente de subida del reloj o en el frente de caída del mismo.
CARACTERÍSTICAS. Configuración del reloj: En la mayoría de los casos la fuente de reloj es configurable. Incluso existen microcontroladores con abundante variedad de formas de configurar el reloj, de modo que se puedan obtener distintos tipos de bases de tiempo. Interrupciones: En la mayoría de casos, los temporizadores tienen interrupciones asociadas, con el objetivo de notificar al procesador que ha ocurrido el cruce por cero o algún valor específico en el registro de conteo. Características especiales: Muchos microcontroladores tienen temporizadores especializados para trabajar de conjunto con algunos de sus periféricos, o para ser utilizados en aplicaciones específicas.
La estructura básica de un temporizador/contador.
En el esquema simplificado podemos observar que el contador está compuesto por tres bloques fundamentales:
La estructura básica de un temporizador/contador. Contador binario: es el elemento básico del temporizador/contador y su misión es contar los pulsos del reloj. Hay dos propiedades esenciales a tener en cuenta, respecto a este componente: la cantidad de pulsos que puede contar y la posibilidad de controlar el sentido del conteo, sea ascendente o descendente. Circuitos de configuración y control: constituyen la interfaz entre el contador binario y los circuitos externos. Es uno de los elementos que da valor añadido al simple contador binario. Circuitos especializados de salida: Se utilizan para notificar, a otro elemento del sistema, sobre el estado del temporizador o acerca de la ocurrencia de un determinado evento.
Estado de espera Cuando se conectan tarjetas al bus de la PC, un problema común es igualar la velocidad de los ciclos del bus con la de las tarjetas. Es común que una tarjeta sea más lenta que el bus. Así, el bus de la PC esta diseñado para resolver este problema. La señal READY del bus se puede usar para extender la longitud del ciclo del bus para igualar una tarjeta lenta o parar el bus del sistema hasta que se sincronice con el ciclo de la tarjeta. Los ciclos del bus del 8088 normalmente son de cuatro pulsos y se describen por T1 hasta T4. En algunos ciclos el hardware de la PC, automáticamente inserta un pulso ocioso extra llamado TW. La señal READY se usa para insertar estados nuevos o adicionales de espera. Debido a que los diferentes ciclos del bus requieren distintos tiempos, la señal READY se debe controlar de manera diferente
Generación de estados de espera en ciclos de bus de memoria El hardware de la PC no inserta estados de espera en los ciclos de lectura o escritura a memoria, sino que esto lo hace la tarjeta usando la señal READY. La figura ilustra las señales de tiempo necesarias para generar un estado de espera para un ciclo de lectura o escritura a memoria.
Tiempos de un estado de espera para ciclos de lectura o escritura a memoria.
Los circuitos de la tarjeta madre muestran la señal READY en el flanco de subida del tiempo T2. Esta señal debe ser valida (activo alto) 75 nanosegundos antes del flanco de subida de T2 para que no se genere un estado de espera. Si se requiere un estado de espera, la señal READY debe ser valida (activo bajo) 60 nanosegundos antes del flanco de subida de T2. Si la señal READY se mantiene en bajo hasta el flanco de subida del siguiente pulso, se inserta un estado de espera adicional. Para las operaciones de lectura y escritura de E/S también se usa la señal READY, y los tiempos son los mismos que para acceso a memoria, excepto que la señal READY se muestrea en T3.
Generación de estados de espera en ciclos de bus de DMA La PC automáticamente inserta un estado de espera en todos los ciclos de DMA en los canales 1, 2 y 3. No se insertan estados de espera en el canal 0; sólo se usa para soportar el refresco de memoria y no esta disponible para funciones normales de DMA. Para asegurar que un estado de espera adicional se inserta en el ciclo de DMA, la señal READY debe estar en bajo 135 nanosegundos antes del flanco de bajada del estado SW1. Para asegurar que no se inserta un estado de espera adicional, la señal READY debe estar en alto 115 nanosegundos antes del flanco de bajada del siguiente pulso S.
Interrupciones hardware Ocurren cuando un dispositivo necesita atención del procesador y genera una señal eléctrica en la línea IRQ que tiene asignada. Esta señal es recogida y procesada por el controlador de excepciones PIC antes de ser enviada al procesador, lo que puede realizarse de dos formas, según el tipo de interrupción sea enmascarable o no enmascarable. Interrupción enmascarable significa que, bajo control del software, el procesador puede aceptar o ignorar (enmascarar) la señal de interrupción. Interrupción no enmascarable significa que la interrupción no puede ser deshabilitada por software. Este tipo de interrupciones ocurren cuando se recibe una señal en la patilla NMI del procesador.
Interrupciones por software También se denomina interrupción a las llamadas al sistema operativo mediante una instrucción, normalmente de Entrada/Salida. Una interrupción por software, se prevé en qué momento de la ejecución de un programa sucederá. En general actúa de la siguiente manera: . Un programa que se venía ejecutando luego de su instrucción I5, llama al Sistema Operativo, por ejemplo para leer un archivo de disco.
. A tal efecto, luego de I5 existe en el programa, la instrucción de código máquina CD21, simbolizada INT 21 en Asembler, que realiza el requerimiento del paso 1. Puesto que no puede seguir le ejecución de la instrucción I6 y siguientes del programa hasta que no se haya leído el disco y esté en memoria principal dicho archivo, virtualmente el programa se ha interrumpido, siendo, además, que luego de INT 21, las instrucciones que se ejecutarán no serán del programa, sino del Sistema Operativo. . La ejecución de INT 21 permite hallar la subrutina del SO. . Se ejecuta la subrutina del SO que prepara la lectura del disco. . Luego de ejecutarse la subrutina del SO, y una vez que se haya leído el disco y verificado que la lectura es correcta, el SO ordenará reanudar la ejecución del programa auto interrumpido en espera. . La ejecución del programa se reanuda.
Con todo lo visto anterior se llega a la conclusión que los temas que se han tratado son importantes para el estudio de las personas y conozcan un poco mas de los temas. Con esta investigación se espera que sirva para investigaciones futuras.
http://akimpech.izt.uam.mx/Web_jr/ami211.htm http://es.wikipedia.org/wiki/Interrupci%C3%B3n http://sopa.dis.ulpgc.es/iidso/leclinux/interrupciones/int_hard/LEC3_INT_HARD.pdf http://sopa.dis.ulpgc.es/iidso/leclinux/interrupciones/system_call/LEC2_INT_SOFT.pdf