Está en la página 1de 64

UNIVERSIDAD TECNOLGICA AMRICA FACULTAD DE CIENCIAS DE LA COMPUTACIN Y ELECTRNICA EDUCACIN A DISTANCIA GUA DE ESTUDIO

DATOS INFORMATIVOS
Carrera: Asignatura: Nivel: Electrnica Microprocesadores Octavo

Autor de la Gua: Ing. Flavio Corella Guerra E-MAIL: Fecha Edicin: fcorella1064@yahoo.es Marzo 2009

FUNDAMENTACIN DE LA ASIGNATURA: Los microprocesadores son los dispositivos electrnicos de mayor uso en la actualidad, debido a que son la parte fundamental de los computadores.

Su reducido tamao y precio, junto con sus altas prestaciones, permiten ahora incorporarlos en aplicaciones donde antes se utilizaba la lgica discreta.

Debido a todo esto se hace necesario tener un conocimiento pleno de la programacin de estos dispositivos. OBJETIVOS DE LA ASIGNATURA. GENERAL Comprender el funcionamiento y las secuencias de acciones cuando una computadora ejecuta un programa.

ESPECFICOS Comprender las arquitecturas de los personales Establecer diferencias y semejanzas entre los distintos tipos de microprocesadores Programar en lenguaje ensamblador

5.- PLAN TEMTICO POR UNIDADES. CONTENIDO UNIDAD 1. INTRODUCCIN A LOS MICROPROCESADORES. 1.1 Historia de la Arquitectura de las Computadoras. 1.2 Familias de Microprocesadores Intel y con otros micros. UNIDAD 2. ARQUITECTURA DEL PC 2.1 Arquitectura general de una MicroComputadora. 2.2 Arquitectura de 3 buses. 2.3 Microprocesador, definicin y funciones bsicas. 2.4 El CPU: definicin y elementos (ALU, registros, unidad de control). 2.5 Memorias ROM y RAM. 2.6 Unidades de Entrada y Salida. 2.6.1 Interfases. 2.6.2 Puertos. 2.7. Buses de Direccin, Datos, y Control. UNIDAD 3. EL MICROPROCESADOR 8085 3.1 Caractersticas. 3.2 Descripcin de pines y seales bsicas del microprocesador. 3.3 Mapa de memoria y puertos. 3.4 Conceptos Iniciales sobre DMA e Interrupciones. 3.5 Alta Impedancia para el diseo de Buses. 3.6 Ciclos de mquina e instruccin. 3.7 Temporizacin. 3.8 Sistema de Reset y Clock. 3.9 Arquitectura bsica usando el 8085. UNIDAD 4. EL MICROPROCESADOR 8086 / 8088 4.1 Arquitectura del 8086/8088 4.2 Registros de trabajo y banderas. (Flags). 4.3 Descripcin de Pines 8086/8088. 4.4 Modos de Direccionamiento 4.5 Conceptos de traductores, intrpretes, compiladores y ensambladores. 4.6 Lenguaje de Mquina y Ensamblador. 4.7 Formato de una sentencia en Assembler. 4.8 Instrucciones y Pseudo Instrucciones. 4.9 Formatos de Datos e Instrucciones. 4.10 Rutinas y Subrutinas, Uso de la Pila. 4.11 Archivos. ASM, .HEX y .LST. UNIDAD 5. PERIFRICOS PROGRAMABLES 5.1 Interfase paralela (PPI) 8255. 5.2 Temporizador / Contador 8253. 5.3 Interfase serial 8251. 5.4 Controlador de DMA 8237. 5.5 Controlador de interrupciones 8259.

UNIDAD 6 ASSEMBLY PARA MICROPROCESADORES X86 6.1 Segmentos stack, data y code. 6.2 Ensamblar, Enlazar y Correr un programa usando TASM o MASM. 6.3 Instrucciones de salto y llamada: FAR y NEAR. 6.4 Tipos de Datos y Definicin 6.5 Directivas ORG, DB, DUP, DW, EQU, DD, DQ, DT. 6.6 Modelos de Memorias: Small, Medium, Compact, Large y Huge. 6.7 Archivos EXE y COM. 6.8 Suma, Resta, Multiplicacin y Divisin sin signo. 6.9 Operaciones Lgicas. 6.10 Operaciones BCD y ASCII. 6.11 Rotacin y Desplazamiento. 6.12 Subrutinas

ORIENTACIONES METODOLGICAS.

6.1 Objetivos.- La metodologa que se utilizar en las sesiones de clase


est orientada fundamentalmente a: Estimular la reflexin, creatividad e independencia del estudiante, para que este obtenga una mejor destreza de los conocimientos que adquiera. Estimular las potencialidades de razonamiento del alumno a travs de situaciones que vinculen permanentemente los contenidos tanto tericos como prcticos para su aplicacin. Estimular la investigacin tanto en el material bibliogrfico como tambin en la investigacin en instituciones ya sea en el sector pblico como privado.

Actividades:
Mtodo de Trabajo en grupo que ser la herramienta principal para dar solucin a los problemas encontrados al realizar las tareas, buscando que el grupo interacte entre si y estableciendo nexos de cordialidad y afinidad, que faciliten el trabajo de cada estudiante. Mtodo de discusin, al presentar los contenidos tericos de la materia al estudiante, y que este aporte su punto de vista respecto a los mismos. Mtodo de Resolucin de Problemas y ejercicios de programacin

Medios.- Para el cabal cumplimiento de esta asignatura se utilizan las herramientas de apoyo proporcionadas al alumno

Tarea - La resolucin y exposicin de ejercicios que tienen directa injerencia con


el objetivo de la asignatura. SISTEMA DE EVALUACN. La evaluacin es un proceso permanente, donde se analiza

cualitativamente los cambios que se han efectuado en el alumno en relacin con el rendimiento acadmico y el nivel de desarrollo de la personalidad a lo largo de un semestre; para cumplir con las evaluaciones se darn considerando los siguientes parmetros:

El sistema de evaluacin est estructurado sobre la base de las actividades que usted realice en tutora o en su casa.

Exmenes y trabajos de aplicacin en los que el estudiante aplicar sus conocimientos en forma prctica y peridica mediante evaluaciones orales y escritas, a ms de la presentacin de los resultados obtenidos en sus tareas

Las tareas sern presentadas en forma escrita y defendida, estas tareas sern enviados a resolver de acuerdo a casos prcticos.

La asistencia regular y participativa en clase por parte del alumno.

Indicadores de evaluacin 1. Capacidad de disear e implementar interfaces de control y de comunicacin 2. Orden y claridad en la escritura de programas 3. Presentacin formal y puntual en tareas y exposiciones. BIBLIOGRAFA DE LA ASIGNATURA. La bibliografa a utilizar en esta asignatura es la siguiente

Bsica:
1. GARCA Ciriaco: El Universo Digital del IBM PC; 2 edicin 2. INTEL Microprocessor an Peripheral Handbook

3. ZELENOVSKY Ricardo: El IBM PC para ingenieros elctricos

El primer libo est disponible de manera libre en internet

Complementaria:
www.universodigital.com www.pablin.com.ar www.todorobot.com.ar

DESARROLLO DE LAS UNIDADES DIDCTICAS. UNIDAD 1 SNTESIS DEL CONTENIDO Introduccin a los microprocesadores
Objetivo.- Comprender la importancia de los microprocesadores en la vida moderna 1.1 HISTORIA DE LA ARQUITRCTURA DE LOS COMPUTADORES Los computadores nacieron pesados, grandes y extraordinariamente caros. Incluso en pocas relativamente "recientes", los ordenadores solo eran accesibles para empresas e instituciones. Es cierto que a finales de los 60 empiezan a fabricarse "minis", un tipo de ordenador accesibles a pequeas y medianas empresas. Pero desde luego, con un precio equivalente al que hoy tendra una vivienda mediana, estaban muy alejados de lo que podramos considerar como informtica personal. En agosto de 1981 IBM hace algo inslito: sorprende a todo el mundo con el lanzamiento de un ordenador "Personal", el IBM PC 5150 ("Personal Computer"); algo que pareca ms un "divertimento" de los diseadores de IBM que un producto del Gigante Azul [3]. Ms sorprendente si cabe, fue la decisin de proporcionar informacin y soporte a pequeas empresas de software y fabricantes de perifricos, para que pudieran fabricar complementos para el nuevo producto (esta decisin fue sin duda una de las claves de su xito). Este PC original estaba muy limitado en ciertos aspectos. Solo poda montar dos disquetes de 160 KB, y se ofreca con 16 KB de RAM, aunque la placa-base poda contener 64 KB. y se podan instalar "hasta" 256 KB de memoria utilizando tarjetas de expansin (cantidad que pareca astronmica en aquel entonces). El producto se convirti en un xito inmediato que pronto excedi cualquier expectativa imaginable. Se ha dicho hasta la saciedad que el xito sorprendi a El IBM PC modelo 5150

todo el mundo, incluyendo a sus creadores [4]. IBM haba estimado unas ventas del orden de 250.000 unidades en un periodo de cinco aos; posteriormente esta cifra se alcanz mensualmente. A principios de 1983 IBM lanza el PC XT ("PC eXTended") que incluye un disco duro del que carecan los primeros modelos. A fin de ao se anuncia el PC Jr. que pas a la historia con ms pena que gloria. En verano de 1984, junto con algunas mejoras de diseo, IBM incluye el procesador 80286 como motor de la gama PC, dando lugar a la familia PC AT ("PC Advanced Technology"). Adems de las estrictamente tcnicas, IBM haba cometido algunas otras imprevisiones en el diseo del PC, empezando una proteccin legal insuficiente (no haban registrado las patentes adecuadas). Ante el fenomenal xito del producto y la proliferacin de clnicos, decidi enmendar el entuerto diseando una nueva familia ms avanzada tcnicamente y de la que estaba patentado hasta el ltimo tornillo. La nueva serie, presentada en 1987, se denominaba PS/2 (Personal System) y el bus MCA (Micro channel) utilizado era muy superior al ISA del PC [5]. Sin embargo, an con sus defectos, el PC pareca tener vida propia, y a mediados de los 80 escap del control de sus creadores. Desde entonces la evolucin de la criatura ha venido dictada por las fuerzas del mercado. El resto de la historia, hasta nuestros das, es de todos conocida. El PC ha colocado en nuestros escritorios capacidades de proceso que hasta hace muy poco solo eran concebibles en costossimos mainframes o sofisticadas workstations. Recientemente lea un informe sealando que en verano del 2002, poco ms de 20 aos despus del lanzamiento del primer PC, la industria del PC haba alcanzado la cifra de mil millones de PCs vendidos.

1.2 FAMILIAS DE MICROPROCESADORES En la tabla adjunta se muestran las caractersticas principales de los procesadores ms utilizados.

Modelo

Transistores

Velocidad del ncleo

Cach L2

Velocidad bus frontal

Celeron Pentium II Pentium III Pentium III Xeon Pentium 4 K6-II K6-III Athlon (K7) Athlon XP Duron PowerPC G3 PowerPC G4 Athlon 64

7,500,000 7,500,000 9,500,000 28,100,000 55,000,000 9,300,000 21,300,000 22,000,000 37,500,000 N/A 6,500,000 10,500,000 105,900,000

1.06 GHz - 2 GHz 233 MHz - 450 MHz 450 MHz - 1 GHz 500 MHz - 1 GHz 1.4 GHz - 3.4 GHz 500 MHz - 550 MHz 400 MHz - 450 MHz 850 MHz - 1.2 GHz 1.67 GHz 700-800 MHz 233 MHz - 333 MHz 400 MHz - 800 MHz 800 MHz

256 KB 512 KB 256 KB 256 KB - 2 MB 256 KB N/A 256 KB 256 KB 384 KB 64 KB 512 KB, 1 MB 1 MB 1 MB

133 MHz y 400 MHz 100 MHz 133 MHz 100 MHz 800 MHz 100 MHz 100 MHz 200 MHz y 266 MHz 266 MHz 200 MHz 100 MHz 100 MHz 1.6 GHz

UNIDAD 2 ARQUITECTURA DEL PC Objetivo.- Conocer el funcionamiento interno de un PC 2.1 ARQUITECTURA DEL COMPUTADOR Cuando se habla de arquitectura del ordenador se est refiriendo al hardware. El hardware del ordenador sigue el modelo estructural bsico definido por la arquitectura de Von Neumam, es el que se muestra en la figura. La ALU es donde se ejecutan las instrucciones de los programas. La unidad de control es el dispositivo para coordinar y controlar el funcionamiento de los restantes elementos del ordenador. La memoria es el lugar donde se guardan las instrucciones y los datos del programa, en ella se puede escribir y leer todas las veces que se necesite. La unidad de entrada y salida es el dispositivo que se encarga de recibir la informacin del exterior desde el teclado, ratn, disco duro, etc., y de devolver los resultados al exterior a travs del monitor, impresora, disco duro, etc. Los ordenadores incorporan un reloj interno que, entre otras funciones sirve para que la unidad de control pueda repartir su tiempo entre las distintas tareas que realiza.

todos

estos elementos Central conocida ingls CPU. consideran que formada por la de Control, ya elementos estn solo circuito de por

se le llama Unidad Procesos sus Otros siglas ms en

autores

la CPU solo est ALU y la Unidad que estos dos

construidos en un integrado, llamado microprocesador.

Ver un ordenador funcionando forma ya parte de la cotidianidad. Trabajar con un procesador de textos, controlar las cuentas del banco o navegar por Internet, son acciones cotidianas que no requieren prcticamente ningn conocimiento tcnico sobre el funcionamiento del ordenador. En multitud de ocasiones el PC se convierte en un instrumento de uso tan habitual que llega a olvidarse la enorme cantidad de tecnologa que hace posible su funcionamiento.

Aunque el PC se arranca pulsando un botn de forma tan simple como cuando se enciende un televisor, su estructura interna no puede explicarse como un circuito elctrico por el que llega la corriente que permite a todos sus componentes encenderse y empezar a funcionar. Cada uno de los componentes de un ordenador tiene unas tareas asignadas y requiere del resto de los componentes para cumplir su cometido, que no es otro que procesar la informacin que recibe. Bsicamente, el funcionamiento de un PC se divide en cuatro grupos de tareas: la CPU procesa los datos que recibe la memoria almacena la informacin tanto por procesar como ya procesada los puertos de entrada reciben la informacin para procesarla o almacenarla los puertos de salida la sacan del ordenador despus de su procesamiento. Para que esta estructura funcione, todos los elementos que componen un ordenador deben comunicarse entre s, de forma que la informacin pueda circular entre los distintos grupos de tareas. De esta comunicacin interna se encarga el bus del sistema que interconecta los componentes bsicos del PC.

2.2 .- Funcionamiento
Cuando el PC est en marcha, el microprocesador es el elemento encargado de manipular la informacin que circula por el ordenador y de controlar gran parte de las tareas restantes llevadas a cabo por otros componentes. El funcionamiento del PC consiste en la ejecucin de programas, lo que significa que se basa en la interpretacin de series de instrucciones que el microprocesador recibe, estas instrucciones le son facilitadas por la memoria. La intercomunicacin entre la memoria y el microprocesador es una transmisin de informacin que se efecta a travs de buses de datos.

Fsicamente, tanto el procesador como la memoria, se conectan a la placa base, un circuito impreso de grandes dimensiones sobre el que se monta el PC, e integra los circuitos que los interconectan, que constituyen el bus del sistema. Los primeros IBM PC contaban con un bus que interconectaba todos los componentes del PC de igual a igual. Con el tiempo esta estructura inicial demostr no ser capaz de absorber los caudales de datos que requeran todos los componentes; empez a fraccionarse y especializarse propiciando la aparicin de nuevos buses de datos y direcciones. En la actualidad los ordenadores se estructuran internamente en funcin del microprocesador y del chipset, que no es ms que un conjunto de integrados que se encarga de enlazar y gestionar los distintos buses que hay en la placa base. Los

PC's tienen un bus del sistema que conecta la RAM, el microprocesador y la

memoria cach.

Dependiendo del ancho de banda de los buses de datos puede estar formado por 8,16, 32 o 64 bits. Para que el bus del sistema pueda comunicarse con el resto de dispositivos del PC, el chipset le pone en contacto con el bus PCI. Para conectar los perifricos al PC, el bus PCI incorpora a la placa base ranuras de expansin por las que los perifricos pueden contactar con el bus. Para mantener la compatibilidad con las tarjetas de ampliacin ISA los chipsets facilitan una pasarela de conexin entre el bus PCI y el ISA. junto a las ranuras de expansin PCI suelen haber ranuras ISA que permiten conectar perifricos que requieren una capacidad de transferencia muy pequea. Tambin el nuevo bus AGP est conectado con el chipset a una frecuencia de 66 o 100 MHz. Gracias al bus AGP, la tarjeta de vdeo pasa de conectarse del bus PCI a estar conectada directamente al bus del sistema, acelerando enormemente los procesos.

2.3 La memoria Bsicamente, la memoria puede dividirse en dos tipos, la RAM y la ROM. Ambos tipos almacenan los datos en forma de instrucciones que el microprocesador puede ejecutar. La gran diferencia entre la memoria RAM y la ROM es la forma en que cada una de ellas mantiene la informacin. El microprocesador puede almacenar y recuperar datos en la memoria RAM de forma gil y rpida, pero stos se pierden al desconectar la mquina. En el caso de la memoria ROM el procesador no puede almacenar informacin, slo leerla, pero, al contrario de lo que sucede con la memoria RAM, su contenido no se pierde cuando se desconecta el ordenador. Gracias a esta caracterstica de la memoria ROM, cuando se arranca el ordenador, el microprocesador puede recuperar, desde ella, el programa que va a permitirle empezar a funcionar.

Este programa de arranque forma parte del BIOS, junto al programa que permite inicializar el ordenador, el BIOS cuenta con una serie de rutinas de apoyo que son las que permiten que el PC reconozca todos los perifricos conectados a l. De la misma forma que la memoria RAM, el BIOS tambin est conectado al bus del sistema.

2.4 EL MICROPROCESADOR El microprocesador es, a un mismo tiempo, el motor y el cerebro del ordenador, el encargado de efectuar todos los clculos y procesos que le permiten funcionar. Por lo tanto, no es extrao que sea el componente ms caro del interior del PC, pudiendo alcanzar un coste equivalente a dos o tres veces el de la placa base donde se aloja. Es un tipo de componente electrnico en cuyo interior existen millones de elementos llamados transistores, cuya combinacin permite realizar el trabajo que tenga encomendado el microprocesador. El microprocesador, o procesador, ejecuta las instrucciones y clculos que forman los programas, a la vez que se encarga de enviar y recibir tanto la informacin que necesitan como la que generan todos los componentes del PC. A veces al micro se le denomina "la CPU" (Central Process Unit, Unidad Central de Proceso), aunque este trmino tiene cierta ambigedad, pues tambin puede referirse a toda la caja que contiene la placa base, el micro, las tarjetas y el resto de la circuitera principal del ordenador. Para que un PC aproveche al mximo el rendimiento de su procesador, tanto los mdulos de memoria, como el disco duro, el adaptador de video, etc., debern poseer un nivel de prestaciones idntico o superior al suyo. Partes de un microprocesador En un micro podemos diferenciar diversas partes:

o el encapsulado: es lo que rodea a la oblea de silicio en s, para darle consistencia, impedir su deterioro (por ejemplo por oxidacin con el aire) y permitir el enlace con los conectores externos que lo acoplarn a su zcalo o a la placa base. o la memoria cach: una memoria ultrarrpida que sirve al micro para tener a mano ciertos datos que previsiblemente sern utilizados en las siguientes operaciones sin tener que acudir a la memoria RAM, reduciendo el tiempo de espera. Es lo que se conoce como cach de primer nivel; es decir, la que est ms cerca del micro, tanto que est encapsulada junto a l. Todos los micros tipo Intel desde el 486 tienen esta memoria, tambin llamada cach interna. o el coprocesador matemtico: o, ms correctamente, la FPU (Floating Point Unit, Unidad de coma Flotante). Parte del micro especializada en esa clase de clculos matemticos; tambin puede estar en el exterior del micro, en otro chip. o el resto del micro: el cual tiene varias partes (unidad de enteros, registros, etc.) que no merece la pena detallar.

2.5 Interfaces
El trmino interfaz es de uso muy frecuente en informtica. Es un concepto abstracto, que puede referirse a un dispositivo fsico (hardware) o a un dispositivo lgico (software), aunque lo comn es que se trate de una mezcla de ambos. Se refiere al mbito de conexin entre dos sistemas. En este captulo intentaremos mostrar una panormica general de las interfaces entre los dispositivos externos (discos generalmente) y la placa base. La evolucin de las interfaces est ntimamente asociada con dos tipos de dispositivos: las unidades de disco y las controladoras grficas. Ya que son estos dispositivos, los que han propiciado las mejoras en los sistemas de conexin existentes. La capacidad y velocidad de los equipos informticos se doble aproximadamente cada dos aos, y los discos duros no son una excepcin. Su velocidad de

transferencia se dobla ms o menos cada 24 meses, lo que ha exigido la mejora de las interfaces utilizadas. La historia resumida es la siguiente:

ST506/412

Es la interfaz original desarrollada por Seagate Technology en

1978 para soportar sus discos ST-506 y ST-412; de 5 y 10 MB de capacidad respectivamente!. La electrnica de control esta situada en la tarjeta adaptadora, que se inserta en un "slot" de la placa base, y se une al disco mediante dos cables; uno de control y otro de datos.

ESDI ("Enhanced Small Device Interface"). Desde 1983. Fue desarrollada por Maxtor Corporation, un conocido fabricante de discos, como una mejora de la tradicional ST-506/412. La principal novedad es que el sistema de codificacin/decodificacin de la seal, una de las partes ms crticas de un disco, est situada en la propia unidad de disco, lo que permite comunicaciones ms rpidas con la controladora y unidades de ms capacidad. Mantiene el mismo sistema de cables que sus predecesoras, aunque utilizados de otra forma. Fue muy popular, incluso lleg a ser un estndar ANSI, aunque actualmente (2003) est en desuso.

IDE/ATA ("Integrated Drive Electronics/AT Attachment"). Desde 1986 SCSI Desde 1986 a la actualidad

PCI ("Peripheral Component Interconnect"). Nacida en 1992 S-ATA ("Serial ATA"). Una evolucin del anterior que utiliza un cable serie para comunicar la placa con el dispositivo

ORIENTACION METODOLGICA PARA EL APRENDIZAJE Repasar textos de electrnica y diseo electrnico Consultar las especificaciones tcnicas (carpeta DataSheets) de los dispositivos que se utilizarn (diodos, triacs, etc.) Calcular el valor de las resistencias necesarias para limitar la corriente que atraviesa un led

UNIDAD 3 EL PROCESADOR 8085 Objetivo.- Conocer el funcionamiento interno de los microprocesadores Se distinguen 3 bloques de memoria Memoria de programa. Contiene el programa con las instrucciones que gobiernan la aplicacin. Es de tipo no voltil Memoria de datos RAM. Se destina a guardar las variables y datos. Es voltil Memoria EEPROM de datos. Es una pequea rea de memoria de datos de la lectura y escritura no voltil, gracias a la cual, un corte del suministro de la alimentacin no ocasiona la prdida de la informacin. Que estar disponible al reiniciarse el programa

El Intel 8085 es un procesador de 8 bits fabricado por Intel a mediados de los 70. Era binariamente compatible con el anterior Intel 8080 pero exiga menos soporte de hardware, as permita unos sistemas de microordenadores ms simples y ms baratos de hacer. El nmero 5 de la numeracin del procesador proviene del hecho que solamente requera una alimentacin de 5 voltios, no como el 8080 que necesitaba unas alimentaciones de 5 y 12 voltios. Ambos procesadores fueron usados alguna vez en ordenadores corriendo el sistema operativo CP/M, y el procesador 8085 fue usado como un microcontrolador. Ambos diseos fueron sobrepasados por el Z80 que era ms compatible y mejor, que se llev todo el mercado de los ordenadores CP/M, al mismo tiempo que participaba en la prosperidad del mercado de los ordenadores personales en mediados de los 80. Longitud de palabra La longitud de palabra del microprocesador intel 8085 es de 8 bits, o lo que es lo mismo, 1 byte.

Bus de datos El bus de datos tiene un tamao de 8 bits y por lo tanto el registro MDR tiene ese mismo tamao. Adems esto implica que el microprocesador slo podr leer y escribir datos de 8 bits. Bus de direcciones El bus de direcciones tiene un tamao de 8 bits. Para dar una direccin de 16 bit , usa los 8bits del bus de datos y los 8 bits del bus de direcciones, ahorrando terminales (patillas) multiplexando en el tiempo el bus de datos y el de direcciones. Esto implica que se pueden direccionar 64k posiciones de memoria. Para poder multiplexar estas lneas utiliza una patilla que da un pulso ALE en el primer estado de cada ciclo mquina, dejando en alta impedancia el bus de datos en el siguiente estado hasta la activacin de las lneas de control R/W, esto ocurre cuando vamos a utilizar tanto direcciones como datos. Cuando se direcciona a dispositivos de entrada/salida(puertos), la informacin de direccionamiento aparece duplicada, es decir, las lneas AD(0-7) y AD(8-15) llevarn los mismos datos, y esto se debe a que con 256 bits para esta CPU era suficiente en lo que se refiere a direccionamiento de puertos. El bus de datos y direcciones est multiplexado El bus de datos y direcciones est multiplexado en el tiempo, esto significa que comparten algunas patillas (o pines). Como el bus de direcciones utiliza 16 patillas y el de datos slo 8, 8 de las patillas del bus de direcciones se utilizan tambin para el de datos. Con esto se consigue reducir el nmero de patillas de 24 a 16.

Registros Programables Posee 7 registros programables de 8 bits (A,B,C,D,E,H,L) algunos de los cuales pueden utilizarse por parejas (BC, DE, HL). El registro A se denomina acumulador y tiene gran importancia

ORIENTACIN METODOLGICA PARA EL PARENDIZAJE Lea detenidamente el captulo 4 del texto bsico, as como los documentos Memoria de programa.pdf, Memoria de datos.pdf, Memoria

EEPROM.pdf del material de apoyo Esboce diagramas que ilustren la distribucin de la memoria fsica del microcontrolador. Ponga especial atencin a las direcciones que se dan, y al segmento de memoria que ocupa esas direcciones. Enumere los registros de operaciones especiales y los de propsito general.Para qu sirven cada uno de ellos

UNIDAD 4 EL PROCESADOR 8086 Objetivo.- Conocer el fundamento de los procesadores actuales Los Intel 8086 e Intel 8088 (i8086, llamado oficialmente iAPX 86, e i8088) son dos microprocesadores de 16 bits diseados por Intel en 1978, iniciadores de la arquitectura x86. La diferencia entre el i8086 y el i8088 es que este ltimo utiliza un bus externo de 8 bits, para poder emplear circuitos de soporte al microprocesador ms econmicos, en contraposicin al bus de 16 bits del i8086..

Esquema

Esquema de bloques del microprocesador Intel 8086 (el Intel 8088 es muy similar). 1. Registros generales y de ndice (AX,BX, CX, DX y SI, DI, BP, SP) 2. Registros de segmento (CS, DS, ES, SS) 3. Sumador de direcciones 4. Bus de direcciones (20 bits, es decir, 220 direcciones = 1 MB de direccionamiento) 5. Queue de instrucciones (cola de instrucciones) 6. Unidad de ejecucin (EU) 7. Lgica de control del bus?? 8. Bus de datos de la ALU (16 bits) 9. Unidad Aritmtico Lgica (ALU) 10. Bus de direcciones 11. Bus de datos

12. Bus de control

Registros
Registros de propsito general AH AL AX (Acumulador) BH BL BX (Base) CH CL CX (Contador) DH DL DX (Datos) Registros ndices SI Source Index (ndice origen) DI Destination Index (ndice Destino) BP Base Pointer (Puntero Base) SP Stack Pointer (Puntero de Pila) Registro de Bandera - - - - OD I TSZ - A - P - C Flags (Banderas) Registros de Segmentos CS Code Segment (Segmento de Cdigo) DS Data Segment (Segmento de Datos) ES ExtraSegment (Segmento Extra) SS Stack Segment (Segmento de Pila) Registro apuntador de instrucciones IP Instruction Pointer

Modelo de los registros

Los registros del i8086 e i8088 se basaron en el diseo del Intel 8080 y el Intel 8085, y de hecho son compatibles a nivel de ensamblador con el i8080. El conjunto de registros tambin es similar al del i8080, pero ampliados a 16 bits. Tanto el i8086 como el i8088 tienen cuatro registros generales de 16 bits, que tambin pueden ser accedidos como ocho registros de 8 bits, y tienen cuatro registros ndice de 16 bits (incluyendo el puntero de pila). Los registros de datos se usan a veces de forma implcita por las instrucciones, haciendo ms difcil la organizacin de los registros para emplearlos con valores temporales. Los registros del procesador, se dedican a almacenar posiciones de memoria ya que el acceso a los registros es mucho ms rpido que los accesos a memoria, y se emplean para controlar instrucciones en ejecucin, manejar direccionamiento de memoria y proporcionar capacidad aritmtica. Los registros son direccionables por medio de un nombre.

Registros de Propsito General Los registros de propsito general AX, BX, CX y DX son los caballos de batalla del sistema. Son nicos en el sentido de que se les puede direccionar como una palabra o como un byte. Dado que estos registros se pueden utilizar "como deseamos" (dentro de la tipologa de los datos), existe una definicin para cada uno de ellos segn la funcin que desarrollen y es recomendable utilizar-los adecuadamente segn esa definicin , ya que algunas instrucciones del procesador 8086 se utilizan solamente para un registro especfico, optimizando as el cdigo. Registro AX: El registro AX es el registro acumulador, es utilizado para operaciones que implican entrada/salida y la mayor parte de la aritmtica. Registro BX: El registro BX es el registro base, y es el nico registro de propsito general que puede ser un ndice para direccionamiento indexado. Tambin es comn emplear el BX para clculos. Registro CX: El registro CX es conocido como el registro contador. Puede contener un valor para controlar el nmero de veces que un ciclo se repite o un valor para corrimiento de bits. Registro DX: El registro DX es el registro de datos. Algunas operaciones de entrada/salida requieren su pulso, y las operaciones de multiplicacin y divisin con cifras grandes suponen al DX y AX trabajando juntos. Registros ndice Los registros SI y DI disponibles para direccionamiento indexado y para sumas y restas. Registro SI: El registro ndice fuente de 16 bits es requerido por algunas operaciones con cadenas de caracteres. El SI est asociado con el registro DS. Registro DI: El registro ndice destino tambin es requerido por algunas operaciones con cadenas de caracteres. El DI est asociado con el registro ES.

Registros Apuntadores Los registros SP (apuntador de pila) y BP (apuntador base) estn asociados con el registro SS y permiten al sistema acceder a datos en el segmento de la pila. Registro SP: El apuntador de pila de 16 bits est asociado con el registro SS y proporciona un valor de desplazamiento que se refiere a la palabra actual que est siendo procesada en la pila. El sistema maneja de manera automtica este registro. Registro BP: El apuntador base de 16 bits facilita la referencia de parmetros, los cuales son datos y direcciones transmitidos va la pila. Registros de Banderas Es un registro de 16 bits, de los cuales nueve sirven para indicar el estado actual de la mquina y el resultado del procesamiento. Muchas instrucciones aritmticas y de comparacin cambian el estado de las banderas y apoyndose de ellas determinan la accin subsecuente. Veamos como se reparten y que bits son los que sirven para indicar el estado actual de la mquina tal y como hemos comentado anteriormente: Debemos tener en cuenta que esta tabla contiene 16 posiciones (de 0 a 15), que son los 16 bits del registro de banderas y que por convenio los bits de un registro se ordenan de derecha a izquierda, es decir, la posicin 0 la encontraremos a la derecha y la posicin 15 a la izquierda. - - - - OF DF IF TF SF ZF - AF - PF - CF Los bits de las banderas son las siguientes: OF (overflow, desbordamiento): Indica desbordamiento del bit de mayor orden despus de una operacin aritmtica de nmeros signados (1=existe overflow; 0=no existe overflow). Para operaciones sin signo, no se toma en cuenta esta bandera. DF (direccin): Controla la seleccin de incremento o decremento de los registros SI o DI en las operaciones con cadenas de caracteres (1=decremento automtico; 0=incremento). La bandera DF se controla con las instrucciones STD y CLD.

IF (interrupcin): Indica que una interrupcin externa sea procesada o ignorada (1=habilita la interrupcin; 0=deshabilita la interrupcin). El estado de la bandera IF se controla con las instrucciones STI y CLI. TF (trampa): Permite la operacin del procesador en modo de depuracin (paso a paso) SF (signo): Contiene el signo resultante de una operacin aritmtica (0=positivo; 1=negativo). ZF (cero): Indica el resultado de una operacin aritmtica o de comparacin (0=resultado diferente de cero; 1=resultado igual a cero). AF (acarreo auxiliar): Contiene un acarreo externo del bit 3 en un dato de 8 bits, para aritmtica especializada. Esta bandera se prueba con las instrucciones DAA y DAS para ajustar el valor de AL despus de una suma o resta BCD. PF (paridad): Indica paridad par o impar en una operacin de datos de ocho bits (0=paridad impar; 1=paridad par). CF (acarreo): Contiene el acarreo de los bits de mayor orden despus de una operacin aritmtica; tambin almacena el contenido del ltimo bit en una operacin de corrimiento o de rotacin. Registros de Segmento Definen reas de 64 Kb dentro del espacio de direcciones de 1 Mb del 8086. Estas reas pueden solaparse total o parcialmente. No es posible acceder a una posicin de memoria no definida por algn segmento: si es preciso, habr de moverse alguno. Registro CS: El DOS almacena la direccin inicial del segmento de cdigo de un programa en el registro CS. Esta direccin de segmento, ms un valor de desplazamiento en el registro apuntador de instruccin (IP), indica la direccin de una instruccin que es buscada para su ejecucin. Para propsitos de programacin normal, no se necesita referenciar el registro CS. Registro DS: La direccin inicial de un segmento de datos de programa es almacenada en el registro DS. Esta direccin, ms un valor de desplazamiento en

una instruccin, genera una referencia a la localidad de un byte especfico en el segmento de datos. Registro SS: El registro SS permite la colocacin en memoria de una pila, para almacenamiento temporal de direcciones y datos. El DOS almacena la direccin de inicio del segmento de pila de un programa en el registro SS. Esta direccin de segmento, ms un valor de desplazamiento en el registro del apuntador de la pila (SP), indica la palabra actual en la pila que est siendo direccionada. Para propsitos de programacin normal, no se necesita referenciar el registro SS. Registro ES: Algunas operaciones con cadenas de caracteres utilizan el registro extra de segmento para manejar el direccionamiento de memoria. El registro ES est asociado con el registro DI (ndice). Un programa que requiere el uso del registro ES puede inicializarlo con una direccin de segmento apropiada. Registro Apuntador de Instrucciones El registro IP de 16 bits contiene el desplazamiento de direccin de la siguiente instruccin que se ejecuta. El IP est asociado con el registro CS en el sentido de que el IP indica la instruccin actual dentro del segmento de cdigo que se est ejecutando actualmente en la memoria. Acceso a memoria Ambos microprocesadores tienen un rango de entrada/salida de 64 Kbytes e interrupciones vectorizadas fijas. La mayora de las instrucciones solo pueden acceder a una posicin de memoria, por lo que un operando debe ser forzosamente un registro. El resultado se almacena en uno de los operandos. Los i8086 e i8088 presentan cuatro registros de segmento (CS, DS, ES y SS), que se pueden establecer a partir de los registros ndice. Debido a que estos procesadores pueden direccionar hasta 1 MB de memoria, para lo que son necesarios 20 bits, ya que sus registros son de 16 bits, es necesario emplear registros de segmento para acceder a toda la memoria. En lugar de suministrar los bits faltantes, como la mayora de los procesadores segmentados, el i8086 y el i8088 desplazan un registro de segmento 4 bits hacia la izquierda y lo suman a la direccin de memoria, siendo el resultado la direccin efectiva. Esto suele ser

considerado como un mal diseo, aunque puede ser aceptable, e incluso til en el lenguaje ensamblador. Por el contrario, provoca confusin cuando se hace un uso extensivo de los punteros (como en el lenguaje C), debido a que es posible que dos punteros con diferentes valores apunten a la misma direccin de memoria. Peor an, este esquema de registros solapados hace difcil expandir el mapa de memoria a ms de 1 MB, y de hecho, esto se cambi en el Intel 80286. Patillaje Pines del 8086 y del 8088. La lneas del bus de direcciones se ven en rojo, las del bus de datos en azul y las del bus de control en verde. Las lneas del bus de energa se ven en negro. Estos procesadores multiplexan en tiempo el bus de direcciones, con el bus de datos y control. En el 8086 se ven los pines del 2 al 16 y los pines 35 al 39 con doble funcionalidad, en un momento determinado transportan la direccin y en otro momento entran o salen los datos (o sale informacin de algunas lneas del bus de control). En el 8088 se comparten los pines 9 al 16 entre el bus de direcciones y de datos, y los pines 35 al 38 entre el bus de direcciones y el de control.

Pines del 8086 Mejorado


<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 GND <-> D14 <-> D13 <-> D12 <-> D11 <-> D10 <-> D9 <-> D8 <-> D7 <-> D6 <-> D5 <-> D4 <-> D3 <-> D2 <-> D1 <-> D0 --> NMI -->INTR --> CLK GND +--\/--+ 1| |40 2| |39 3| |38 4| |37 5| |36 6| |35 7| |34 8| |33 9| Intel|32 10| 8086 |31 11| |30 12| |29 13| |28 14| |27 15| |26 16| |25 17| |24 18| |23 19| |22 20| |21 +------+ Vcc (+5V) A15 --> D15 <-> A16 --> S3 --> A17 --> S4 --> A18 --> S5 --> A19 --> S6 --> !BHE/S7 --> MN/!MX <-!RD --> HOLD, !RQ/!GTO HLDA, !RQ/!GT1 !WR, !LOOK M/!IO, !S2 DT/!R, !S1 !DEN, !S0 ALE, QS0 !INTA, QS1 !TEST <-READY <-RESET <--

<-> <-> --> --> --> --> --> -->

Pines del 8088 Adems del bus externo de datos, que se reduce a 8 bits, la diferencia con el 8086 es mnima)
GND <-- A14 <-- A13 <-- A12 <-- A11 <-- A10 <-- A9 <-- A8 <-- A7 <-- A6 <-- A5 <-- A4 <-- A3 <-- A2 <-- A1 <-- A0 --> NMI -->INTR --> CLK GND +--\_/--+ 1| |40 2| |39 3| |38 4| |37 5| |36 6| |35 7| |34 8| |33 9| Intel |32 10| 8088 |31 11| |30 12| |29 13| |28 14| |27 15| |26 16| |25 17| |24 18| |23 19| |22 20| |21 +-------+ Vcc (+5V) A15 --> A16 --> S3 --> A17 --> S4 --> A18 --> S5 --> A19 --> S6 --> !SSO....HIGH, MN/!MX !RD HOLD....!RQ/!GTO HLDA....!RQ/!GT1 !WR.....!LOOK M/!IO...!S2 DT/!R...!S1 !DEN....!S0 ALE.....QS0 !INTA...QS1 !TEST READY RESET

<-> <-> <-> <-> <-> <-> <-> <->

D7 D6 D5 D4 D3 D2 D1 D0

--> <---> <-> <-> --> --> --> --> --> --> <-<-<--

Velocidad La frecuencia del reloj del i8086 e i8088 se sita entre 4,77 MHz y 10 MHz. A continuacin se muestra el nmero de ciclos, aproximados, necesarios para hacer algunas operaciones:

Suma: 3 - 4 (registro), 9+EA - 25+EA (acceso a memoria) Multiplicacin: 70 - 118 (registro), 76+EA - 143+EA (acceso a memoria) Movimiento de datos: 2 (registro), 8+EA - 14+EA (acceso a memoria) Salto cercano: 11 - 15, 18+EA (acceso a memoria) Salto lejano: 15, 24+EA (acceso a memoria)

EA: tiempo necesario para calcular la direccin de memoria efectiva, que va de 5 a 12 ciclos. Coprocesador numrico Ambos microprocesadores no tienen ninguna instruccin de coma flotante, pero se les puede aadir un coprocesador matemtico para aadirles dichas instrucciones.

El Intel 8087 era el coprocesador matemtico ms comn, pero otros fabricantes como Weitek ofrecan otras alternativas con mayor rendimiento. . ORIENTACION METODOLGICA PARA EL APRENDIZAJE Leer el captulo 6 del texto bsico Con sus propias palabras describa las normas de estilo que deben seguirse para escribir programas. Por qu deben seguirse estas normas?. Correr un programa escrito sin seguir las normas de estilo? Escriba las instrucciones para seleccionar las lneas de puerto con que se quiere trabajar

UNIDAD 5 PERIFRICOS PROGRAMABLES Objetivo.- Comprender las tcnicas de comunicacin que se implementan en el PC. 5.1 Interfaz paralela En un perifrico programable de E/S y de aplicacin general, compatible con los microprocesadores 8080 y 8085. Dispone de un total de 24 lneas de E7S. Los canales se queden agrupar en puertas, segn tres modos diferentes de programacin. Sus caractersticas bsicas son:

24 lneas de E/S programables. Compatible con niveles TTL. Control Set/Reset sobre cualquier lnea. Alimentacin simple de 5V. Encapsulado DIL 40. Potencia de disipacin 1W.

CONSTITUCION INTERNA En un buffer bidireccional con control de alta impedancia utilizado para interconectar al perifrico con el bus de datos del sistema procesador. Los datos se trasmiten o reciben del perifrico mediante instrucciones de OUT o de IN del microprocesador, respectivamente. A travs de este buffer tambin se transfieren las palabras de programacin y de status BLOQUE DE CONTROL Y LECTURA-ESCRITURA. La funcin de este bloque es controlar las transferencias internas de los datos. Recoge la informacin de direccin y las seales de control provenientes del microprocesador, empleando las siguientes lneas:

CS (chip selec): un nivel bajo en esta entrada habilita la intercomunicacin entre el microprocesador y el perifrico.

RD (read): un nivel 0 habilita al 8255 para enviar el dato al microprocesador a travs del bus de datos.

WR (write): un nivel bajo habilita el microprocesador para escribir datos o palabras de control en el 8255.

A0 y A1: Estas seales de entrada, junto con las de lectura o escritura RD o WR controlan la seleccin de una de las tres puertas o del registro de programacin.

Estas entradas van normalmente conectadas a los 2 bits menos significativos del bus de direcciones. -RESET: un nivel 1 en esta entrada borra el registro de control y todas las lneas quedan programadas en el modo de entrada. El efecto combinado de todas estas lneas se detalla en la tabla siguiente: BLOQUE DE CONTROL A Y B. El modo de funcionamiento de cada una de las puertas queda programado por software. La palabra de control que escribe el microprocesador sobre el perifrico contiene la informacin del modo, bit activado, etc. y todo ello sirve para inicializar a dicho perifrico.

Cada uno de los bloques de control acepta comandos de programacin para las puertas asociadas a el.

Control grupo A: puerta a y puerta C alta (C7 a C4). Control grupo B: puerta B y puerta c baja (C3 a C0).

En el registro de Control de palabra solamente se puede escribir y no se permiten operaciones de lectura. PUERTAS A, B Y C

Son tres puertas de 8 bits cada una. Todas ellas son programables de diferentes maneras mediante las adecuadas palabras de programacin. A continuacin se especifica el comportamiento de cada una de las puertas.

Puerta A : puede ser una puerta de 8 salidas con posibilidad de latch. Tambin se puede programar como puerta de entrada latcheada .

Puerta B : puede ser una puerta de 8 entrada o salida con posibilidad de latch o no , una puerta de 8 entradas sin lachear .

Puerta C : Puede ser una puerta de 8 lneas de salida lacheada o no , o una puerta de 8 lneas de entradas sin lachear , adems esta puerta se puede dividir en dos puertas de 4 bits , cada una de las cuales contiene un latch para cada lnea y puede utilizarse para seales de control o estado con las puertas A y B.

5.2 Interfaz Serial


La interfaz RS-232 est diseada para distancias cortas, de hasta 15 metros segn la norma, y para velocidades de comunicacin bajas, de no ms de 20 Kilobytes/segundo. A pesar de ello, muchas veces se utiliza a mayores velocidades con un resultado aceptable. La interfaz puede trabajar en comunicacin asncrona o sncrona y tipos de canal simplex, half duplex o full duplex. En un canal simplex los datos siempre viajarn en una direccin, por ejemplo desde DCE a DTE. En un canal half duplex, los datos pueden viajar en una u otra direccin, pero slo durante un determinado periodo de tiempo; luego la lnea debe ser conmutada antes que los datos puedan viajar en la otra direccin. En un canal full duplex, los datos pueden viajar en ambos sentidos simultneamente. Las lneas de handshaking de la RS-232 se usan para resolver los problemas asociados con este modo de operacin, tal como en qu direccin los datos deben viajar en un instante determinado. Si un dispositivo de los que estn conectados a una interfaz RS-232 procesa los datos a una velocidad menor de la que los recibe deben de conectarse las lneas handshaking que permiten realizar un control de flujo tal que al dispositivo ms lento le de tiempo de procesar la informacin. Las lneas de "hand shaking" que permiten hacer este control de flujo son las lneas RTS y CTS. Los diseadores del

estndar no concibieron estas lneas para que funcionen de este modo, pero dada su utilidad en cada interfaz posterior se incluye este modo de uso Los circuitos y sus definiciones Las UART o U(S)ART (Transmisor y Receptor Sncrono Asncrono Universal) se disearon para convertir las seales que maneja la CPU y transmitirlas al exterior. Las UART deben resolver problemas tales como la conversin de voltajes internos del DCE con respecto al DTE, gobernar las seales de control, y realizar la transformacin desde el bus de datos de seales en paralelo a serie y viceversa. Debe ser robusta y deber tolerar circuitos abiertos, cortocircuitos y escritura simultnea sobre un mismo pin, entre otras consideraciones. Es en la UART en donde se implementa la interfaz. Para los propsitos de la RS-232 estndar, una conexin es definida por un cable desde un dispositivo al otro. Hay 25 conexiones en la especificacin completa, pero es muy probable que se encuentren menos de la mitad de stas en una interfaz determinada. La causa es simple, una interfaz full duplex puede obtenerse con solamente 3 cables. Existe una cierta confusin asociada a los nombres de las seales utilizadas, principalmente porque hay tres convenios diferentes de denominacin (nombre comn, nombre asignado por la EIA, y nombre asignado por el CCITT). En la siguiente tabla se muestran los tres nombres junto al nmero de pin del conector al que est asignado (los nombres de seal estn desde el punto de vista del DTE (por ejemplo para Transmit Data los datos son enviados por el DTE, pero recibidos por el DCE). 5.3 Acceso Directo a Memoria El acceso directo a memoria (DMA, del ingls Direct Memory Access) permite a cierto tipo de componentes de ordenador acceder a la memoria del sistema para leer o escribir independientemente de la CPU principal. Muchos sistemas hardware utilizan DMA, incluyendo controladores de unidades de disco, tarjetas grficas y tarjetas de sonido. DMA es una caracterstica esencial en todos los ordenadores

modernos, ya que permite a dispositivos de diferentes velocidades comunicarse sin someter a la CPU a una carga masiva de interrupciones. Una transferencia DMA consiste principalmente en copiar un bloque de memoria de un dispositivo a otro. En lugar de que la CPU inicie la transferencia, la transferencia se lleva a cabo por el controlador DMA. Un ejemplo tpico es mover un bloque de memoria desde una memoria externa a una interna ms rpida. Tal operacin no ocupa el procesador y como resultado puede ser planificado para efectuar otras tareas. Las transferencias DMA son esenciales para aumentar el rendimiento de aplicaciones que requieran muchos recursos. Cabe destacar que aunque no se necesite a la CPU para la transaccin de datos, s que se necesita el bus del sistema (tanto bus de datos como bus de direcciones), por lo que existen diferentes estrategias para regular su uso, permitiendo as que no quede totalmente acaparado por el controlador DMA. Estrategias de transferencia por DMA A continuacin se exponen diferentes tcnicas para realizar la transferencia de datos. El uso de cada una de ellas depender de las caractersticas que se deseen primar en un sistema.

DMA por robo de ciclo: se basa en usar uno o ms ciclos de CPU por cada instruccin que se ejecuta (de ah el nombre). De esta forma se consigue una alta disponibilidad del bus del sistema para la CPU, aunque, en consecuencia, la transferencia de los datos ser considerablemente lenta. Este mtodo es el que se usa habitualmente ya que la interferencia con la CPU es muy baja.

DMA por rfagas: consiste en enviar el bloque de datos solicitado mediante una rfaga, ocupando el bus del sistema hasta finalizar la transmisin. As se consigue la mxima velocidad, sin embargo la CPU no podr usar el bus durante todo ese tiempo, por lo que permanecera inactiva.

DMA transparente: se trata de usar el bus del sistema cuando se tiene certeza de que la CPU no lo necesita, como por ejemplo en aquellas fases del proceso de ejecucin de las instrucciones donde nunca se usa ya que la CPU realiza tareas internas (v. g. fase de decodificacin de la instruccin).

De esta manera, como su nombre indica, la DMA permanecer transparente para la CPU y la transferencia se har sin obstaculizar la relacin CPU-bus del sistema. Como desventaja, la velocidad de transferencia es la ms baja posible.

DMA Scatter-gather: permite la transferencia de datos a varias reas de memoria en una transaccin DMA simple. Es equivalente al encadenamiento de mltiples peticiones DMA simples. De nuevo, el objetivo es liberar a la CPU de las tareas de copia de datos e interrupciones de entrada/salida mltiples.

5.4. - EL CONTROLADOR DE INTERRUPCIONES 8259.

5.4.1. - COMO Y POR QUE DE LAS INTERRUPCIONES. Los ordenadores se comunican con el exterior por medio de los dispositivos de entrada y salida. Estos dispositivos son normalmente lentos en comparacin con la elevada velocidad de la unidad central. Un ejemplo tpico puede ser el teclado: entre las pulsaciones de cada tecla hay un espacio de tiempo impredecible y dependiente del usuario. Una manera simple de gestionar los dispositivos de E/S consiste en comprobar continuamente si alguno de ellos tiene un dato disponible o lo est solicitando. Sin embargo, esto supone una importante prdida de tiempo para el microprocesador, que mientras tanto podra estar haciendo otras cosas. En una mquina multitarea y/o multiusuario, resulta ms interesante que los perifricos puedan interrumpir al microprocesador para solicitarle una operacin de entrada o salida en el momento necesario, estando la CPU liberada de la misin de comprobar cundo llega ese momento. Cuando se produce la interrupcin, el microprocesador ejecuta la correspondiente rutina de servicio y despus contina con su tarea normal. Los compatibles PC poseen un hardware orientado por completo a la multitarea (otra cosa es que el 8086 y el DOS no la aprovechen) y la entrada/salida se gestiona casi por completo mediante interrupciones en todas las mquinas. Por ejemplo, en las operaciones de disco, cuando acaba la transferencia de datos se produce una interrupcin de aviso y una

rutina de la BIOS activa una variable que lo indica, en el segmento de memoria 40h. Las propias funciones de la BIOS para acceder al disco se limitan a chequear continuamente esa variable hasta que cambie, lo que significa un evidente desaprovechamiento de las posibilidades que la gestin por interrupciones pone a nuestra disposicin.

Las interrupciones aaden cierta complejidad al diseo del hardware: en principio, es necesario jerarquizarlas de alguna manera para decidir cul se atiende en el caso de que se produzcan dos simultneamente. Tambin es importante el control de prioridad para el caso de que se produzca una interrupcin mientras se est procesando otra: slo se la atender si es de mayor prioridad. En este captulo slo consideraremos las interrupciones hardware, no las de software ni las excepciones del procesador.

5.4.2. - DESCRIPCIN DEL INTEGRADO 8259.

Este circuito integrado est especialmente diseado para controlar las interrupciones en sistemas basados en el 8080/8085 y en el 8086. Puede controlar hasta 8 interrupciones vectorizadas. Adems, a un 8259 se le pueden conectar en cascada un mximo de 8 chips 8259 adicionales, lo que permite gestionar sistemas con hasta 64 interrupciones, como veremos. El significado e interpretacin de las seales se muestra a la derecha:

-CS: -WR: -RD:

Habilita la comunicacin con la CPU. Permite al 8259 aceptar comandos de la CPU. Permite al 8259 dejar la informacin en el bus de datos. Bus de datos bidireccional, por el que se transmite la informacin de D7..D0: control/estado y el nmero de vector de interrupcin. Lneas de cascada, actan como salida en el 8259 maestro y como CAS0..CAS2: entrada en los 8259 esclavos, en un sistema con varios 8259 interconectados, constituyendo un bus local. Pin de doble funcin: en el buffered mode del 8259 actuar como -SP/-EN: EN, para habilitar los buffers del bus; en el modo normal indicar si el 8259 es maestro o esclavo (-SP). Conectado a la patilla INT de la CPU para producir la interrupcin INT: cuando llegue el momento. Lneas asncronas de peticin de interrupcin. Una peticin de interrupcin se ejecuta manteniendo IR en alto hasta que se recibe el IR0..IR7: reconocimiento (modo por flancos) o simplemente poniendo en alto la lnea IR (modo por niveles). Lnea de reconocimiento de interrupcin, por medio de esta lnea se -INTA: fuerza al 8259 a depositar en el bus la informacin del vector de interrupcin. INTA es independiente de -CS. En conjuncin con -CS, -WR y -RD es empleada para enviar las A0: palabras de comando al 8259 y para solicitar informacin al mismo. Suele ir conectada a la lnea A0 de la CPU. DESCRIPCIN FUNCIONAL El diagrama funcional del 8259, con la estructura interna de las diversas partes que lo componen, es el siguiente:

Los principales registros internos del 8259 son el IRR (Interrupt Request Register) y el ISR (In Service Register). El IRR almacena todas las peticiones de interrupcin pendientes; el ISR almacena todas las interrupciones que estn siendo atendidas en un momento dado. La lgica

de gestin de prioridad determina qu interrupcin, de las solicitadas en el IRR, debe ser atendida primero: cuando lleguen las seales INTA dicha interrupcin ser la primera procesada y su bit correspondiente se activar en el ISR. El buffer del bus de datos conecta el 8259 con el bus de datos de la placa principal del ordenador: su diseo en 3 estados permite desconectarlo cuando sea necesario; a travs de este bus circulan las palabras de control y la informacin de estado. La lgica de lectura y escritura acepta los comandos que enva la CPU: aqu hay registros para almacenar las palabras de inicializacin y operacin que enva el procesador; tambin sirve para transferir el estado del 8259 hacia el bus de datos. El buffer de cascada/comparador almacena y compara las identificaciones de todos los 8259 que posea el sistema: el 8259 maestro enva la identificacin del 8259 esclavo en las lneas CAS, los 8259 esclavos la leen y el implicado en la operacin coloca en el bus de datos la direccin (vector) de la rutina que atender la interrupcin en los 2 prximos (o el prximo) ciclos INTA.

FUNCIONAMIENTO DEL 8259 El funcionamiento del 8259 vara ligeramente en funcin del sistema en que est instalado, segn sea este un 8086 o un 8080/8085. Veremos primero el caso del 8086: Una o ms lneas IR son activadas por los perifricos, lo que pone a 1 el 1) correspondiente bit del IRR. El 8259 evala la prioridad de estas interrupciones y solicita la interrupcin a la 2) CPU (lnea INT) si es necesario.

3) Cuando la CPU reconoce la interrupcin, enva la seal -INTA. Nada ms recibida la seal -INTA de la CPU, el 8259 activa el bit correspondiente a la interrupcin de mayor prioridad (la que va a ser procesada) 4) en el ISR y lo borra en el IRR. En este ciclo, el 8259 an no controla el bus de datos. 5) Cuando la CPU enva un segundo ciclo -INTA, el 8259 deposita en el bus de

datos un valor de 8 bits que indica el nmero de vector de interrupcin del 8086, para que la CPU lo pueda leer. En el modo AEOI del 8259, el bit de la interrupcin en el ISR es borrado nada ms acabar el segundo pulso -INTA; en caso contrario, ese bit permanece activo 6) hasta que la CPU enve el comando EOI al final de la rutina que trata la interrupcin (caso ms normal). En el caso de sistemas basados en el 8080/8085, el funcionamiento es idntico hasta el punto (3), pero a continuacin sucede lo siguiente: Nada ms recibida la seal -INTA de la CPU, el 8259 activa el bit correspondiente a la interrupcin de mayor prioridad (la que va a ser procesada) 4) en el ISR y lo borra en el IRR. En este ciclo, el 8259 deposita en el bus de datos el valor 11001101b, correspondiente al cdigo de operacin de la instruccin CALL del 8080/85. 5) Esta instruccin CALL provoca que la CPU enve dos pulsos -INTA. El 8259 utiliza estos dos pulsos -INTA para depositar en el bus de datos, 6) sucesivamente, la parte baja y alta de la direccin de memoria del ordenador de la rutina de servicio de la interrupcin (16 bits). Esto completa la instruccin CALL de 3 bytes. En el modo AEOI del 8259, el bit 7) de la interrupcin en el ISR es borrado nada ms acabar el tercer pulso -INTA; en caso contrario, ese bit permanece activo hasta que la CPU enve el comando EOI al final de la rutina que trata la interrupcin. Si en el paso (4), con ambos tipos de microprocesador, no est presente la peticin de interrupcin (por ejemplo, porque ha sido excesivamente corta) el 8259 enva una interrupcin de nivel 7 (si hubiera un 8259 conectado en IR7, las lneas CAS permaneceran inactivas y la direccin de la rutina de servicio de interrupcin sera suministrada por el 8259 maestro).

PROGRAMACIN DEL 8259

El 8259 acepta dos tipos de comandos generados por la CPU: los ICW (Inicialization Command Word) que inicializan el 8259, y los OCW (Operation

Command Word) que permiten programar la modalidad de funcionamiento. Antes de que los 8259 de un sistema comiencen a trabajar deben recibir una secuencia de ICW que los inicialice. Los ICW y OCW constan de secuencias de 2 a 4 comandos consecutivos que el 8259 espera recibir secuencialmente, unos tras otros, a travs del bus de datos, segn sea necesario (el propio 8259 se encarga de contarlos midiendo los pulsos de la lnea -WR). Los OCW pueden ser enviados en cualquier momento, una vez realizada la inicializacin.

La comunicacin con el 8259 emplea las lneas -WR y -RW, as como A0. El hecho de que exista una sola lnea de direcciones implica que el 8259 slo ocupa dos direcciones de puerto de E/S en el espacio de entrada y salida del ordenador. ICWS (Inicialization Command Words).

ICW1:

Cuando un comando es enviado con A0=0 y D4=1, el 8259 lo interpreta

como la primera palabra de la inicializacin (ICW1) e inicia dicha secuencia de inicializacin, lo que implica lo siguiente:

- Se resetea el circuito sensible a los niveles, lo que quiere decir que hasta nueva orden las lneas IR sern sensibles por flancos de transicin bajo-alto. - Se limpia el IMR. - A la lnea IR7 se le asigna un nivel de prioridad 7. - Se desactiva el Special Mask Mode. Se queda listo para devolver IRR en la prxima lectura OCW3. - Si IC4 (bit D0) es 0, todas las funciones seleccionadas en ICW4 sern puestas a 0 (non buffered mode, no AEOI, sistema 8080/85) e ICW4 no ser necesaria.

ICW2: Se enva con A0=1, para diferenciarlo de ICW0 (hacer OUT a la siguiente direccin de puerto).

ICW3: Se enva slo en el caso de que haya ms de un 8259 en el sistema (bit SNGL de ICW1 a cero), en caso contrario en su lugar se enviara ICW4 (si procede). Formato de ICW3 a enviar a un 8259 maestro:

Formato de ICW3 a enviar a un 8259 esclavo para que memorice de qu lnea IR del maestro cuelga:

ICW4: Se enva slo si IC4=1 en ICW1, con objeto de colocar el 8259 en un modo de operacin distinto del establecido por defecto (que equivale a poner a cero todos los bits de ICW4).

OCWS (Operation Command Words).

Una vez inicializado, el 8259 est listo para procesar las interrupciones que se produzcan. Sin embargo, durante su funcionamiento normal est capacitado para recibir comandos de control por parte de la CPU. OCW1:

Este comando activa y borra bits en el IMR (Interrupt Mask Register). Los bits M0..M7 de OCW1 se corresponden con sus correspondientes bits del IMR. Un bit a 1 significa interrupcin enmascarada (inhibida) y a 0, interrupcin habilitada. OCW2:

OCW3:

TRABAJANDO CON EL 8259

En las ICW y, sobre todo, en las OCW, se han introducido un aluvin de elementos nuevos que sern explicados a continuacin.

Fully Nested Mode. Por defecto, el 8259 opera en esta modalidad (modo de anidamiento completo), a menos que se le programe de otra manera. En este modo las interrupciones quedan ordenadas, por prioridades, de 0 (mxima) a 7 (mnima). Cuando se produce un reconocimiento de interrupcin por parte de la CPU, el 8259 evala cul es la interrupcin pendiente de mayor prioridad, coloca su nmero de vector en el bus y activa su bit correspondiente en el ISR. Este bit permanece activo hasta que el 8259 recibe el comando EOI (situacin ms normal); sin embargo, en el modo AEOI, ese bit se bajara inmediatamente despus del ltimo -INTA. Mientras el bit del ISR est activo, todas las interrupciones de igual o menor prioridad que lleguen permanecen inhibidas; sin embargo, las de mayor prioridad podrn interrumpir. En el caso del 8086, cuando comienza el tratamiento de la interrupcin, un bit del registro de estado de la CPU mantiene inhibidas todas las interrupciones: lo normal es que el programa de control comience con STI para permitir que el 8086 enve nuevas seales INTA al 8259, as el 8259 podr enviar las interrupciones de mayor prioridad que le lleguen. Tras la secuencia de inicializacin, las interrupciones quedan ordenadas de mayor (IR0) a menor prioridad (IR7), aunque este orden puede modificarse en la modalidad de prioridad rotatoria o con el comando de asignacin de prioridad. Ntese que cuando se utiliza el modo AEOI o el Special Mask Mode no se respeta el modo Fully Nested Mode (debido a que una interrupcin de menor prioridad podra interrumpir a una rutina que gestiona otra de mayor prioridad). Special Fully Nested Mode. Se emplea en sistemas que tienen varios 8259 conectados. Slo el 8259 maestro es programado en este modo, lo que implica las siguientes diferencias respecto al Fully Nested Mode normal: - Cuando se atiende una interrupcin de un 8259 esclavo, si viene otra de mayor prioridad de ese mismo 8259 esclavo, se provoca una interrupcin al maestro (normalmente, el 8259 esclavo estara enmascarado mientras se procesa una de sus interrupciones).

- Cuando acaba la rutina de servicio de interrupcin, hay que enviar un EOI no-especfico al 8259 esclavo; adems hay que leer a continuacin su ISR y comprobar si es cero: en ese caso, hay que enviar adems otro EOI al 8259 maestro (si no es cero significa que an hay interrupciones en proceso en el 8259 esclavo).

Modos de EOI. El EOI (End Of Interrupt) sirve para bajar el bit del ISR que representa la interrupcin que est siendo procesada. El EOI puede producirse automticamente (AEOI) al final de la ltima seal INTA que enva la CPU al 8259 para una interrupcin dada (tercer ciclo INTA en el 8080/85 y segundo en el 8086); sin embargo, la mayora de los sistemas requieren una gestin de prioridades en las interrupciones, lo que significa que es ms conveniente que EOI lo enve el propio procesador al 8259, a travs de OCW2, cuando acabe la rutina de gestin de interrupcin, para evitar que mientras se gestiona esa interrupcin se produzcan otras de igual o menor prioridad. En un sistema con varios 8259, el EOI debe ser enviado no slo al 8259 esclavo implicado sino tambin al maestro. Hay dos modalidades de EOI: la especfica y la no-especfica. En el EOI no especfico, el 8259 limpia el bit ms significativo que est activo en el ISR, que se supone que es el correspondiente a la ltima interrupcin producida (la de mayor prioridad y que est siendo procesada). Esto es suficiente para un sistema donde se respeta el Fully Nested Mode. En el caso en que no fuera as, el 8259 es incapaz de determinar cul fue el ltimo nivel de interrupcin procesado, por lo que la rutina que gestiona la interrupcin debe enviar un EOI especfico al 8259 indicndole qu bit hay que borrar en el ISR.

Rotacin de prioridades. Hay sistemas en que varios perifricos tienen el mismo nivel de prioridad, en los que no interesa mantener un orden de prioridades en las lneas IR. En condiciones normales, nada ms atender una interrupcin de un perifrico, podra venir otra que tambin se atendera, mientras los dems perifricos se cruzaran de brazos. La solucin consiste en asignar el menor nivel de prioridad a la interrupcin recin atendida para permitir que las dems

pendientes se procesen tambin. Para ello se enva un EOI que rote las prioridades: si, por ejemplo, se haba procesado una IR3, IR3 pasar al menor nivel de prioridad e IR4 al mayor, quedando las prioridades ordenadas (de mayor a menor): IR4, IR5, IR6, IR7, IR0, IR1, IR2, IR3. Existe tambin una rotacin especfica de prioridades, a travs de OCW2, que puede realizarse en un comando EOI o independientemente del mismo (comando para asignar prioridad). Special Mask Mode. Hay ocasiones en las que mientras se ejecuta una rutina de servicio de interrupcin es necesario permitir que se produzcan ciertas interrupciones de menor prioridad en algunos momentos, o prohibirlo en otros, sin ser quiz interesante enviar el EOI antes de tiempo. Esto implica alterar la estructura normal de prioridades. La manera de realizar esto es activando el Special Mask Mode a travs de OCW3 durante la rutina de servicio de interrupcin (es ms que conveniente inhibirlo de nuevo al final). Una vez activado este modo, el IMR indica qu interrupciones estn permitidas (bit a 0) y cules inhibidas (bit a 1). Por ello, suele ser conveniente activar el bit del IMR correspondiente a la IR en servicio (para evitar que se produzca de nuevo cuando an no ha sido procesada). Al final hay que enviar un EOI especfico, ya que este modo de trabajo altera el Fully Nested Mode habitual.

Comando POLL. En esta modalidad poco habitual, habilitada a travs de OCW3, no se emplea la salida INT del 8259 o bien el microprocesador trabaja con las interrupciones inhibidas. El servicio a los perifricos es realizado por software utilizando el comando POLL. Una vez enviado el comando POLL, el 8259 interpreta la prxima lectura que se realice como un reconocimiento de interrupcin, actualizando el ISR y consultando el nivel de prioridad. Durante esa lectura, la CPU obtiene en el bus de datos la palabra POLL que indica (en el bit 7) si hay alguna interrupcin pendiente y, en ese caso, cul es la de mayor prioridad (bits 0-2).

Lectura de informacin del 8259. El IMR puede ser ledo a travs de OCW0; para leer el contenido del IRR y el ISR hay que emplear OCW3. Para estos dos ltimos registros hay que enviar una OCW3 que elija el IRR o el ISR; a continuacin se puede leer el bus de datos (A0=0) sin necesidad de enviar ms OCW3 (el 8259 es capaz de recordar si tiene que leer el IRR o el ISR). Esto ltimo no es as, evidentemente, en el caso de utilizar el comando POLL (tras enviarlo, la prxima lectura se interpreta como un INTA). Tras inicializarse, el 8259 queda preparado por defecto para devolver IRR a la primera lectura.

Buffered Mode. Al emplear el 8259 en grandes sistemas, donde se requieren buffers en los buses de datos, si se va a emplear el modo cascada existe el problema de la habilitacin de los buffers. Cuando se programa el modo buffer, la patilla SP/-EN del 8259 acta automticamente como seal de habilitacin del los buffers cada vez que se deposita algo en el bus de datos. Si se programa de esta manera el 8259 (bit BUF de ICW4) ser preciso distinguir por software si se trata de un 8259 maestro o esclavo (bit M/S de ICW4).

5.4.3. - EL 8259 DENTRO DEL ORDENADOR.

Los PC/XT vienen equipados con un 8259 conectado a la direccin base E/S 20h; este controlador de interrupciones es accedido, por tanto, por los puertos 20h (A0=0) y 21h (A0=1). En los AT y mquinas superiores, adicionalmente, existe un segundo 8259 conectado en cascada a la lnea IR2 del primero. Este segundo controlador es accedido a travs de los puertos 0A0h y 0A1h. La BIOS del ordenador, al arrancar la mquina, coloca la base de interrupciones del primer controlador en 8, lo que significa que las respectivas IR0..IR7 estn ligadas a los vectores de interrupcin 8..15; el segundo 8259 de los AT genera las interrupciones comprendidas entre 70h y 77h. La asignacin de lneas IR para los diversos perifricos del ordenador es la siguiente (por orden de prioridad):
IRQ 0 IRQ 1 Temporizador Teclado (INT 08h) (INT 09h)

-+ | | |

IRQ 2 IRQ IRQ

8 9

En los PC/XT: canal E/S Reloj de tiempo real Simulacin de IRQ2 Reservado Reservado Reservado Coprocesador aritmtico Controlador de disco duro Reservado COM2 COM1 Disco duro PC/XT (LPT2 en el AT) Controlador de disquetes LPT1

(INT 0Ah) (INT 70h) (INT 71h) (INT 72h) (INT 73h) (INT 74h) (INT 75h) (INT 76h) (INT 77h) (INT (INT (INT (INT (INT 0Bh) 0Ch) 0Dh) 0Eh) 0Fh)

IRQ 10 IRQ 11 IRQ 12 |> Slo AT y PS/2 IRQ 13 | IRQ 14 | IRQ 15 -+ IRQ 3 IRQ 4 IRQ 5 IRQ 6 IRQ 7

En los AT, la lnea IR2 del 8259 maestro es empleada para colgar de ella el segundo 8259 esclavo. Como la lnea IR2 est en el slot de expansin de 8 bits, por razones de compatibilidad los AT tienen conectado en su lugar la IR9 que simula la IR2 original. Cuando se produce una IR9 debido a un perifrico de XT que pretenda generar una IR2, el AT ejecuta una rutina de servicio en INT 71h que salta simplemente a la INT 0Ah (tras enviar un EOI al 8259 esclavo).

La colocacin de IRQ0-IRQ7 en el rango INT 8-INT 15 fue bastante torpe por parte de IBM, al saltarse la especificacin de Intel que reserva las primeras 32 interrupciones para el procesador. En modo protegido, algunas de esas excepciones es estrictamente necesario controlarlas. Por ello, los sistemas operativos que trabajan en modo extendido y ciertos extensores del DOS (como las versiones 3.x de WINDOWS) se ven obligados a mover de sitio estas interrupciones. En concreto, WINDOWS 3.x las coloca en INT 50h-INT 57h (por software, las mquinas virtuales 8086 emulan las correspondientes INT 8-INT 15). Adems, en el modo protegido del 286/386 (o el virtual-86 del 386) la tradicional tabla de vectores de interrupcin es sustituida por otra de descriptores, aunque el funcionamiento global es similar.

La interrupcin no enmascarable del 80x86 no est controlada por el 8259: es generada por la circuitera que controla la memoria si se detecta un error de paridad. La interrupcin no enmascarable puede ser enmascarada en los ordenadores compatibles gracias a la circuitera de apoyo al procesador, aunque no es frecuente; en los AT el bit 7 del puerto 70h controla su habilitacin (si es cero, la NMI est habilitada) sin embargo tambin se podra inhibir el control de paridad directamente (activando los bits 2 y 3 de la direccin E/S 61h, respetando el resto de los bits de ese puerto por medio de una lectura previa). En los PC/XT, es el puerto 0A0h el que controla la habilitacin de la NMI, tambin con el bit 7 (con la diferencia de que debe estar a cero para inhibirla).

Durante la inicializacin del ordenador, la BIOS enva sucesivamente al 8259 las palabras ICW1 a ICW4 de la siguiente manera (listado extrado directamente de la BIOS):
(XT/AT) MOV AL,10001b cascada, ICW4 necesaria OUT 20h,AL JMP SHORT $+2 MOV AL,8 OUT 21h,AL JMP SHORT $+2 MOV AL,4 poner 0 en PC/XT! OUT 21h,AL JMP SHORT $+2 MOV AL,1 mode OUT 21h,AL inicializacin del 8259-1 JMP SHORT $+2 MOV AL,255 OUT 21h,AL JMP SHORT $+2 (slo AT) MOV AL,10001b cascada, ICW4 necesaria OUT 0A0h,AL JMP SHORT $+2 MOV AL,70h ; Inicializacin del 8259 maestro ; funcionamiento por flancos, ; ; ; ; enviar ICW1 estado de espera para E/S base de interrupciones en INT 8 enviar ICW2

; hay un esclavo en IR2 (S2=1) ; enviar ICW3 ; modo 8086, EOI normal, not buffered ; enviar ICW4: completada la

; enmascarar todas las interrupciones ; Inicializacin del 8259 esclavo ; funcionamiento por flancos, ; enviar ICW1 ; base de interrupciones en INT 70h

mode

OUT JMP MOV OUT JMP MOV OUT inicializacin JMP MOV OUT

0A1h,AL SHORT $+2 AL,2 0A1h,AL SHORT $+2 AL,1 0A1h,AL del 8259-2 SHORT $+2 AL,255 0A1h,AL

; enviar ICW2 ; es el esclavo conectado a IR2 ; enviar ICW3 ; modo 8086, EOI normal, not buffered ; enviar ICW4: completada la

; enmascarar todas las interrupciones

Como se puede observar, la rutina de arriba enmascara todas las interrupciones a travs del IMR. El objetivo de esta medida es evitar que se produzcan interrupciones antes de desviar los correspondientes vectores, pudiendo incluso mientras tanto estar habilitadas las interrupciones con STI.

Cuando se produce una interrupcin de la CPU (bien por software o por hardware), el indicador de interrupciones del registro de estado del 8086 se activa para inhibir otra posible interrupcin mientras se procesa esa (la instruccin IRET recuperar los flags del programa principal devolviendo las interrupciones a su estado previo). Lo normal suele ser que las rutinas que gestionan una interrupcin comiencen por un STI con objeto de permitir la generacin de otras interrupciones; las interrupciones slo deben estar inhibidas en brevsimos momentos crticos. Sin embargo, cuando se procesa una interrupcin hardware, el registro de interrupciones activas (ISR) indica qu interrupcin en concreto est siendo procesada; si en ese momento llega otra interrupcin hardware de menor o igual prioridad le ser denegada la peticin, si es de mayor prioridad le ser concedida (si la rutina comenzaba por STI). Cuando acaba de procesarse la interrupcin hardware, la instruccin IRET no le dice nada al 8259, por lo que el programador debe preocuparse de borrar el ISR antes de acabar. Si, por ejemplo, se gestiona la interrupcin del temporizador sin limpiar al final el ISR, a partir de ese momento quedarn bloqueados el teclado, los discos ... Conviene aqu sealar que una rutina puede apoyarse en una interrupcin hardware sin necesidad de reprogramarla por completo. Ejemplo:
STI PUSH AX

IN CALL ; ; ; POP IRET

AL,puerto_teclado anterior_int9 procesar tecla AX

Al producirse la INT 9 se lee el cdigo de rastreo de la tecla y luego se llama a la rutina que gestionaba con anterioridad a sta la INT 9: ella se encargar de limpiar el ISR que, por tanto, no es tarea de nuestra rutina. Si hubiera que limpiar el ISR, bastara con un EOI no especfico (OCW2: enviar un valor 20h al puerto 20h para el 8259-1 y al puerto 0A0h para el 8259-2; en las IRQ8-IRQ15 hay que enviar el EOI a ambos controladores de interrupcin). 5.4.4. - EJEMPLO: CAMBIO DE LA BASE DE LAS INTERRUPCIONES. La siguiente utilidad reprograma el 8259 maestro para desviar las INT 8-INT 15 a los nuevos vectores INT 50h-INT 57h (que invocan a los originales, para que el sistema siga funcionando con normalidad). Esta nueva ubicacin no ha sido elegida por capricho, y es la misma que emplea WINDOWS 3.x. La razn es que el 386 trabaja normalmente en modo virtual-86 bajo MSDOS 5.0; cuando se produce una interrupcin se ejecuta una rutina en modo protegido. El EMM386 del MS-DOS 5.0 no est preparado para soportar las IRQ0-IRQ7 en otra localizacin que no sea la tradicional INT 8-INT 15 en su defecto INT 50h-INT 57h (por compatibilidad con WINDOWS). Con el QEMM386 o, simplemente, sin controlador de memoria expandida instalado, no habra problemas y se podra elegir otro lugar distinto. Por cierto: si se entra y se sale de WINDOWS, la nueva localizacin establecida, ya sea en 50h o en otro sitio, deja de estar vigente: esto significa que WINDOWS reprograma la interrupcin base al volver al DOS. Personalmente he comprobado que aunque IRQDEMO fuera ms elegante (empleando funciones de la especificacin VCPI), nuestro querido WINDOWS no lo sera: para qu molestarse!. Sin embargo, IRQDEMO s se toma la molestia de comprobar si la mquina es un XT o un AT para enviar correctamente la ICW3 del 8259.
; ********************************************************************

; * IRQDEMO.ASM - Utilidad residente de demostracin, que desva * ; * las interrupciones hardware INT 8-INT 15 hacia * ; * los vectores INT 50h a INT 57h. * ; ******************************************************************** irqdemo SEGMENT ASSUME CS:irqdemo, DS:irqdemo ORG inicio: JMP main 100h

; ------------ Area residente irq0: irq1: irq2: irq3: irq4: irq5: irq6: irq7: INT IRET INT IRET INT IRET INT IRET INT IRET INT IRET INT IRET INT IRET EQU 8 9 10 11 12 13 14 15 ; simular IRQ's normales (se ; podra aprovechar tambin ; para hacer algo ms til).

tam_resid

($-OFFSET inicio+256+15)/16

; ------------ Cdigo de instalacin main PROC LEA MOV PUSH PUSH MOV MOV INT POP ADD POP INC CMP JB CALL

otra_int:

BX,tabla_ints AL,50h AX BX AH,25h DX,[BX] 21h BX BX,2 AX AL AL,58h otra_int es_AT?

; nueva base para IRQ's 0-7

; desviar INT 50h-57h

main

MOV MUL MOV CALL LEA MOV INT MOV MOV INT MOV MOV INT ENDP

BL,4 BL BL,AL inic_8259 DX,texto_txt AH,9 21h ES,ES:[2Ch] AH,49h 21h AH,31h DX,tam_resid 21h

; BL = 4 en AT y 0 en PC/XT

; mensaje de instalacin

; liberar entorno

; terminar residente

; ------------ Subrutinas de apoyo a la instalacin. inic_8259 PROC MOV OUT JMP MOV OUT JMP MOV OUT JMP MOV OUT JMP MOV OUT JMP MOV OUT RET ENDP PROC PUSHF POP AND PUSH POPF PUSHF POP AND CMP MOV JNE DEC RET ENDP ; Inicializacin 8259 maestro AL,0FFh 21h,AL SHORT $+2 AL,10001b 20h,AL SHORT $+2 AL,50h 21h,AL SHORT $+2 AL,BL 21h,AL SHORT $+2 AL,1 21h,AL SHORT $+2 AL,0 21h,AL ; enmascarar todas las IRQ ; ; ; ; ; flancos, maestro, s ICW4 enviar ICW1 estado de espera E/S base interrupciones INT 50h enviar ICW2

; 4 en AT y 0 en PC/XT ; enviar ICW3 ; modo 8086, EOI normal ; enviar ICW4

; permitir todas las IRQ

inic_8259 es_AT?

; comprobar si es XT AT AX AX,0FFFh AX

AX AX,0F000h AX,0F000h AX,1 es_AT AX

; indicar AT ; indicar PC/XT

es_AT: es_AT?

tabla_ints texto_txt 57h."

DW DB DB

irq0, irq1, irq2, irq3, irq4, irq5, irq6, irq7 13,10,"Las interrupciones 8-15 son ahora 5013,10,"$"

irqdemo

ENDS END

inicio

UNIDAD 6 ASSEMBLY PARA PROCESADORES X86 Objetivo.- Escribir programas a bajo nivel (ensamblador), para controlar el hardware del PC. ORIENTACIN METODOLGICA PARA EL APRENDIZAJE Lea los captulos 32 y 33 del texto bsico

CODIFICACION DE LAS INSTRUCCIONES EN EL 8086. (Este apartado es muy tcnico. Aunque no es imprescindible comprender lo que se expone a continuacin para programar en ensamblador, es muy til conocer cmo el procesador interpreta lo que le 'pedimos'. Esto nos da un mayor conocimiento acerca de la mquina en cuestin. Y de esta forma entendemos el porqu de ciertas sintaxis de instrucciones. Y resolveremos ms fcilmente los errores una vez que se nos presenten).

Cada procesador tiene un conjunto de instrucciones para manejarlo, as como para manejar la mquina por medio de l.

Indistintamente del lenguaje de programacin que estemos utilizando, cuando obtenemos el ejecutable, ste est compuesto nicamente por ese tipo de instrucciones bsicas (instrucciones de cdigo mquina).

Dependiendo de la calidad y prestaciones de ese lenguaje de programacin, el cdigo resultante, necesitar ms instrucciones del procesador o menos.

De todos es conocido, que hay lenguajes de alto o medio nivel (como C, pascal, basic, etc.) en los que para una misma tarea, uno dar un ejecutable ms grande que otro. Velocidad, aparte.

Esto no sucede as con ensamblador, en el que para cada instruccin, existe una y

slo una instruccin en cdigo mquina.

Las instrucciones del 8086 se codifican sobre 4 campos como mximo, y tienen un tamao de 1 a 6 bytes. Es decir, dependiendo de la instruccin de que se trate, necesitar ms o menos bytes para su codificacin, as como ms o menos campos.

Los cuatro campos en una instruccin cdigo mquina son: 1.- Cdigo de operacin: Este campo siempre aparece (obviamente). Una vez que el procesador descifra el significado de este campo, sabe si la instruccin consta de ms campos o si se trata de una instruccin de un slo campo. 2.- Modo de direccionamiento (byte EA): Le indica al procesador el nmero de operandos que acompaan al cdigo de operacin, as como el tipo de estos operandos(registros, memoria, valor inmediato). 3.- Desplazamiento del dato (sobre 8 o 16 bits): En caso de existir este campo, supone un desplazamiento sobre la direccin dada por un registro ndice o base (especificado este registro mediante el byte EA). 4.- Valor inmediato (sobre 8 o 16 bits): Almacena un valor numrico de 8 o 16 bits, que va a ser utilizado para una transferencia, una operacin aritmtica, etc.

Ahora entramos un poco ms en detalle:

Primero veremos un esquema de una instruccin cdigo mquina:

+-------------------------------------------------------------------+ 8 bits 2 3 3 8 16 bits 8 16 bits

+-----------+ +---------+ +--------------+ +--------------+ cdigo de Valor

operacin MODREGR/M Desplazamiento Inmediato +-----------+ +---------+ +--------------+ +--------------+ -- 1 byte -- 1 byte 1 2 bytes 1 2 bytes

+-------------------------------------------------------------------+

- El cdigo de operacin est codificado sobre 8 bits. Por medio de este campo se sabe si va a ser necesario cualquier otro de los tres restantes. Tambin el cdigo de operacin contiene informacin acerca de si se va a trabajar con palabras o con bytes.

- Byte EA Modo de direccionamiento: Contiene 3 campos. Los campos MOD y R/M especifican el modo de direccionamiento, y el campo REG especifica el registro de que se trata en la instruccin.

El campo MOD que es de 2 bits puede tener 4 valores diferentes: Los 3 primeros seleccionan el desplazamiento en los modos de direccionamiento de memoria. El cuarto selecciona un registro. Detallemos la funcin de estos bits en cada una de las 4 posibilidades: 00 ---> No hay desplazamiento. 01 ---> Se usa un byte para codificar el desplazamiento. 10 ---> Se usan 2 bytes (una palabra) para codificar el desplazamiento. 11 ---> Hace que R/M seleccione un registro usando la misma codificacin de los registros que para REG (ver ms abajo), en lugar de un modo de direccionamiento de la memoria. Es decir, que se produce una transferencia de un registro a otro.

El campo REG que es de 3 bits codifica el registro empleado. Por tanto es posible especificar hasta 8 registros diferentes por medio de este campo. Dependiendo de que se trate de acceso a palabras o a octetos, se seleccionar un registro de entre un grupo de 8, o de un segundo grupo de 8 registros. Para cuando se accede a registros de 16 bits, el campo REG codifica los registros de palabra de la siguiente manera:

AX (000), CX (001), DX (010), BX (011) SP (100), BP (101), SI (110), DI (111)

Cuando se accede a registros de 8 bits, la codificacin de los registros de tamao byte queda como sigue:

AL (000), CL (001), DL (010), BL (011) AH (100), CH (101), DH (110), BH (111)

El campo R/M indica el segundo registro (si lo hay) o el tipo de direccionamiento a memoria.

En caso de que haya segundo registro, ste se codifica de la misma forma que para el campo REG.

En caso de que se trate de un modo de direccionamiento de memoria, estos tres bits seleccionan uno de los modos de direccionamiento posibles de acuerdo con la siguiente tabla:

000 desplazamiento final = [BX] + [SI] + desplazamiento 001 desplazamiento final = [BX] + [DI] + desplazamiento 010 desplazamiento final = [BP] + [SI] + desplazamiento 011 desplazamiento final = [BP] + [DI] + desplazamiento 100 desplazamiento final = [SI] + desplazamiento 101 desplazamiento final = [DI] + desplazamiento 110 desplazamiento final = [BP] + desplazamiento 111 desplazamiento final = [BX] + desplazamiento

- El desplazamiento en caso de existir, supone un incremento en la direccin dada por un registro ndice o base, dando lugar as a un desplazamiento final, dentro de un segmento dado. Es decir, como se ve en la tabla superior, podemos acceder a memoria a travs de un registro base (BX) o un registro ndice (SI, DI), etc, o bien hacerlo a travs de uno de esos registros, pero ayudndonos de un desplazamiento que se suma a la

direccin que tienen establecida esos registros. Veremos ms adelante la utilidad de utilizar desplazamientos sobre un registro base o ndice.

Como ejemplo: Tenemos el registro DI apuntando a (con valor igual a) la direccin 3000h (direcciones siempre en hexadecimal). En esa direccin tenemos el comienzo de una cadena de caracteres que queremos convertir a maysculas. Y una vez que los hemos convertido, los queremos copiar a la memoria de pantalla.

Pues bien, podemos ir incrementando DI para tratar cada uno de estos caracteres, o bien podemos utilizar DI junto con un desplazamiento para acceder a cada uno de los caracteres. Es decir, para acceder al primer elemento sera DI+0, para el segundo, sera DI+1, etc. De esta forma, al terminar la tarea, DI seguir apuntando al principio de la cadena, y podremos copiar la cadena desde el principio a donde corresponda.

Si no utilizramos desplazamiento, tendramos que tener una variable apuntando al inicio de la cadena, para tenerlo luego localizable. Bueno... Esto es un simple ejemplo. Las posibilidades que nos ofrece el utilizar desplazamientos acompaando al registro base o ndice son mucho ms interesantes que lo que acabamos de ver en el ejemplo.

- El valor inmediato se utiliza cuando hacemos movimientos de datos a registros o a memoria. Por ejemplo queremos introducir en el registro AX la cantidad 37867 (93EBH), pues ese 37867 sera el valor inmediato.

En ensamblador la instruccin sera: MOV AX,37867 Simple, no? Mover (MOV) la cantidad 37867 al registro AX. Prximamente se ver el resto de instrucciones en ensamblador, mientras tanto, y por ser necesario ahora, aprenderemos el uso de la instruccin MOV.

La instruccin como hemos podido ver, se utiliza para movimientos o transferencias de datos: de registro a registro, de registro a memoria, y de memoria a registro. Pero nunca de memoria a memoria, ya que la arquitectura del procesador y bus no lo permiten.

La sintaxis bsica de la instruccin es la siguiente: MOV destino,fuente. El destino siempre a la izquierda, y la fuente a la derecha.

Ejemplos: * MOV ax,5 ---> mueve el valor inmediato (o dato) 5 al registro AX. Examinemos esta instruccin. Alguien podra pensar que como el valor 5 cabe en un slo registro de 8 bits (AL en este caso), el registro AH quedara como estaba antes de la instruccin. Pues no es as. Si le decimos al procesador que introduzca un 5 en AX, as se har. Poniendo a cero el registro AH, para que AX tenga el valor 5.

Veamos cmo se codifica esta instruccin: MOV AX,5 ---> B8 05 00 (Cdigo mquina, siempre en hexadecimal). En primer lugar tenemos el primer byte que contiene el cdigo de operacin (B8). Debido a que este cdigo de operacin(B8) tiene implcita la utilizacin del registro AX como destino, no es necesario el byte EA byte de direccionamiento, que s sera necesario para transferencias con otros registros. Como vimos en la primera leccin al hablar de registros, el registros AX (AH, AL) se utiliza normalmente como acumulador, de tal manera que existen operaciones especiales para trabajar con l, como la instruccin B8 y otras muchas de movimiento de datos, en las que no se especifica el registro mediante el byte EA, ya que est implcito en el cdigo de operacin. De esta manera se gana velocidad en la ejecucin del programa utilizando los registros para lo que han sido creados. AX acumulador, CX contador, etc.

Despus del cdigo de operacin tenemos dos bytes (1 palabra).

Estos dos bytes forman el campo Valor Inmediato, que como vemos aqu es de 16 bits. De los 4 campos que puede tener una instruccin cdigo mquina, sta slo tiene dos: El primero (cdigo de operacin), y el ltimo (valor inmediato).

Y volviendo de nuevo al campo Valor inmediato y a su tamao en esta instruccin (2 bytes): El orden de estos bytes es muy significativo. Veamos... Tenemos el valor 5 para introducir en una palabra. Lo normal sera que en el cdigo se almacenara este cinco como (00 05), pues en el 8086 esto no es as. Como siempre, para acelerar el programa cuando se manejan transferencias de datos, se lleg a la conclusin de que si se almacenan los bytes que componen una palabra en orden inverso al normal, luego es mucho ms rpido recuperarlos. Y es as como se hace en la prctica. Cada vez que almacenamos una palabra en memoria, el byte de mayor peso queda a la derecha del byte de menor peso. De lo anterior se desprende que el nmero 5 al introducirlo en una palabra de memoria, quedara como (05 00).

Otro ejemplo: Una vez que almacenamos el nmero 8BC3H en memoria, si hacemos un volcado de memoria para ver qu tenemos, veremos que en memoria no est el nmero como 8BC3H, sino que nos encontramos con C38BH.

* MOV al,5 ---> Introduce el valor 5 en el registro AL. En este caso, s que AH queda como estaba antes de la instruccin, ya que en la misma no interviene tal registro de ninguna forma (ni implcita al referirse a AX, ni explcita al referirnos a l en concreto). La instruccin se codifica como: MOV AL,5 ---> B0 05 Este ejemplo es prcticamente como el anterior, excepto que el cdigo de operacin en vez de ser B8 es B0, y adems ya no hay 2 bytes en

el campo valor inmediato, sino que hay uno slo, ya que vamos a introducir el dato en un registro de tamao byte.

Ejemplo cuando se trata de transferencias entre registros: * MOV CX,SI ---> Introduce el valor del registro SI en el registro CX. La instruccin se codifica como: MOV CX,SI ---> 8B CE En esta instruccin tenemos un cdigo de operando y el byte EA. Mediante este byte EA el procesador sabe qu registros intervienen en la transferencia. Descomponiendo el byte EA en sus dgitos binarios, tenemos: CE ---> 11001110 El campo MOD con valor 11, hace que R/M seleccione un registro como fuente. El campo REG con valor 001, indica que el registro destino es CX. El campo R/M con valor 110, indica que el registro fuente es SI.

Hemos visto la manera de introducir un dato en un registro. Pero cmo hacemos para introducir un dato en memoria? Bien, para esto se utilizan las variables (que tambin existen en ensamblador) o bien, se indica una posicin de memoria concreta, pasando de variables. Hay una tercera manera que es utilizar registros ndice o base.

+ En el primer caso, es muy simple. Si queremos introducir el valor 70h en la variable X, basta con escribir MOV X,70h. Previamente la variable X la hemos definido y hemos definido tambin su tamao: byte, palabra, doble palabra. Una vez que el compilador d el cdigo ejecutable, lo que antes era la variable X, ahora ser la posicin de memoria ocupada por la variable. Es decir, que el usar variables es para darnos una gran comodidad a los programadores. Podramos hacer un programa sin usar variables, indicando posiciones de memoria directamente, pero eso es ya ms parecido a cdigo mquina puro que a ensamblador.

+ En el segundo caso, el de indicar la posicin de memoria concreta, hay que tener en cuenta si esa posicin de memoria la utilizamos como un byte o como una palabra. Esto es as ya que si por medio del programa queremos guardar un 5 en la posicin de memoria 7654h (por ejemplo), el procesador no sabe si queremos guardar un byte o una palabra.

Para que no surja ningn tipo de lios, el lenguaje ensamblador cuenta con ciertos convencionalismos para tratar estas transferencias a memoria. Cuando queremos introducir un byte en una posicin dada de memoria lo hacemos con el siguiente formato: MOV BYTE PTR DS:[7654H],5 ^^^^^^^^ ^^ ^ ^

BYTE PTR indica que vamos a acceder a una posicin de memoria de tipo BYTE. Caundo queremos introducir una palabra a partir de una posicin de memoria el formato queda como sigue: MOV WORD PTR DS:[7654H],5 ^

^^^^^^^^ ^^ ^

WORD PTR indica que vamos a acceder a una posicin de memoria de tipo WORD.

Tened en cuenta tambin que cuando se quiere acceder a una posicin concreta de memoria sin pasar por una variable, se debe indicar entre corchetes, como en los ejemplos de arriba. Pero eso no es todo, se debe indicar un segmento, para que el procesador sepa a qu zona de 64 ks de la memoria pertenece la posicin dada entre los corchetes. En este caso indicamos el segmento DS (segmento de datos), que es lo usual. Aunque tambin podramos haber seleccionado el segmento ES(segmento extra de datos) para as poder transferir algo fuera de nuestra zona de datos.

Obsrvese la manera de indicar una direccin en direccin segmentada, no real. Primero se indica el segmento, luego dos puntos para separar, y luego entre corchetes el offset o desplazamiento dentro de ese segmento. Segmento:[desplazamiento] DS:[2626h], ES:[FFFFh], etc.

+ En el tercer caso nos valemos de un registro ndice o base, el cual contiene la direccin de la posicin de memoria que nos interesa, para acceder a dicha posicin de memoria. Un ejemplo: MOV BYTE PTR [DI],5 Obsrvese que aqu no es necesario indicar el segmento al que nos referimos. Se coge por defecto el segmento DS. En definitiva, cuando accedemos a memoria a travs de registros indice o base, no es necesario indicar el segmento. Mientras que si lo hacemos en forma directa, indicando la posicin de memoria tal que [2635h], debemos indicar el segmento con el que vamos a tratar.

Veamos ahora cmo se codifica una instruccin en la que se hace acceso a memoria.

* MOV WORD PTR DS:[7654H],5 ---> Esta instruccin introduce el valor 5 a partir de la posicin de memoria 7654h. Y digo a partir, ya que necesita dos posiciones de memoria para almacenarlo, ya que se trata de un valor inmediato de 16 bits (esto se determina al poner lo del WORD PTR). Con lo cual, la palabra con valor 5, queda almacenada en dos posiciones de memoria, la indicada [7654h] y la contigua [7655h]. Si tenemos en cuenta lo que hemos comentado antes acerca de cmo el 8086 almacena las datos de tipo palabra en memoria, sabremos de antemano que la posicin [7654h] contendr el valor 05, y la posicin [7655h] contendr el valor 00.

Veamos cmo se codifica esta instruccin:

MOV WORD PTR [7654H],5 ---> C7 06 54 76 05 00 Vemos que esta instruccin ha ocupado el mximo posible (6 bytes). De tal forma que los 4 campos de instruccin estn presentes. Vamos a estudiarla detenidamente: Lo primero que tenemos es el cdigo de operacin: C7. Este cdigo indica una operacin MOV sobre una direccin concreta desplazamiento, y con un valor numrico de tipo palabra.

El 3 y 4 byte juntos forman el desplazamiento (tener en cuenta lo del tema del orden inverso en los bytes), y los bytes 5 y 6 juntos forman el valor inmediato a introducir (tener en cuenta de nuevo lo del orden inverso).

Y nos queda el 2 byte, que es el byte EA o de direccionamiento. Que por qu lo he dejado para el final? je. Porque llevo 2 o 3 horas intentando descubrir el por qu de que sea 06. No me cuadra por ningn sitio, ya que este 6 indica que no hay desplazamiento, cuando s lo hay.

También podría gustarte