Anda di halaman 1dari 101

UNIVERSIDAD DE TARAPAC

Escuela Universitaria de Ingeniera Elctrica Electrnica


[Edicin 8]

APUNTES DEL MICROPROCESADOR 8085


PROGRAMACIN EN LENGUAJE ASSEMBLER

AUTOR: PAUL TERRAZAS L.

ARICA CHILE 2013

Clases de Microprocesadores Prof. B.Barraza.

1.

INTRODUCCION AL MICROCOMPUTADOR.

INTEL fue fundada por Gordon E. Moore y Robert Noyce en 1969, quienes inicialmente quisieron llamar a la empresa Moore Noyce, pero sonaba mal (ya que en ingls suena como More Noise, que literalmente significa: Ms Ruido), as que eligieron como nombre las siglas de Integrated Electronics, en espaol Electrnica Integrada. Este nombre estaba registrado por una cadena hotelera, por lo que tuvieron que comprar los derechos para poder utilizarlo. El xito comenz modestamente cuando consiguieron que los japoneses Busicom les encargasen una remesa de microprocesadores para sus calculadoras programables. Pese a las indicaciones de los japoneses, el ingeniero Ted Hoff dise un chip revolucionario que poda ser utilizado en muchos otros dispositivos sin necesidad de ser rediseado. Los chicos de Intel enseguida se dieron cuenta del potencial de este producto, capaz de dotar de inteligencia a muchas mquinas tontas. El nico problema es que Busicom posea los derechos, y para recuperarlos Intel tuvo que pagarles 60.000 dlares. El centro de operaciones de Intel est localizado en Santa Clara, California. La compaa tambin tiene instalaciones en Argentina, China, Costa Rica, Malasia, Mxico, Israel, Irlanda, India, Filipinas, y Rusia. En los Estados Unidos Intel emplea ms de 45.000 personas en Colorado, Massachusetts, Arizona, Nuevo Mxico, Oregn, Texas, Washington, y Utah 1.1.-Centro de operaciones El centro de operaciones de Intel est localizado en Santa Clara, California. La compaa tambin tiene instalaciones en Argentina, China, Costa Rica, Malasia, Mxico, Israel, Irlanda, India, Filipinas, y Rusia. En los Estados Unidos Intel emplea ms de 45.000 personas en Colorado, Massachusetts, Arizona, Nuevo Mxico, Oregn, Texas, Washington, y Utah

1.1.1.-Adquisicin de McAfee El 19 de agosto de 2010 Intel, el mayor fabricante mundial de microchips, anunci la compra de McAfee, compaa de software de seguridad informtica y del cual su producto ms conocido es el antivirus McAfee VirusScan. Al mismo tiempo McAfee ya haba anunciado la inversin en empresas especializadas a su vez en seguridad dispositivos mviles, como tenCube y Trust Digital, pese a haber obtenido bajos resultados en el ltimo trimestre. La adquisicin anunciada por Intel registra una operacin de 7.680 millones de dlares.

Clases de Microprocesadores Prof. B.Barraza.

1.2.-EVOLUCION DE LOS MICROPROCESADORES INTEL El Intel 4004 (i4004), un CPU de 4 bits, fue el primer microprocesador en un simple chip, as como el primero disponible comercialmente. Aproximadamente al mismo tiempo, algunos otros diseos de CPU en circuito integrado, tales como el militar F14 CADC de 1970, fueron implementados como chipsets, es decir constelaciones de mltiples chips.

Fig.1.2.1.3.-Historia y descripcin El 4004 fue lanzado en un paquete de 16 pines CERDIP el 15 de noviembre de 1971. El 4004 fue el primer procesador de computadora diseado y fabricado por el fabricante de chips Intel, quien previamente haca semiconductores de chips de memoria. Marcian "Ted" Hoff formul la propuesta arquitectnica en 1969. Sin embargo, la implementacin del microprocesador slo comenz en 1970 cuando Federico Faggin fue empleado por Intel, procedente de Fairchild Semiconductor, para dirigir el proyecto y para disear el 4004 (1970-1971). En Fairchild, Faggin haba desarrollado la tecnologa pionera llamada Silicon Gate Technology (SGT) y haba tambin diseado el primer circuito integrado MOS usando la tecnologa SGT (el Fairchild 3708), en 1968, demostrando la viabilidad de la nueva tecnologa. 1.3.1.-Especificaciones tcnicas. Microprocesador de 4 bits Contiene 2.300 transistores Encapsulado CERDIP de 16 pines Mxima velocidad del reloj 740 KHz Usa Arquitectura Harvard, es decir, almacenamiento separado de programas y datos. Contrario a la mayora de los diseos con arquitectura de Harvard, que utilizan buses separados, el 4004, con su necesidad de mantener baja la cuenta de pines, usaba un bus de 4 bits multiplexado para transferir: 12 bits de direcciones (direccionando hasta 4 KB) Instrucciones de 8 bits de ancho, que no deben ser colocadas en la misma memoria de datos de 4 bits de ancho. El conjunto de instrucciones est formado por 46 instrucciones (de las cuales 41 son de 8 bits de ancho y 5 de 16 bits de ancho) 16 registros de 4 bits cada uno Stack interno de llamadas a subrutinas de tres niveles de profundidad Chipset (circuitos auxiliares) para crear sistemas basados en el 4004

Clases de Microprocesadores Prof. B.Barraza.

1.4.-INTEL 4040 El Intel 4040 fue el sucesor del Intel 4004. Fue lanzado al mercado en 1974. Diseado por Federico Faggin (quien propuso la arquitectura y condujo el proyecto) y Tom Innes. El 4040 fue usado primariamente en juegos, pruebas, desarrollo, y equipos del control. El paquete del 4040 era ms de dos veces el ancho del 4004 y tena 24 pines en lugar de los 16 del 4004. El 4040 agreg 14 instrucciones, un espacio ms grande para el stack (7 niveles en vez de 3), un espacio para programas de 8KB, 8 registros adicionales, y habilidades de interrupcin (incluyendo sombras (shadows) de los primeros 8 registros). Nuevas caractersticas Interrupciones Ejecucin paso a paso

Fig.1.4.Extensiones Conjunto de instrucciones ampliado a 60 instrucciones. Memoria de programa ampliada a 8 Kbytes. Registros ampliados a 24. Pila de llamadas ampliada a 7 niveles de profundidad. 1.5.-INTEL 8008 El Intel 8008 (i8008) es un microprocesador diseado y fabricado por Intel que fue lanzado al mercado en abril de 1972. Codificado inicialmente como 1201, fue pedido a Intel por Computer Terminal Corporation para usarlo en su terminal programable Datapoint 2200, pero debido a que Intel termin el proyecto tarde y a que no cumpla con la expectativas de Computer Terminal Corporation, finalmente no fue usado en el Datapoint 2200. Posteriormente Computer Terminal Corporation e Intel acordaron que el i8008 pudiera ser vendido a otros clientes. El conjunto de instrucciones del i8008 y de todos los procesadores posteriores de Intel est fuertemente basado en las especificaciones de diseo de Computer Terminal Corporation. El i8008 emplea direcciones de 14 bits, pudiendo direccionar hasta 16 KB de memoria. El circuito integrado del i8008, limitado por las 18 patillas de su encapsulado DIP, tiene un bus compartido de datos y direcciones de 8 bits, por lo qu e necesita una

Clases de Microprocesadores Prof. B.Barraza.

gran cantidad de circuitera externa para poder ser utilizado. El i8008 puede acceder a 8 puertos de entrada y 24 de salida.

Aunque un poco ms lento que los microprocesadores Intel 4004 e Intel 4040 de 4 bits en cuanto a la cantidad de millones de instrucciones por segundo ejecutadas, el hecho de que el i8008 procesara 8 bits de datos al tiempo y de que pudiera acceder a mucha ms memoria hacen que el i8008 sea en la prctica unas tres o cuatro veces ms rpido que sus predecesores de 4 bits. 1.6.-INTEL 8080 El Intel 8080 fue un microprocesador temprano diseado y fabricado por Intel. El CPU de 8 bits fue lanzado en abril de 1974. Corra a 2 MHz, y generalmente se le considera el primer diseo de CPU microprocesador verdaderamente usable.

1.6.1.-Modelo de programacin El Intel 8080 fue el sucesor del Intel 8008, esto se deba a que era compatible a nivel fuente en el lenguaje ensamblador porque usaban el mismo conjunto de instrucciones desarrollado por Computer Terminal Corporation. Con un empaquetado ms grande, DIP de 40 pines, se permiti al 8080 proporcionar un bus de direccin de 16 bits y un bus de datos de 8 bits, permitiendo el fcil acceso a 64 KB de memoria. Tena siete registros de 8 bits, seis de los cuales se podan combinar en tres registros de 16 bits, un puntero de pila en memoria de 16 bits que reemplazaba la pila interna del 8008, y un contador de programa de 16 bits. 1.6.2.-El impacto industrial El 8080 fue usado en muchos de los primeros microcomputadores, tales como la Altair 8800 de MITS y el IMSAI 8080, formando la base para las mquinas que corran el sistema operativo CP/M. Posteriormente, en 1976, aparece el microprocesador Zilog Z80, completamente compatible con el 8080 pero ms capaz, el cual capitalizara en esto, convirtindose el Z80 y el CP/M en la combinacin dominante de CPU y OS del perodo, bastante parecido al x86 y el MS-DOS para el PC de la dcada posterior, los

Clases de Microprocesadores Prof. B.Barraza.

(aos 1980). El primer microcomputador en una simple tarjeta fue construido en base al 8080.

1.7.-INTEL 8085 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. 1.7.1.-Longitud de palabra La longitud de palabra del microprocesador Intel 8085 es de 8 bits, o lo que es lo mismo, 1 byte.

1.8.-INTEL 8088 El 8088 fue lanzado en 1979. El 8086 y el 8088 ejecutan el mismo conjunto de instrucciones. Internamente son idnticos, excepto que el 8086 tiene una cola de 6 bytes para instrucciones y el 8088 de solo 4. Exteriormente se diferencian en que el 8086 tiene un bus de datos de 16 bits y el del 8088 es de solo 8 bits, por ello, el 8086 era ms rpido, mientras que el 8088 poda usar menos y ms econmicos circuitos lgicos de soporte, lo que permita la fabricacin de sistemas ms econmicos. El 8088 fue el microprocesador usado para el primer computador personal de IBM, el IBM PC, que sali al mercado en agosto de 1981. Bus de datos de 8 bits Arquitectura interna de 16 bits Direccionamiento de 1Mb Clock de 5 MHz Modo mximo y modo mnimo Bus de direcciones y datos multiplexados

Clases de Microprocesadores Prof. B.Barraza.

1.9.-INTEL 80186 Y 80188 Los Intel 80186 y 80188 (i80186 e i81088) son dos microprocesadores que fueron desarrollados por Intel alrededor de 1982. Los i80186 e i80188 son una mejora del Intel 8086 y del Intel 8088 respectivamente. Al igual que el i8086, el i80186 tiene un bus externo de 16 bits, mientras que el i80188 lo tiene de 8 bits como el i8088, para hacerlo ms econmico. La velocidad de reloj del i80186 e i80188 es de 6 MHz. Ambos microprocesadores no fueron muy usados en ordenadores personales, sino que su uso principal fue como procesadores empotrados. Una caracterstica principal del i80186 e i80188 es que utilizndolos es posible reducir el nmero de circuitos integrados auxiliares necesarios, al integrar caractersticas como un controlador de acceso directo a memoria (DMA), un controlador de interrupciones, temporizadores y lgica de seleccin de circuito integrado. 1.9.1.-Nuevas instrucciones Con el i80186 e i80188 se introdujeron ocho nuevas instrucciones al conjunto de instrucciones x86.

1.10.-INTEL 80286 El Intel 80286 (llamado oficialmente iAPX 286, tambin conocido como i286 o 286) es un microprocesador de 16 bits de la familia x86, que fue lanzado al mercado por Intel el 1 de febrero de 1982. Cuenta con 134.000 transistores.

Caractersticas Una de las caractersticas interesantes de este procesador es que fue el primer procesador x86 con modo protegido, en el cual existan cuatro anillos de ejecucin y divisin de memoria mediante tablas de segmentos. En este modo trabajaban las versiones de 16 bits del sistema operativo OS/2. En este modo protegido se permita el uso de toda la memoria directamente, habilitando que pudiera ser direccionada hasta 16 MB de memoria con la unidad de gestin de memoria (MMU) lineal del chip y con 1 GB de espacio de direccin lgica. 1.11.-INTEL 80386 El Intel 80386 (i386, 386) es un microprocesador CISC con arquitectura x86. Durante su diseo se lo llam 'P3', debido a que era el prototipo de la tercera generacin x86. El i386 fue empleado como la unidad central de proceso de muchos ordenadores personales desde mediados de los aos 80 hasta principios de los 90.

Clases de Microprocesadores Prof. B.Barraza.

Fabricado y diseado por Intel, el procesador i386 fue lanzado al mercado el 16 de octubre de 1985. Intel estuvo en contra de fabricarlo antes de esa fecha debido a que los costes de produccin lo hubieran hecho poco rentable.

El hardware de un piloto automtico y aerodinmico tpico es un conjunto de cinco CPUs 80386, cada una con su propio circuito impreso. El 80386 es un diseo barato y probado a fondo que puede implementar un verdadero ordenador virtual. Se han implementado nuevas prestaciones que lo convierten en resistente a la radiacin y adecuado para uso aeroespacial, pero a este veterano diseo le favorece el bajo coste, su amplio uso, y el que su rendimiento y desarrollo de software est perfectamente caracterizado 1.12.-INTEL 80486 Los Intel 80486 (i486, 486) son una familia de microprocesadores de 32 bits con arquitectura x86 diseados por Intel Corporation. Los i486 son muy similares a sus predecesores, los Intel 80386. La diferencias principales son que los i486 tienen un conjunto de instrucciones optimizado, una unidad de coma flotante y un cach unificado integrados en el propio circuit0 integrado del microprocesador y una unidad de interfaz de bus mejorada.

Estas mejoras hacen que los i486 sean el doble de rpidos que un i386 e i387 a la misma frecuencia de reloj. De todos modos, algunos i486 de gama baja son ms lentos que los i386 ms rpidos.

2.- Constitucin bsica de un microprocesador 8085.


El microprocesador posee una serie de bloques internos que se comunican entre s y con el exterior a travs de unos conjuntos de lneas denominados buses que sirven para transmitir seales y datos entre los distintos componentes. Puede apreciarse con claridad la diferencia entre los buses internos, empleados por el microprocesador para realizar sus operaciones internas y los buses externos, utilizados para comunicarse

Clases de Microprocesadores Prof. B.Barraza.

con el exterior, es decir con componentes que estn situados fuera del propio microprocesador. Existen tres tipos de buses distintos: 2.2.1.- Bus de direcciones Se crea en los registros de direccionamiento de 16 bits y se comunica con el exterior mediante un conjunto de 16 lneas (lneas de direcciones) normalmente enumeradas de A0 hasta A15. Por este bus, las direcciones salen siempre hacia el exterior. 2.2.2.- Bus de datos Se genera en el interior del microprocesador y lo utiliza para intercambiar informacin entre sus distintos bloques internos y para comunicarse con el exterior. Son un conjunto de 8 bits que utilizan 8 lneas de conexin al exterior, normalmente denominadas D0 a D7. Por este bus sale y entra informacin, por tanto se trata de un bus bidireccional. 2.2.3.- Bus de control Compuesto por una serie de lneas, variable en nmero segn el componente de que se trate. Contiene las lneas de sincronizacin de funciones, pudiendo ser unas de salida y otras de entrada al microprocesador. Algunas seales de control pueden ser por ejemplo, las de lectura, escritura, reloj o clock, etc.
BUS DATOS INTERNO

ACUMULADOR
REGISTROS INTERNOS DE 8 BITS

BUS DATOS EXTERNO

ALU
REGISTROS INTERNOS DE 16 BITS REGISTRO DE FLAGS

CONTROL

BUS DE DIRECCIONES INTERNO

BUS DE CONTROL

BUS DIRECCIONES EXTERNO

FIG.12A

El bloque fundamental del microprocesador es el llamado ALU, representa la parte del microprocesador que realiza las operaciones aritmticas y lgicas. Para llevar a cabo este proceso emplean normalmente un registro especial denominado Acumulador donde almacenan el resultado de las operaciones realizadas. Algunos microprocesadores poseen ms de un acumulador. Para completar las indicaciones necesarias tras la ejecucin de las instrucciones, el microprocesador emplea adems un registro especial de 8 bits denominado Registro

Clases de Microprocesadores Prof. B.Barraza.

de Estado o Registro de Flags que marcarn distintas caractersticas y peculiaridades de las operaciones desarrolladas. Posteriormente Se ver con ms detalle este Registro de Flags. En la FIG.12A puede verse tambin un bloque denominado Control que sirve para sincronizar el funcionamiento de todo el sistema. Genera seales de sincronismo para la ALU, memorias y dispositivos de E/S. Las unidades de control generalmente estn constituidas basndose en microprogramacin (programacin interna no accesible al usuario) y se encargan de descifrar y ejecutar las instrucciones del programa que nosotros construyamos. Puede verse adems un bloque compuesto por Registros Internos de 8 bits , se trata en este caso de una serie de registros (variable segn el microprocesador de que se trate) de uso general que emplea la ALU para manipular datos. Estos registros normalmente almacenan palabras de 8 bits y en ocasiones pueden ser utilizados como registros pares (de dos en dos) almacenando palabras o informaciones de 16 bits. Hay tambin un bloque de Registros Internos de 16 bits que tambin son llamados registros de direccionamiento. Estn conectados al bus de direcciones y suele haber dos registros de este tipo que son: El Puntero de Pila, denominado abreviadamente SP, es indispensable durante el desarrollo de programas tanto para trabajar con interrupciones como para el tratamiento de subrutinas. El contenido del SP sealar en todo momento a la cima de la pila. (La pila estar constituida por un bloque de memoria RAM, donde se almacenarn de forma temporal los datos. Hablaremos de ella con posterioridad). El Contador de Programa, denominado abreviadamente PC, es imprescindible en todos los microprocesadores. Contiene la direccin de la siguiente instruccin que deba ejecutarse y su contenido se va incrementando a medida que las instrucciones van siendo ejecutadas. De todas formas el contenido del PC puede alterarse por programa cuando se desee o cuando se necesite como posteriormente se ver, alterando de este modo la ejecucin secuencial de las instrucciones.

Clases de Microprocesadores Prof. B.Barraza.

3.-Arquitectura del microprocesador 8085


Sintetizando, el microprocesador 8085 est constituido bsicamente por tres grandes bloques: una unidad de control, un conjunto de registros y una unidad aritmtico-lgica. -Unidad de control (UC). -Registros internos del microprocesador (RI). - Unidad aritmtico-lgica ALU

Fig.- Estructura del microcontrolador

Clases de Microprocesadores Prof. B.Barraza.

3.1.- Unidad de control. La unidad de control es un bloque de lgica cableada dentro del CI. Esta parte del sistema controla y sincroniza las transferencias de datos y las operaciones que se realizan con ellos. Por una parte, la unidad de control se le aplica la seal de reloj maestro de microprocesador, por otra, las seales de control de otros elementos del sistema, para interrumpir la secuencia del programa, y el bus de datos, a travs del decodificador de instrucciones con la informacin ya interpretada, para que la unidad pueda responder con las seales adecuadas. Unas salidas de la unidad de control se dirigen a los elementos externos del microprocesador (memoria y dispositivos de E/S) para indicar, por ejemplo, que la operacin en curso se trata de una lectura o de una escritura, otras a los registros internos de la propia CPU.

Fig.3.1.-Unidad de control y buses. La unidad de control, en resumen, regula la funcin bsica del microprocesador consistente en la bsqueda y posterior ejecucin de instrucciones. Esta operacin es cclica mientras no se interrumpa mediante una instruccin de paro (HALT). En el estado de bsqueda se transfiere una instruccin desde la memoria hasta el microprocesador y en el estado de ejecucin se realiza esta operacin. 3.2 Registros internos del microprocesador . El 8085 tiene una serie de registros de propsito general denominados B, C, D, E, H y L de 8 bits cada uno pueden operar en parejas, como se mencion anteriormente (se agrupan para este fin B con C, D con E y H con L). Se utilizan para transformaciones internas y as obtener una mayor flexibilidad y rapidez de operacin.

Clases de Microprocesadores Prof. B.Barraza.

Los registros de propsito especial son: el Contador del Programa (CP), de 16 bits; el Stack Pointer o puntero de pila (SP), 16 bits; los Registros Temporales, de 8 bits cada uno, pero que pueden operar unidos; el Registro de direcciones, de 16 bits, cuyas salidas son las patas del bus de direcciones del microprocesador, y el Registro de Instruccin (RI), de 8 bits. El Contador de Programa (CP) es un registro que memoriza la direccin de la prxima instruccin a ejecutar o bien la direccin de parte de una instruccin formada por ms de un byte. Las instrucciones del 8085 y de todos los microprocesadores de 8 bits pueden ser de 1, 2 3 bytes, ordenados de forma sucesiva en la memoria. La unidad de control incrementa automticamente en uno al contenido del CP cada vez que termina un ciclo de bsqueda, salvo cuando aparece la instruccin HALT (paro). La seal de RESET, que es una de las entradas de la unidad de control, coloca al CP a cero e inicializa la ejecucin del programa.

3.3.- Unidad aritmtico-lgica. La unidad de proceso completa del 8085 est formada por una ALU (Unidad aritmtico-lgica), que es un circuito combinacional capaz de realizar operaciones de suma y resta, as como operaciones lgicas, un registro de 8 bits llamado Acumulador (A) y un conjunto de cinco biestables o flags denominados registros de estado , que ofrecen informacin relativa al resultado de las operaciones aritmticas o lgicas que se realizan.

Fig.3.3.- Unidad aritmtica lgica. Cuando se realiza una operacin, el acumulador contiene un operando y uno de los registros temporales. El resultado de la operacin se coloca en el acumulador reemplazando al dato u operando que contena anteriormente.

Clases de Microprocesadores Prof. B.Barraza.

La denominacin y situacin de cada flag se muestra en el siguiente dibujo. CY es el sealizador de arrastre, y su contenido pasa a ser 1 cuando se produce acarreo al realizar una suma. AC es el sealizador de arrastre auxiliar. Se utiliza cuando se realizan operaciones en BCD. Su valor ser 1 cuando se produzca arrastre al efectuar la suma de los bits de los operandos que ocupan el cuarto lugar por la derecha. S es el flag de signo y su valor ser 1 si el bit ms significativo del resultado es 1. En caso contrario, ser cero. Z es el sealizador de cero y se pone a 1 cuando el resultado de una operacin ha sido cero. Por ltimo, P es el flag de paridad y su valor ser 1 cuando el nmero de bits de una palabra depositada en acumulador sea par.

Fig.-Flags S: (Signo) Si el resultado es negativo S=1 Si el resultado es positivo S=0 AC: (Carry auxiliar) Si hay carry auxiliar AC=1 Si no hay carry auxiliar AC=0 CY: (Carry) Si hay carry Cy=1 Si no hay carry Cy=0 Z: (Cero) Si el resultado es Cero Z=1 Si el resultado es diferente de cero Z=0 P: (Paridad ) Si el resultado es par P= 1 Si el resultado es impar P=0

Clases de Microprocesadores Prof. B.Barraza.

4. Cdigo mquina y nemnicos


El juego de instrucciones de un microprocesador lo constituye todo el conjunto de expresiones binarias que el decodificador de instrucciones es capaz de interpretar. Es evidente que cuanto mayor sea el nmero y ms variado el repertorio mayor ser la operatividad del dispositivo y, en consecuencia, del sistema donde se integre. El microprocesador, como todo circuito digital, opera con unos y con ceros exclusivamente. Sin embargo, el sistema de codificacin binario es muy engorroso para ser utilizado como lenguaje de programacin, ya que un dato o palabra, en un circuito que utiliza un microprocesador como el 8085, est formado por 8 bits y una direccin por 16 bits. Adems, tales expresiones numricas resultan ininteligibles. Por este motivo, los equipos ms elementales que se emplean para programar admiten para la escritura de las instrucciones al menos la codificacin hexadecimal. La traduccin a lenguaje binario, tambin denominado cdigo mquina, se realiza con el correspondiente decodificador hexadecimal/binario incorporado al equipo.

4.1. Acumulador Registro temporal Lgicamente este sistema ofrece tambin grandes inconvenientes, tanto en la fase de definicin como en la de depuracin, cuando el programa es complejo. Con el fin de aproximar la escritura y lectura de programas al lenguaje habitual, se decidi expresar las instrucciones de los microprocesadores utilizando la abreviatura o las siglas de la palabra que define la operacin que realiza. Dado el origen de las compaas fabricantes de este tipo de dispositivos, estas palabras estn expresadas en ingls. As, por ejemplo, la abreviatura MOV, que procede de MOVE y significa MOVER o TRASLADAR, se utiliza para transferencia de datos entre registros internos o externos. Estas expresiones se denominan nemnicos, que significa recordatorio. Por tanto, las expresiones del microprocesador 8085 son un conjunto de 74 nemnicos compatibles con las de otros dispositivos de INTEL, pero, desgraciadamente, distintas, aunque realicen la misma operacin, a las de otros fabricantes. Existen equipos de programacin que admiten directamente las instrucciones en forma de nemnicos. Estos equipos disponen de un programa denominado assembler, que traduce el programa escrito en leguaje ensamblador el sistema binario, que es el nico cdigo capaz de ser interpretado por la mquina. Los equipos ms complejos, denominados genricamente sistemas de desarrollo, son capaces de traducir a cdigo mquina cualquier programa escrito en lenguajes de alto nivel, tales como Pascal,

Clases de Microprocesadores Prof. B.Barraza.

BASIC, etc. Estos equipos facilitan enormemente el desarrollo del software de un sistema digital.

5. Tipos de instrucciones
El nmero de instrucciones que cada microprocesador puede interpretar y ejecutar es distinto en cada caso. As el 8085 est diseado para admitir 74 instrucciones bsicas, de tal forma que, si contemplamos las variantes de algunas de ellas, este dispositivo est preparado par a realizar 246 operaciones distintas.
5.1 Lista de instruciones 8085 Las instrucciones del 8085 se pueden clasificar en cinco grupo: 5.1.1.- Transferencia de datos entre registros o entre posiciones de memoria y registros. 5.1.2.- Operaciones aritmticas. 5.1.3.-Operaciones lgicas 5.1.4.-Bifurcaciones (salto). 5.1.5.- Instrucciones de stack, /S y control de mquina.

Existe un gran cantidad de clasificaciones que sin lugar a dudas ayudaran a comprender mas sus caractersticas. Pero su dominio no est en memorizarlas sin darle sentido, si no el buscar herramientas que permitan solucionar requerimientos. En programacin siempre se empieza con la estructura elemental, de all se arma la estructura total. Si no hay practica no hay maestra.

ndice de instrucciones del microprocesador 8085 1Nro 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Instruccin MOV MVI CMP CPI LXI STAX STA LDAX LDA INR DCR INX DCX ADD ADC ADI ACI SUB SUI SBI Nro 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 Instruccin ANA ANI XRA XRI ORA ORI CMC STC DAA NOP RLC RRC RAL RAR JMP JC JNC JZ JNZ JM Nro 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 Instruccin JP JPE CALL CC CNC CZ CNZ CM CP CPE CPO RET RC RNC RZ RNZ RM RP RPE RPO Nro 61 62 63 64 65 66 67 68 69 70 71 72 73 74 Instruccin RST EI DI IN OUT HLT PUSH POP DAD XCHG XTHL SPHL

Clases de Microprocesadores Prof. B.Barraza.

Tabla 2.1 Set de instrucciones del microprocesador 8085A

No

Nemonicos

Sintesis de operacin y ejemplos

0.

Directiva General

.ORG 0 .data 2000H dB dW .define

: Posicion de programa en la DIRECTIVA : Direccion donde empiezo a colocar mis datos, en 2000H : Directiva asociada a adatos : Directiva asociada a datos exadecimales. : Asume una variable a un numero

Ejemplo: dB 1,2,5 Coloca los datos 1,2,5 en forma secuencial en la tabla. dW 1,3,4,4,1234H Coloca datos en la tabla pero ocupa 2 bytes.

1.

MOV R1, R2 Bits afectados: Direccionamiento: Registro registro indirecto

Movimiento Direccionamiento registro. El contenido del registro R2 es transferido al registro R1. R1 y R2 pueden ser los registros B, C, D, E, H, L o el acumulador A. Supongamos que el registro B contiene 00H y el registro C contiene 30H MOV B,C almacenar 30H en el registro B.

MOV Reg, M

Direccionamiento registro indirecto. El contenido de la direccin de memoria, cuya direccin est en los registros H-L, es transferido al registro R. R puede ser cualquiera de los registros A, B, C, D, E, H o L.

MOV M, Reg

Direccionamiento registro indirecto. El contenido del registro R es transferido a la direccin de memoria indicada por los registros H-L. Supongamos que el registro H contiene 00H y el registro L contiene 30H. La instruccin MOV M, A almacenar el contenido del acumulador en la posicin de memoria 0030H.

MVI R1, R2 Bits afectados: Direccionamiento: Inmediato

Cargar un registro con un dato Inmediato El primer operando debe ser uno de los registros A, B, C, D, E, H o L, que ser cargado con el dato especificado en el segundo operando (DATOS). El dato no debe exceder de un byte. La instruccin: MVI H, 33H carga en el registro H el valor 33H, mientras que La instruccin MVI L, 44H carga en el registro L el valor 44H.

Supuestos los dos ejemplos anteriores, la instruccin MVI M, Reg MVI M, 2AH carga en la posicin de memoria 3344H (direccin aportada por los registros H y L) el valor 2AH.

Clases de Microprocesadores Prof. B.Barraza.

CMP Reg

Comparar registro o memoria con acumulador El contenido del registro o posicin de memoria especificados se compara con el contenido del acumulador. Esta comparacin se realiza restando internamente el contenido del registro al del acumulador, permaneciendo ste invariable, y colocando los bits de condicin en funcin del resultado. Concretamente, el bit de cero se pone a uno si las cantidades comparadas son iguales, y se pone a cero si son desiguales. Si el acumulador almacena 0AH y el registro B contiene 05H CMP B Compara B con el acumulador efectuando una resta interna. 1. El registro B contiene 05H, se complementa a 2.

Registro Complemento 1 Compemento 2 Dato complementado Acumulador Dato complementado Nuevo acumulador CY=0 Z=0

05H: C-1: C-2: FBH: 0AH: FBH: 05H:

0 1 + 1 0 1 0

0 1 1 0 1 0

0 1 1 0 1 0

0 1 1 0 1 0

0 1 1 1 1 0

1 0 0 0 0 1

0 1 1 1 1 0

1 0 1 1 0 1 1

El bit de cero se pondra a cero puesto que son desiguales. Z=0

CMP M

CPI dato Flags afectados: Z, S, P, CY, AC Direccionamiento: Registro indirecto

Comparar el contenido del acumulador con un dato Inmediato Compara el valor del byte especificado con el contenido del acumulador y posiciona los bits de cero y acarreo para indicar el resultado. El bit de cero indica igualdad. Un 0 en el acarreo indica que el contenido del acumulador es mayor que DATOS. Un 1 en el acarreo indica que el acumulador es menor que DATOS. Sin embargo, el significado del bit de acarreo es contrario cuando los valores tienen diferente signo o cuando uno de los valores est complementado. El valor de DATOS no debe exceder de un byte. Si tenemos la secuencia de instrucciones (1).MVI A, 25H (2).CPI 20H La instruccin (1) carga en el acumulador el valor 25H. La instruccin (2) realiza la siguiente operacin de suma (tomando el complemento a dos del dato inmediato, es decir, E0H): DATO Complemento 1 Compemento 2 Dato complementado Acumulador Dato complementado Nuevo acumulador Cy=1 Las banderas son afectas. CPI Z Cy X A X X>Y 0 0 P X=Y 1 0 X X<Y 0 1 Cy 20H: C-1: C-2: E0H: 25H: E0H: 05H: 0 1 + 1 0 1 0 1 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 0 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1

Cargar un par de registros con un dato Inmediato 5 LXI Reg,dato Bits afectados: Direccionamiento: LXI es una instruccin de 3 bytes; su segundo y tercer byte contienen el dato que ha de ser cargado en el par de registros (PR). El primer operando debe especificar el par de registros a ser cargados, pueden ser los pares BC, DE, HL, o el SP. El segundo operando especifica los dos bytes a ser cargados. LXI es la nica instruccin inmediata que acepta un valor de

Clases de Microprocesadores Prof. B.Barraza.

Inmediato

16 bits. El resto trabajan con datos de 8 bits. Si el par de registros especificados es SP, el segundo byte de la instruccin sustituye a los 8 bits menos significativos del puntero de pila, mientras que el tercer byte de la instruccin reemplaza a los 8 bits ms significativos del puntero de pila. 1. La instruccin LXI B, 00FFH carga en el registro B el valor 00H y en el registro C el valor FFH. 2. La siguiente instruccin carga en el puntero de pila el valor 1000H LXI SP, 1000H

STAX Reg Bits afectados: Direccionamiento: Registro indirecto

Almacenar el contenido del acumulador El contenido del acumulador se almacena en la posicin de memoria especificada por los registros B y C, o los registros D y E. Si el registro B contiene 3FH y el registro C contiene 16H, la instruccin STAX B almacenar el contenido del acumulador en la posicin de memoria 3F16H.

STA Dir Direccionamiento: Directo

Almacenamiento directo desde el Acumulador STA DIR almacena una copia del contenido actual del acumulador en la posicin de memoria especificada por DIR. Todas las instrucciones que se muestran a continuacin introducen el contenido del acumulador en la posicin de memoria 0080H: STA 0080H

8 LDAX Reg Cargar el acumulador El contenido de la posicin de memoria especificada por los registros B y C, o los registros D y E, reemplaza el contenido del acumulador. Si el registro D contiene 3FH y el registro E contiene 16H, la instruccin LDAX D cargar en el acumulador el contenido de la posicin de memoria 3F16H.

9 LDA Dir Bits afectados: Direccionamiento: Registro indirecto Carga directa en el acumulador LDA DIR carga el acumulador con el contenido de la memoria direccionada por DIR. La direccin puede ser puesta como un nmero, una etiqueta previamente definida o una expresin. A continuacin se introducen en el acumulador el contenido de la posicin de memoria 1000H: LDA 1000H

10

INR Reg Bits afectados: Z, S, P, AC Direccionamiento: Registro indirecto

Incrementar registro o memoria El contenido del registro o posicin de memoria especificados se incrementa en una unidad. Si el registro A contiene 98H, la instruccin INR A har que este registro contenga la cantidad 99H

11

DCR Reg Bits afectados: Z, S, P, AC Direccionamiento: Registro indirecto

Decrementa registro o memoria El contenido del registro o posicin de memoria especificados se incrementa en una unidad. Si el registro A contiene 99H, la instruccin DCR A har que este registro contenga la cantidad 98H.

Incrementar par de registros 12 INX Reg Direccionamiento: Registro El nmero de 16 bits contenido en el par de registros especificado se incrementa en una unidad. 1. Suponiendo que los registros H y L contienen respectivamente 30H y 00H, la instruccin INX H hace que el registro H contenga 30H y el registro L el valor 01H. 2. Si el puntero de pila contiene FFFFH, la instruccin INX SP hace que ste contenga 0000H.

Clases de Microprocesadores Prof. B.Barraza.

13

DCX Reg Direccionamiento: Registro

Decrementar par de registros El nmero de 16 bits contenido en el par de registros especificado se decrementa en una unidad. Suponiendo que los registros H y L contienen respectivamente 30H y 00H, la instruccin DCX H hace que el registro H contenga 2FH y el registro L el valor FFH.

14 ADD Bits afectados: Z, S, P,CY, AC Direccionamiento: Registro Sumar registro o memoria al acumulador (Suma Aritmtica) El contenido del registro o posicin de memoria especificados se suma al contenido del acumulador, usando aritmtica de complemento a dos. El resultado se guarda en el acumulador. 1. Si el registro B contiene el valor 3AH y el acumulador contiene 6CH, la instruccin ADD B realiza la siguiente suma:

Registro B Acumulador Nuevo acumulador 2. La instruccin

3AH: 6CH: A6H:

0 0 1

0 1 0

1 1 1

1 0 0

1 1 0

0 1 1

1 0 1

0 0 0

ADD A duplica el contenido del acumulador.

Sumar registro o memoria al acumulador con acarreo ADC Reg Bits afectados: Z, S, P,CY, AC Direccionamiento: Registro indirecto El contenido del registro o posicin de memoria especificados ms el contenido del bit de acarreo, se suman al contenido del acumulador. Supongamos que el registro B contiene el valor 30H, el acumulador 76H, y el bit de acarreo est puesto a cero. La instruccin 18 Simulador del microprocesador 8085 ADC C realizar la siguiente suma:

15

Registro B Acumulador Bit de acarreo Nuevo acumulador A6H

30H: 76H: +

0 0 1

0 1 0

1 1 1

1 1 0

0 0 0

0 1 1

0 1 1

0 0 0 0

El nuevo contenido del acumulador ser A6H, mientras que todos los bits de condicin quedarn puestos a cero excepto los de signo y paridad. Si el bit de acarreo hubiera sido 1 antes de realizar la operacin, hubiera tenido lugar la siguiente suma:

Registro B Acumulador Bit de acarreo Nuevo acumulador A7H

30H: 76H:

0 0 1

0 1 0

1 1 1

1 1 0

0 0 0

0 1 1

0 1 1

0 0 1 1

El acumulador contendra ahora A7H y todos los bits de condicin excepto el de signo, estaran puestos a cero.

16

ADI Bits afectados: Z, S, P, CY, AC

Sumar al acumulador un dato Inmediato Suma el valor del byte especificado en la instruccin (DATOS), al contenido del acumulador y deja el resultado en el acumulador. El dato debe ser expresado en forma de nmero, un ASCII constante, la etiqueta de un valor previamente definido o una

Clases de Microprocesadores Prof. B.Barraza.

expresin. El dato no debe exceder de un byte. Se utiliza aritmtica de complemento a dos. Ejemplo A continuacin presentamos un ejemplo con 3 instrucciones: (1).MVI A, 34 (2).ADI 20 (3).ADI -20 En todas las instrucciones se utilizan datos en base decimal. As, por ejemplo, en la instruccin (2) el valor 20 es 14H. La instruccin (1) carga en el acumulador el valor 22H. La instruccin (2) realiza la siguiente suma

Acumulador Dato inmediato Nuevo acumulador

22H: 14H: 36H:

0 0 0

0 0 0

1 0 1

0 1 1

0 0 0

0 1 1

1 0 1

0 0 0

El bit de paridad se pone a uno y el resto se quedan a cero. La instruccin (3) restaura el valor del acumulador realizando la siguiente suma: Acumulador Dato inmediato Nuevoa acumulador 36H: ECH: 22H: 0 1 0 0 1 0 1 1 1 1 0 0 0 1 0 1 1 0 1 0 1 0 0 0

Ahora los bits de paridad, acarreo y acarreo auxiliar se quedan a uno y el resto a cero.

17

ACI dato Bits afectados: Z, S, P, CY, AC

Sumar al acumulador un dato Inmediato con arrrastre Suma el contenido del byte especificado (DATOS) en la instruccin, al contenido del acumulador, aadiendo adems el bit del acarreo. El resultado se almacena en el acumulador (perdindose as el anterior contenido del Acumulador). El dato (DATOS) debe estar especificado en forma de nmero, en ASCII constante, como etiqueta de un valor previamente definido o una expresin. El dato no debe exceder de un byte.

Tenemos las siguientes instrucciones: (1).MVI A, 34 (2).ACI 20 y suponemos el bit de acarreo puesto a uno. La instruccin (1) carga en el acumulador el valor 22H. La instruccin (2) realiza la siguiente suma: Registro B Acumulador Bit de acarreo Nuevo acumulador Todos los bits se ponen a cero. 22H: 14H: + 37H: 0 0 1 1 0 1 1 0 0 0 0 1 0 0 1 0 0 0 1 1 0 0 0 1 1

Restar registro o memoria del acumulador 18 SUB Reg Bits afectados: Z, S, P,CY, AC Direccionamiento: Registro indirecto El contenido del registro o posicin de memoria especificados se resta al contenido del acumulador, usando aritmtica de complemento a dos. El resultado se guarda en el acumulador. Si no hay acarreo del bit de ms peso, el bit de acarreo se pone a uno, y viceversa, al contrario de lo que ocurre con la operacin de suma. Antes de entrar en los ejemplos recordamos que restar utilizando aritmtica de complemento a dos equivale a complementar cada bit del segundo operando y sumar 1. 1. Si el acumulador contiene 60H y el registro E contiene 28H, la instruccin SUB E realizar la siguiente operacin de resta: (Registro B)+(-28H) Acumulador Dato inmediato 60H: 28H: 0 0 1 0 1 1 0 0 0 1 0 0 0 0 0 0

Clases de Microprocesadores Prof. B.Barraza.

Registro E Complemento 1 Compemento 2 Dato complementado Acumulador Dato complementado Nuevo acumulador

28H: C-1: C-2: D8H: 60H: D8H: 38H

0 1 + 1 0 1 0

0 1 1 1 1 0

1 0 0 1 0 1

0 1 1 0 1 1

1 0 1 0 1 1

0 1 0 0 0 0

0 1 0 0 0 0

0 1 1 0 0 0 0

A=38H El acumulador obtiene un nuevo valor A=38H.

19

SUI dato Bits afectados Z, S, P, CY, AC

Restar del acumulador un dato Inmediato Descripcin El byte de datos inmediato se resta del contenido del acumulador usando aritmtica de complemento a dos. El resultado se deja en el acumulador. Ya que se trata de una operacin de resta, el bit de acarreo se pone a uno cuando no hay acarreo del bit de ms peso, y se pone a cero si tiene dicho acarreo. A continuacin presentamos un ejemplo con 2 instrucciones: (1).MVI A, B3H (2).SUI B3H La instruccin (1) carga en el acumulador el valor B3H. La instruccin (2) realiza la siguiente suma (usando el complemento a dos del dato inmediato): Dato inmediato Complemento 1 Compemento 2 Dato complementado Acumulador Dato complementado Nuevo acumulador B3H: C-1: C-2: 4DH: B3H: 4DH: 00H: 1 0 + 0 1 0 0 1 0 1 0 0 1 0 0 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 1 1 0 1 0 0 1 0 1 1 0 1 0 1 1 1 1 0

Como era de esperar el resultado final del acumulador es cero ya que le estamos restando su propio valor. El valor 6DH del dato inmediato corresponde al complemento a dos del valor B3H que estamos restando. Debido a que existe desbordamiento del sptimo bit se produce acarreo y se pone el bit de acarreo a cero. El bit de paridad se pone a uno mientras que los dems permanecen inactivos.

20

SBI

Restar del acumulador un dato Inmediato con arrrastre El bit de acarreo se suma internamente al byte de datos inmediato. El valor obtenido se resta del contenido del acumulador usando aritmtica de complemento a dos. El resultado se deja en el acumulador. Esta instruccin, al igual que SBB, se usa preferentemente para realizar restas multi-byte. Al igual que en el apartado anterior, el bit de acarreo se pone a uno si no hay acarreo del bit de ms peso, ponindose a cero si lo hay.

Tenemos las siguientes instrucciones: (1).MVI A, 00H (2).SBI 01H y suponemos el bit de acarreo puesto a cero. La instruccin (1) carga en el acumulador el valor 00H. La instruccin (2) realiza la siguiente suma (usando el complemento a dos del dato inmediato): Acumulador Dato inmediato Bit de acarreo Nuevo acumulador Cy=1 Z=0 Ca=0 00H: FFH: + FFH: 1 1 1 1 1 1 1 0 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1

Clases de Microprocesadores Prof. B.Barraza.

No hay acarreo, por lo que el bit de acarreo se pone a uno. Los bits de cero y acarreo auxiliar estn a cero, mientras que los de signo y paridad se ponen a uno.

21

ANA Reg Bits afectados: Z, S, P,CY, AC Direccionamiento: Registro indirecto

Funcin lgica AND entre registro o Memoria con acumulador Se realiza la funcin lgica AND bit a bit entre el contenido del registro o posicin de memoria especificados y el contenido del acumulador. El bit de acarreo se pone a cero. La tabla de verdad de la funcin lgica AND es: A 0 0 1 1 B 0 1 0 1 f 0 0 0 1

Si el registro B contiene 6CH y el acumulador almacena 3AH, la instruccin ANA B realiza la siguiente operacin:Si el registro B contiene 6CH y el acumulador almacena 3AH, la instruccin ANA B realiza la siguiente operacin: Acumulador Dato inmediato Nuevo acumulador 3AH: 6CH: 28H: 0 0 0 0 1 0 1 1 1 1 0 0 1 1 1 0 1 0 1 0 0 0 0 0

22

ANI datos Bis afectados: Z, S, P, CY, AC

Funcin lgica AND entre el acumulador y un Dato Inmediato Realiza una operacin Y lgica entre el dato (DATOS) especificado en la instruccin y el contenido del acumulador, el resultado queda en el acumulador. Se pone a cero el bit de acarreo. El dato, que no debe exceder de un byte, puede ser expresado en forma de nmero, un ASCII constante, la etiqueta de algn valor previamente definido o una Expresin. Disponemos de las siguientes instrucciones: (1).MVI A, A0H (2).ANI 0FH La instruccin (1) carga en el acumulador el valor A0H. La instruccin (2) realiza la siguiente operacin AND bit a bit entre el acumulador y el dato inmediato 0FH: Acumulador A0H: 1 0 1 0 0 0 0 0 Dato inmediato 0FH: 0 0 0 0 1 1 1 1 Nuevo acumulador 00H: 0 0 0 0 0 0 0 0 La instruccin ANI del ejemplo pone a cero los cuatro bits de mayor peso, dejando invariables los cuatro menores. Ya que los cuatro bits de menor peso del acumulador eran cero, el resultado final es 00H con lo que el bit de cero se pondr a cero.

23

XRA Reg Bits afectados: Z, S, P,CY, AC Direccionamiento: Registro

Funcin lgica O-EXCLUSIVO entre registro o memoria con acumulador. Se realiza la funcin lgica O-EXCLUSIVO bit a bit entre el contenido del registro o posicin de memoria especificados y el contenido del acumulador, guardndose el resultado en este ltimo. La tabla de verdad de la funcin lgica O-EXCLUSIVO es: A 0 0 1 1 B 0 1 0 1 f 0 1 1 0

1. Si el registro B contiene 6CH y el acumulador almacena 3AH, la instruccin XRA B realiza la siguiente operacin: Acumulador 3AH: 0 0 1 1 1 Registro B 6CH: 0 1 1 0 1

0 1

1 0

0 0

Clases de Microprocesadores Prof. B.Barraza.

Nuevo acumulador

56H:

La funcin O-EXCLUSIVO de cualquier bit con uno da lugar al complemento del mismo. As, si el acumulador contiene todo unos, la instruccin XRA B produce el complemento a uno del contenido del registro B, y lo guarda en el acumulador.

En algunas ocasiones, un byte se utiliza para reflejar los estados de ciertas condiciones dentro de un programa, donde cada uno de los ocho bits puede responder a una determinada condicin de falso o verdadero, actuado o inhibido, etc. Mediante la funcin O-EXCLUSIVO podemos determinar cuntos bits de la palabra han cambiado de estado en un determinado lapsus de tiempo.

24

XRI Dato Bits afectados: Z, S, P, CY, AC

Funcin lgica O-EXCLUSIVO entre el acumulador y un dato Inmediato Se realiza la funcin lgica O-EXCLUSIVO bit a bit entre un byte de datos inmediatos y el contenido del acumulador. El resultado se guarda en el acumulador. El bit de acarreo se pone a cero. Ejemplo Esta instruccin se suele utilizar para complementar bits especficos del acumulador dejando los restantes en su estado original. De este modo y suponiendo que el acumulador contiene ABH, la instruccin XRI 80H complementa el bit de ms peso del acumulador, tal y como se muestra en la siguiente figura: Acumulador ABH: 1 0 1 0 1 0 1 1 Dato inmediato 80H: 1 0 0 0 0 0 0 0 Nuevo acumulador 2BH: 0 0 1 0 1 0 1 1

25

ORA Reg Bits afectados: Z, S, P,CY, AC Direccionamiento: Registro indirecto

Funcin lgica OR entre registro o memoria con acumulador Se realiza la funcin lgica AND bit a bit entre el contenido del registro o posicin de memoria especificados y el contenido del acumulador, quedando en este ltimo el resultado. El bit de acarreo se pone a cero. La tabla de verdad de la funcin lgica OR es: A B f 0 0 0 0 1 1 1 0 1 1 1 1

Como sea que la funcin OR de cualquier bit con un uno da como resultado uno, y de cualquier bit con cero, lo deja invariable, esta funcin se utiliza frecuentemente para poner a uno grupos de bits. Si el registro B contiene OFH y el acumulador almacena 33H, la instruccin ORA B realiza la siguiente operacin: Acumulador 33H: 0 0 1 1 0 0 1 1 Registro B 0FH: 0 0 0 0 1 1 1 1 Nuevo acumulador 3FH: 0 0 1 1 1 1 1 1 Este ejemplo concreto garantiza que los cuatro bits de menos peso del acumulador son unos, mientras que los dems permanecen invariables.

26

ORI datos Bits Afectados: Z, S, P, CY, AC

Funcin lgica OR entre el acumulador y un dato Inmediato ORI desarrolla una operacin lgica OR entre el contenido especificado por DATOS y el contenido del acumulador. El resultado se deja en el acumulador. Los bits de acarreo y acarreo auxiliar se ponen a cero. Ejemplo Si el acumulador inicialmente contiene 3CH, la instruccin ORI F0H realiza la siguiente operacin OR bit a bit: Acumulador 3CH: 0 0 1 1 1 1 0 0 Dato inmediato F0H: 1 1 1 1 0 0 0 0 Nuevo acumulador FCH: 1 1 1 1 1 1 0 0

Clases de Microprocesadores Prof. B.Barraza.

Como vemos la instruccin ORI de nuestro ejemplo activa los cuatro bits de menor peso, dejando invariables los restantes.

27

CMC Bits Afectados Cy

Complementar acarreo Si el bit de acarreo es 0, se pone a 1. Si es un 1, se pone a 0.

28

STC

Activar acarreo El bit de acarreo se pone a 1.

DAA Bitsafectados Z,S,P,CY,AC Direccionamiento Registro

Ajuste decimal del acumulador El nmero hexadecimal de 8 bits contenido en el acumulador se ajusta como dos dgitos de 4 bits codificados en binario decimal, segn el proceso siguiente: (1).Si los cuatro bits menos significativos del acumulador representan un nmero mayor que 9, o si el bit de acarreo auxiliar es igual a uno, el acumulador se incrementa en seis unidades. Si no se presentan tales condiciones, el contenido del acumulador no vara. (2).Si los cuatro bits ms significativos del acumulador representan ahora un nmero mayor que 9, o si el bit de acarreo es uno, los cuatro bits ms significativos se incrementan en seis unidades. Asimismo, si no tienen lugar las circunstancias expuestas, el contenido del acumulador no se incrementa. Si hay acarreo de los cuatro bits menos significativos durante el paso (1), el bit de acarreo auxiliar se pone a 1; si no lo hay, se pone a 0. Por otra parte, si hay acarreo de los cuatro bits ms significativos durante el paso (2), se activar el bit de acarreo, ponindose a cero si no se produce acarreo. Esta instruccin se utiliza en las operaciones de suma de nmeros decimales. Es la nica instruccin cuya operacin depende del bit de acarreo auxiliar. Supongamos que queremos realizar una suma decimal de dos nmeros (40 + 80). Ambos bits de acarreo estn a cero. La secuencia de instrucciones podra ser: (1).MVI B,80H (2).MVI A,40H ; Acumulador = 40H (3).ADD B ; Acumulador = 40H + 80H = C0H (4).DAA ; Acumulador = 20H ; Bit de acarreo = 1

29

La instruccin DAA opera de la siguiente forma: 1. Como el contenido de los bits [0 3] del acumulador es menor que 9 y el bit de acarreo auxiliar es cero, el contenido del acumulador no vara. 2. Como los 4 bits ms significativos del acumulador representan un nmero mayor que 9, estos 4 bits se incrementan en 6 unidades, poniendo a uno el bit de acarreo. Acumulador C0H: 1 1 0 0 0 0 +6 60H: 0 1 1 0 0 0 Nuevo acumulador 20H: 0 0 1 0 0 0

0 0 0

0 0 0

Cy=0 Cy=0 Cy=1

En resumen puedes obtener un resultado en DECIMAL a partir de una operaciion HEXADECIMAL

30

NOP

No se realiza ninguna operacin.

31

RLC Bits Afectado Cy

Desplazar el acumulador a la izquierda Rotate Left Carry RLC rota un bit hacia la izquierda todo el contenido del acumulador, transfiriendo el bit de ms alto orden al bit de acarreo y al mismo tiempo a la posicin de menor orden del acumulador. Cy Az Acc ... Ao

Clases de Microprocesadores Prof. B.Barraza.

32

RRC Bits Afectado Cy

Desplazar el acumulador a la derecha Rotate Rigth Carry RRC rota el contenido del acumulador un bit a la derecha, transfiriendo el bit de ms bajo orden a la posicin de ms alto orden del acumulador, adems pone el bit de acarreo igual al bit de menor orden del acumulador. Supongamos que el acumulador

Cy

Az

Acc ...

Ao

33

RAL

Desplazar el acumulador hacia la izquierda a travs del bit de acarreo Rotate Arraund Left RAL hace girar el contenido del acumulador y el bit de acarreo un espacio de un bit hacia la salida (izquierda). El bit de acarreo que es tratado como si fuera del acumulador, se transfiere el bit de menor orden del acumulador. El bit de mayor orden del acumulador se transfiere al bit de acarreo. No tiene operandos.

Cy

Az

Acc ...

Ao

RAR 34

Rotate Arround the Rigth RAR rota el contenido del acumulador y del bit de acarreo 1 bit de posicin a la derecha. El bit de acarreo que es tratado como si fuera parte del acumulador se transfiere al bit de ms alto orden del acumulador. El bit de menor peso del acumulador se carga en el bit de acarreo. No existen operandos en la instruccin RAR.

Cy

Az

Acc ...

Ao

JMP dir 35 Salto incondicional La instruccin JMP DIR altera la ejecucin del programa cargando el valor especificado por DIR en el contador de programa. JC dir 36 La instruccin JC DIR comprueba el valor del bit de acarreo. Si es un 1 la ejecucin del programa contina en la direccin especificada por DIR. Si es un 0 el programa contina su ejecucin normal de forma secuencial. JNC dir 37 Saltar si no hay acarreo La instruccin JNC DIR comprueba el estado del bit acarreo. Si esta a 0 el programa cambia a la direccin especificada por DIR. Si esta a 1 la ejecucin del programa contina normalmente.

JZ dir 38

Saltar si hay cero La instruccin JZ DIR comprueba el bit de cero. Si est a 1 el programa contina en la direccin expresada por DIR. Si est a 0 contina con la ejecucin secuencial normal. Saltar si no hay cero La instruccin JNZ DIR comprueba el valor del bit de cero. Si el contenido del acumulador no es cero (Bit de cero = 0) el programa contina en la direccin especificada por DIR. Si el contenido del acumulador es cero (Bit de cero = 1) el programa contina su ciclo normal. Saltar si hay signo negativo La instruccin JM DIR comprueba el estado del bit de signo. Si el contenido del acumulador es negativo (bit de signo = 1) la ejecucin del programa contina en la direccin especificada por DIR. Si el contenido del acumulador es positivo (bit de signo = 0) contina la ejecucin de la secuencia normal.

JNZ dir 39

JM dir 40

Clases de Microprocesadores Prof. B.Barraza.

JP dir 41

Salta si hay signo positivo La instruccin JP DIR comprueba el estado de bit del signo. Si el contenido del acumulador es positivo (bit de signo = 0) la ejecucin del programa contina con la direccin especificada por DIR. Si el contenido del acumulador es negativo (bit de signo = 1) contina el programa con su ejecucin normal. Salta si la paridad es par La paridad existe si el byte que esta en el acumulador tiene un nmero par de bits. El bit de paridad se pone a 1 para indicar esta condicin. La instruccin JPE DIR comprueba la situacin del bit de paridad. Si esta a 1, la ejecucin del programa contina en la direccin especificada por DIR. Si esta a 0, contina con la siguiente instruccin de forma secuencial. Las instrucciones JPE y JPO son especialmente usadas para comprobar la paridad de los datos de entrada. (Sin embargo con la instruccin IN los bits no actan. Esto puede evitarse sumando 00H al acumulador para activarlos).

JPE dir 42

CALL dir 43 Llamada incondicional CALL guarda el contenido del contador de programa (la direccin de la prxima instruccin secuencial) dentro del stack y a continuacin salta a la direccin especificada por DIR. Cada instruccin CALL o alguna de sus variantes implica una instruccin RET (retorno), de lo contrario el programa podra "perderse" con consecuencias impredecibles. La direccin debe ser especificada como un nmero, una etiqueta, o una expresin. La etiqueta es lo ms normal (El ensamblador invierte los bytes alto y bajo de direccin durante el proceso de ensamblado). Las instrucciones CALL se emplean para llamadas a subrutinas y debemos tener presente que siempre emplean el stack. Llamada si hay acarrero CC comprueba el estado del bit de acarreo. Si el bit est a 1, CC carga el contenido del contador de programa en el stack y a continuacin salta a la direccin especificada por DIR. Si el bit esta a 0, la ejecucin del programa contina con la prxima instruccin de su secuencia normal. Aunque el uso de una etiqueta es lo ms normal, la direccin puede ser especificada tambin como un nmero o una expresin. Llamar si no hay acarreo. CNC chequea el valor del bit de acarreo. Si est en cero CNC carga el contenido de contador de programa en el stack y a continuacin salta a la direccin especificada por la instruccin en DIR. Si el bit est a 1, el programa contina con su secuencia normal. Aunque el uso de una etiqueta es lo ms comn, la direccin puede tambin estar indicada por un nmero o por una expresin. Llamar si hay cero CZ chequea el bit de cero. Si el bit esta a 1 (indicando que el contenido del acumulador es cero), CZ carga el contenido del contador de programa en el stack y salta a la direccin especificada en DIR. Si el bit est a 0 (indicando que el contenido del acumulador es distinto de cero) el programa contina su desarrollo normal. Llamar si no hay cero CNZ chequea el bit de Cero. Si est en 0 (indicando que el contenido del acumulador no es cero), CNZ manda el contenido del contador de programa al stack y salta a la direccin especificada por DIR. Si el bit est a 1 el programa contina su desarrollo normal. Llamar si hay signo negativo CM comprueba el estado del bit del signo. Si el bit esta a 1 (indicando que el contenido del acumulador es negativo) CM manda el contenido del contador de programa al stack y salta a la direccin especificada por DIR. Si el bit es 0 la ejecucin del programa contina con su secuencia normal. El uso de la etiqueta es lo ms corriente, pero la direccin puede especificarse tambin por un nmero o una expresin. Llamar si hay signo positivo CP chequea el valor del bit de signo. Si est a 0 (indicando que el contenido del acumulador es positivo), CP enva el contenido del contador de programa al stack y salta a la direccin especificada por DIR. Si el bit tiene un 1, contina el programa normalmente con la instruccin siguiente. Llamar si la paridad es par. Existe paridad en un byte si el nmero de unos que tiene es par. El bit de paridad se pone a 1 para indicar esta condicin. CPE chequea el valor del bit de paridad. Si tiene un 1, CPE enva el contenido del contador de programa al stack y salta a la direccin especificada por la instruccin en DIR. Si el bit tiene un cero, el programa contina normalmente. Llamar si la paridad es impar CPO chequea el bit de paridad. Si el bit esta a 0, CPO carga el contenido del contador de programa en el stack y salta a la direccin especificada en DIR. Si el bit est a 1 el programa contina su desarrollo normal. Retorno incodicional Se realiza una operacin de retorno incondicional. La instruccin RET echa fuera dos bytes de datos del stack y los mete en el registro contador de programa. El programa contina entonces en la nueva direccin. Normalmente RET se emplea conjuntamente con CALL.

44

CC dir

CNC dir 45

CZ dir 46

CNZ dir 47

CM dir 48

CP dir 49

CPE dir 50

CPO dir 51

RET 52

Clases de Microprocesadores Prof. B.Barraza.

RC 53

Retorno si hay acarreo La instruccin RC comprueba el estado del bit de acarreo. Si tiene un 1 (indicando que hay acarreo) la instruccin saca dos bytes del stack y los mete en el contador de programa. El programa contina en la nueva direccin suministrada. Si el bit es 0, el programa contina en la siguiente instruccin de la secuencia normal. Retorno si no hay acarreo La instruccin RNC comprueba el bit de acarreo. Si est a 0 indicando que no hay acarreo, la instruccin echa fuera del stack dos bytes y los carga en el contador de programa. Si el bit est a 1 contina el ciclo normal.

RNC 54

RZ 55

Retorno si hay cero La instruccin RZ comprueba el bit de cero. Si est a 1, indicando que el contenido del acumulador es cero, la instruccin echa fuera del stack dos bytes y los carga en el contador de programa. Si el bit est a 0, contina el ciclo normal. Retorno si no hay cero La instruccin RNZ comprueba el bit cero. Si est a 0, indicando que el contenido del acumulador no es cero, la instruccin echa fuera del stack dos bytes y los carga en el contador de programa. Si el bit est a 1, contina el ciclo normal. Retorno si hay signo negativo La instruccin RM comprueba el bit de signo. Si tiene un 1, indicando dato negativo en el acumulador, la instruccin echa dos bytes fuera del stack y los mete en el contador de programa. Si el bit tiene 0, contina el programa normal con la siguiente instruccin. Retorno si hay signo positivo La instruccin RP comprueba el bit signo. Si est a 0, indicando que el contenido del acumulador es positivo, la instruccin echa fuera del stack dos bytes y los carga en el contador de programa. Si el bit est a 1 contina el ciclo normal. Retorno si la paridad es par La instruccin RPE comprueba el bit de paridad. Si est a 1, indicando que existe paridad, la instruccin echa fuera del stack dos bytes y los carga en el contador de programa. Si el bit est a 0 contina el ciclo normal. (Existe paridad si el byte que est en el acumulador tiene un nmero par de bits, colocndose el bit de paridad a 1 en este caso). Retorno si la paridad es impar La instruccin RPO comprueba el bit de paridad. Si est a 0, indicando que no hay paridad, la instruccin echa fuera del stack dos bytes y los carga en el contador de programa. Si el bit est a 1, contina el ciclo normal. Es una instruccin CALL para usar con interrupciones. RST carga el contenido del contador de programa en el stack, para proveerse de una direccin de retorno y salta a una de las "ocho" direcciones determinadas previamente. Un cdigo de tres bits incluido en el cdigo de operacin de la instruccin RST especifica la direccin de salto. Esta instruccin es empleada por los perifricos cuando intentan una interrupcin. Para volver a la instruccin en que ha tenido lugar la interrupcin, se debe utilizar una instruccin de RETORNO. Activar interrupciones La instruccin EI pone en servicio el sistema de interrupciones a partir de la siguiente instruccin secuencial del programa. Esta instruccin activa el flip-flop INTE. Se puede desconectar el sistema de interrupciones poniendo una instruccin DI al principio de una secuencia, puesto que no se puede predecir la llegada de una interrupcin. Al final de la secuencia se incluye la instruccin EI que vuelve a habilitar el sistema de interrupciones. (RESET tambin pone fuera de servicio el sistema de interrupciones adems de poner el contador de programa a cero). Desactivar interrupciones Esta instruccin desactiva el flip-flop INTE. Despus de la ejecucin de una instruccin DI, el sistema de "interrupciones" esta sin posibilidad de ponerse en marcha. En aplicaciones que empleen las interrupciones, la instruccin DI se emplea solamente cuando una determinada secuencia no debe ser interrumpida. Por ejemplo, se puede poner fuera de servicio el sistema de interrupciones incluyendo una instruccin DI el principio del cdigo de secuencia. La interrupcin TRAP del 8085 no puede ser puesta fuera de servicio. Esta interrupcin especial esta prevista para serios problemas que pueden presentarse independientemente del bit de interrupcin (fallo de alimentacin, etc.). Entrada La instruccin IN PORT lee los 8 bits de datos que hay en el "PORT" especificado y los carga en el acumulador. El operando debe ser un nmero o una expresin que produzca un valor comprendido entre 00H y FFH. 1. La instruccin IN 2 deposita en el acumulador los datos de entrada del puerto 2.

RNZ 56

RM 57

RP 58

RPE 59

RPO 60

RST 61

EI 62

DI 63

IN port 64

Clases de Microprocesadores Prof. B.Barraza.

OUT port 65

Salida

OUT PORT pone el contenido del acumulador en el bus de datos de 8 bits del puerto seleccionado. El nmero de puertos oscila de 0 a 255 y es duplicado en el bus de direcciones. Es la lgica externa la encargada de seleccionar el puerto y aceptar el dato de salida. El operando (PORT) debe especificar el nmero del puerto de salida seleccionado.

1. La instruccin OUT 2 enva el contenido del acumulador al puerto de salida nmero 2. 66 HLT La instruccin HLT detiene el procesador. El contador de programa contiene la direccin de la prxima instruccin secuencial. Por otro lado los bits y registros permanecen inactivos. Una vez en estado de parada el procesador puede volver a ser arrancado solamente por un acontecimiento externo, es decir una interrupcin. Por tanto debemos asegurarnos que las interrupciones estn en disposicin de ser activadas antes de ejecutar la instruccin HLT. Si se ejecuta HLT estando las interrupciones fuera de servicio, la nica manera de volver arrancar el procesador ser mediante un RESET o a travs de la interrupcin TRAP. El procesador puede salir temporalmente del estado de parada para servir un acceso directo a memoria, sin embargo terminado el acceso directo vuelve al estado de parada. Un propsito bsico de la instruccin HLT es permitir una pausa al procesador mientras espera por la interrupcin de un perifrico.

Colocar datos en stack El contenido del par de registros especificado se guarda en dos bytes de memoria definidos por el puntero de stack. El contenido del primer registro se guarda en la posicin de memoria inmediatamente inferior a la del puntero de stack. El contenido del segundo registro del par se guarda en la posicin de memoria dos unidades inferior al puntero de stack. Si se hace referencia al para de registros PSW, en el primer byte de informacin se guarda el estado de los cinco bits de condicin. El formato de este byte es el siguiente: 67 PUSH pr S Z X A X P X Cy

Sea cual sea el par de registros especificado, una vez que los datos se han guardado, el puntero de pila se decrementa en dos unidades.

1. Supongamos que el registro B contiene 3FH, el registro C contiene 16H y el puntero de pila vale 2030H. La instruccin PUSH B almacenar el contenido del registro B en posicin de memoria 2029H, el contenido del registro C en la direccin de memoria 2028H, y decrementa dos unidades el puntero de stack, dejndolo en 2028H. Grficamente podemos ver el proceso anterior: Antes de PUSH Puntero Stack 2030 Registro B 3F MEMORIA 00 00 00 00 Despus de PUSH Puntero Stack 2028 Registro B 3F MEMORIA 00 16 3F 00

Registro C 16 DIRECCION 2027 2028 2029 2030

Registro C 16 DIRECCION 2027 2028 2029 2030

2. Supongamos ahora que el acumulador contiene 33H, el puntero de pila tiene 102AH, y los bits de condicin de cero, acarreo y paridad estn a uno, mientras que los de signo y acarreo auxiliar estn a cero. La instruccin PUSH PSW

Clases de Microprocesadores Prof. B.Barraza.

Almacena el contenido del acumulador en la posicin de memoria 1028H, y coloca el valor 47H, correspondiente a los citados estados de los bits de condicin, en la posicin 1029H, mientras que en el puntero de pila queda el valor 1028H.

Sacar datos del stack 68 POP pr POP pr copia el contenido de la posicin de memoria direccionada por el stack pointer en el registro de bajo orden del par de registros especificados. A continuacin se incrementa el stack pointer en 1 y copia el contenido de la direccin resultante en el registro de ms alto orden del par. Luego se incrementa el stack pointer otra vez de modo que se apunta al siguiente dato del stack. El operando debe especificar el par de registros BC, DE, HL o PSW. POP PSW usa el contenido de la localizacin de memoria especificada por el stack pointer para restablecer los bits de condiciones.

1. Supongamos que las posiciones de memoria 2028H y 2029H contienen respectivamente 16H y 3FH, mientras que el puntero de pila contiene 2028H. La instruccin POP B Carga el registro C con el valor de 16H de la posicin de memoria 2028H, carga el registro B con el valor 3FH de la posicin 2029H, e incrementa dos unidades el puntero de stack, dejndolo en 2030H. Grficamente podemos ver este proceso:

Antes de POP Despus de POP Puntero Stack 2028 Registro B 00 MEMORIA 00 16 3F 00 Puntero Stack 2030 Registro B 3F MEMORIA 2027 00 2028 16 2029 3F 2030 00 2030 2029 2028 2027

Registro C 16 DIRECCION

Registro C 16 DIRECCION

2. Si las posiciones de memoria 1008H y 1009H poseen respectivamente 00H y 16H, y el puntero de pila vale 1008H, la instruccin POP PSW carga 00H en el acumulador y pone los bits de estado de la siguiente forma: S 0 =16H Z 0 X 0 A 1 X 1 P 1 X Cy 1 0

69

DAD pr Bits sfectados

Suma doble DAD RP suma el valor de un dato de 16 bits contenido en un determinado par de registros (PR) al contenido del par de registros HL. El resultado es almacenado en el par HL. Los operandos (PR) pueden ser B = BC, D = DE, H = HL, SP. Tngase en cuenta que la letra H debe ser empleada para especificar que el par de registros HL debe ser doblado. DAD pone el bit de acarreo a 1 si hay una salida de acarreo de los registros HL. Y adems no afecta a ningn otro bit.

1. Supuesto que los registros D, E, H y L contienen 33H, 9FH, A1H y 7BH respectivamente, la instruccin Realiza la siguiente suma: B C 339F H L A17B H L 051A

Clases de Microprocesadores Prof. B.Barraza.

2. Al ejecutar la instruccin DAD H se duplica el valor del nmero de 16 bits contenido en H L (equivale a desplazar los 16 bits una posicin hacia la izquierda).

70

XCHG

Intercambiar datos entre registros XCHG cambia el contenido de los registros H y L con el contenido de los registros D y E. Si los registros H, L, D y E contienen respectivamente 01H, 02H, 03H y 04H, la instruccin XCHG realiza el siguiente intercambio: Antes de ejecutar XCHG Despues de ejecutar XCHG D 03 E 04 H 01 L 02 D 01 E 02 H 03 L 04

71

XTHL

Intercambiar datos con el stack

XTHL cambia los dos bytes de la posicin ms alta del stack con los dos bytes almacenados en los registros H y L. As XTHL salva el contenido actual del par HL y carga nuevos valores en HL. XTHL cambia el contenido del L con la posicin de memoria especificada por el stack pointer y el registro H es intercambiado con el contenido del SP+1. Si el puntero de pila contiene 40B4H, los registros H y L contienen AAH y BBH respectivamente, y las posiciones de memoria 40B4H y 40B5H contienen CCH y DDH respectivamente, la instruccin Despus de XTHL Antes de XTHL Puntero Stack 40B4 Registro H AA MEMORIA 00 CC DD 00 Puntero Stack 40B4 Registro H DD MEMORIA 00 BB AA 00

Registro L CC DIRECCION 40B3 40B4 40B5 40B6

Registro L BB DIRECCION 40B3 40B4 40B5 40B6

72

SPHL

Cargar el puntero de stack desde los registros H y L Los 16 bits contenidos en los registros H y L reemplazan el contenido del puntero de stack. El contenido de los registros H y L permanece invariable. Si los registros H y L contienen respectivamente 50H y 6CH, la instruccin SPHL carga el puntero de stack con el valor 506CH.

Fuente: Apendice A1 de instrucciones del 8085: http://es.scribd.com/doc/81757060/Instrucciones-Del-8085

Clases de Microprocesadores Prof. B.Barraza.

6.- EJERCICIOS DE PROGRAMACIN LENGUAJE ASSEMBLER 8085.


Para programar en lenguaje assembler, se debe dominar las 74 instrucciones del microprocesador, esto es el requicito mnimo para ensamblar dado que existe una infinidad de problemas que se pueden plantear dependiendo de las necesidades de cada caso. Una de las soluciones mas elementales a la hora de plantear un problema en programacin assembler es crear la lgica por medio de un fluxograma. Por ende recomiendo hacer ejercicios de lgica a travz de esta herramienta. Existen programas para ensamblar del m-8085, que sin lugar a dudas os ayudarn a tener una programacin mas flexible y natural. A continuacin dejo una serie de ejercicios que he encontrado en internet, material del profesor y practicas que he querido transcribir.

Fig.5.-Simulador 8085 SIMULADOR ASSEMBLER (Laboratorio 1)

Una herramienta muy poderosa para simular el ensamblador 8085 es el SIM85. Instalado este programa, ir a: archivo/ Editor ASM. Llamamos al editor, alli creamos un nuevo archivo (Copiamos cualquier ejercicio o creamos un programa) ensamblamos haciendo click en estos dos iconos. El primero ensambla, generado un texto si fue compilado correcto o incorrectamente. El segundo icono llama a ensamblar y simular. En caso de problemas se genera un texto indicando el error.

Clases de Microprocesadores Prof. B.Barraza.

NEMONICO EXP. GRAF. FLAGS INSTRUCCIONES DE TRANSFERENCIA

MOV r1,r2 MOV r,M MOV M,r MVI r,byte MVI M,byte LXI rp,doble LDA addr STA addr LHLD addr SHLD addr LDAX rp STAX rp XCHG ADD r ADD M ADI byte ADC r ADC M ACI byte SUB r SUB M SUI byte SBB r SBB M SBI byte INR r INR M DCR r DCR M INX rp DCX rp DAD rp DAA ANA r ANA M ANI byte XRA r

(r1)(r2) (r)[(HL)] [(HL)] (r) (r)byte [(HL)] byte (rpl)1 byte (rph)2 byte (A)[addr] [addr](A) (L)[addr] (H)[addr+1] [addr](L) [addr+1](H) (A)[(rp)] [(rp)](A) (H)(D) (L) (E) (A)(A)+(r) (A)(A)+[(HL)] (A)(A)+byte (A)(A)+(r)+CY (A)(A)+[(HL)]+CY (A)(A)+byte+CY (A)(A)-(r) (A)(A)-[(HL)] (A)(A)-byte (A)(A)-(r)-CY (A)(A)-[(HL)]-CY (A)(A)-byte-CY (r)(r)+1 [(HL)][(HL)]+1 (r)(r)-1 [(HL)][(HL)]-1 (rp)(rp)+1 (rp)(rp)-1 (HL)(HL)+(rp) Ajuste BCD de (A) (A)(A) and (r) (CY)0, (AC)1 (A)(A) and [(HL)] (CY)0, (AC)1 (A)(A) and byte (CY)0, (AC)1 (A)(A) xor (r)

NINGUNO NINGUNO NINGUNO NINGUNO NINGUNO NINGUNO NINGUNO NINGUNO NINGUNO NINGUNO NINGUNO NINGUNO NINGUNO TODOS TODOS TODOS TODOS TODOS TODOS TODOS TODOS TODOS TODOS TODOS TODOS Z, S, P, AC Z, S, P, AC Z, S, P, AC Z, S, P, AC NINGUNO NINGUNO CY NINGUNO TODOS TODOS TODOS TODOS

INSTRUCCIONES ARITMTICAS

INSTRUCCIONES LGICAS.

Clases de Microprocesadores Prof. B.Barraza.

XRA M XRI byte ORA r ORA M ORI byte CMP r CMP M CPI byte

(A)(A) xor [(HL)] (A)(A) xor byte (A)(A) or (r) (A)(A) or [(HL)] (A)(A) or byte (A)-(r) (A)-[(HL)] (A)-byte

TODOS TODOS TODOS TODOS TODOS TODOS TODOS TODOS

NEMONICO EXP. GRAF. FLAGS INSTRUCCIONES DE ROTACIN Y FLAGS

RLC RRC RAL RAR CMA CMC STC

Rotacion izqda Rotacin dcha Rot. izqda. con CY Rot. dcha. con CY Comp. A1 de (A) Invierte (CY) (CY)1

CY CY CY CY NINGUNO CY CY

INSTRUCCIONES DE BIFURCACIN ccc=NZ salto si no cero (Z=0), ccc=Z salto si cero (Z=0), ccc=NC salto si no acarreo (CY=0), ccc=C salto si acarreo (CY=1) , ccc=PO salto si paridad impar (P=0), ccc=PE salto si paridad par (P=1), ccc=P salto si positivo (S=0), ccc=M salto si negativo ( S=1 )

(PC)addr Si ccc=1, (PC)addr; Si ccc=0, (PC)(PC)+3 CALL addr Guarda PC en la pila (PC)addr Cccc addr Si ccc=1, guarda PC en la pila, (PC)addr; Si ccc=0, (PC)(PC)+3 RET Recupera PC de la pila Rccc Si ccc=1, recupera PC de la pila; Si ccc=0 (PC)(PC)+1 RSTn (PC)n x 8 PCHL (PC)(HL) JMP addr Jccc addr PUSH rp [(SP)-1](rpl) [(SP)-2](rph) (SP)(SP)-2 [(SP)-1](A) [(SP)-2](RE) (SP)(SP)-2 (rph) [(SP)] (rpl) [(SP)+1] (SP)(SP)+2 (RE) [(SP)] (A) [(SP)+1] (SP)(SP)+2 (L) [(SP)] (H) [(SP)+1] (HL) (SP) (A)[puerta] [puerta](A)

NINGUNO NINGUNO NINGUNO NINGUNO

NINGUNO NINGUNO

NINGUNO NINGUNO NINGUNO

INSTRUCCIONES DE MANEJO DE LA PILA.

PUSH PSW

NINGUNO

POP rp

NINGUNO

POP PSW

NINGUNO

XTLH SPLH IN puerta OUT puerta

NINGUNO NINGUNO NINGUNO NINGUNO

INSTRUCCIONES DE ENTRADA Y SALIDA.

Clases de Microprocesadores Prof. B.Barraza.

INSTRUCC. DE CONTROL DE INTERRUPCIONES

EI DI HLT NOP RIM SIM

Habilita interrupciones Inhabilita interrupciones Para el microprocesador No hace nada Lee linea serie y estado interrupciones. Escribe en linea serie y Programa interrupciones.

NINGUNO NINGUNO NINGUNO NINGUNO NINGUNO NINGUNO

6.- EJERCICIOS EN LENGUAJE ASSEMBLER. Para manejarnos en la programacin ASSEMBLER, debemos tener claro con cuales herramientas disponemos, operaciones, rutinas, tiempo de ejecucion. Conocer las limitantes y saber desarrollar el camino mas optimo para solucionar un problema.

LXI STAX LDAX DCX INX MVI STA LDA DCR INR MOV

Si no eres capaz de diferenciar entre STAX y STA ests en serios problemas.... Ejemplo1:Este programa Suma 1+1 en ASSEMBLER .ORG 0 MVI A,1H MVI B,1H ADD B HLT

Clases de Microprocesadores Prof. B.Barraza.

1.-Ingresa el valor del acumulador en la direccion 4200H

.ORG 0 MVI A,10H STA 4200H HLT

Analisis: Este programa carga 10H al acumulador enseguida es almacenado en la direccion especificada por STA. Fluxograma: Cargar acumulador Almacenar FIN. 2.- Creando mi primer COUNTER de 10 a 00H en ciclo.
.ORG 0 MVI C,10H LOOP: DCR C JNZ LOOP HLT

Analisis: El counter es una herramienta de ciclo finito, de gran utilidad se usa para recorrer determianda cantidad de posiciones en el registro, complementado con un condicionante para el fin de su ejecucin. En general se usa en conjunto a la instreuccion JNZ, JZ, CMP etc. Elementos condicionantes para efectuar un salto, comparar o logicos. Fluxograma: Inicializar -> Origen 0, Counter en 10 ->Decrementar Counter-> Si: es igual a 0 FIN, No: Regresar a decrementar. 3.- Permite sumar valores en el acucmulado
.ORG 0 MVI A,00H ;inicializo Acumulador MVI C,10H ; dato2 o ounter MVI B,02H ; dato 1 o tabla LOOP: ADD B ;permite sumar a=a+b

LXI H,1000H ;en esta direecion se almacena informacion del programa

DCR C JNZ LOOP HLT

; contador

Clases de Microprocesadores Prof. B.Barraza.

4.- Ingresa los valores de forma regresiva de una tabla dada (Laboratorio 2) El programa debe realizar lo siguiente: Se tiene una tabla de 10 datos numericos almacenados en formaascendentes a partir de la direccion de memoria 1000h. Se desea construir una segunda tabla a partir de estos datos y almacenarlos a partir de la posicion de memoria 1010h, pero en forma inversa, es decir, estos datos deberan quedar en forma descendente Desarrollo:
data 1000H dB 1h,2h,3h,4h,5h,6h,7h,8h,9h,10h .ORG 0 MVI A,0 MVI L,9 ;COUNTER LXI B,1009H ;POSICIONAMIENTO LXI D,1010H ;POSICIONAMIENTO XX: LDAX B STAX D DCX B INX D DCR L JNZ XX HLT

Descripcin: Existen muchas maneras de crear lo que se nos pide. Visualicemos 2 tablas llamadas BC y DE. En BC ya se han ingresado datos y en DE esos datos se almacenarn de forma inversa. Ambos con el mismo tamao N. La manera que abord este problema fue empezar a recorrer en forma decreciente la tabla BC y su informacin se almacenaba en el acumulador a mismo tiempo que se transfera este dato a la tabla DE.

5.-Suma en el contador la cantidad de unos que hay en una tabla.


LXI H,2000H MVI C,0 MVI B,10 OTRO: MOV A,M CPI 1

Clases de Microprocesadores Prof. B.Barraza.

JNZ XX INR C XX: DCR B JZ FIN INX H JMP OTRO HLT

Clases de Microprocesadores Prof. B.Barraza.

ADICION DE 2 NUMEROS DE 8 BITS (Material profe)

Clases de Microprocesadores Prof. B.Barraza.

MULTIPLICATION OF TWO 8 BITS NUMBERS NUMBER IN AN ARRAY OF DATA

LARGEST

Clases de Microprocesadores Prof. B.Barraza.

SMALLEST NUMBER IN AN ARRAY OF DATA

Clases de Microprocesadores Prof. B.Barraza.

ARRANGE AN ARRAY OF DATA IN DESCENDING ORDER

Clases de Microprocesadores Prof. B.Barraza.

HEX TO BCD CONVERSION

Clases de Microprocesadores Prof. B.Barraza.

Clases de Microprocesadores Prof. B.Barraza.

7.- OPERACION INTERNA DE UN MICROPROCESADOR 7.1 Ejecucin de un Programa. Hasta ahora se estudiaron la arquitectura de una CPU, el formato de las instrucciones y los distintos tipos de instrucciones. Veremos ahora cmo se ejecuta un programa almacenado en memoria.

Un programa almacenado en memoria est listo para ser ejecutado por el microprocesador. Para ser ejecutado, es necesario cargar el PC con la direccin de la primera instruccin a ser ejecutada. Luego, el PC se incrementa automticamente recorriendo secuencialmente los sucesivos lugares de memoria donde se halla el programa.

7.2 Ciclos de operacin. Hay dos operaciones fundamentales que realiza un procesador: - Bsqueda de la instruccin: en la cual el procesador busca el cdigo de operacin(FETCH). - Ejecucin de la instruccin: en la cual el procesador ejecuta la operacin determinada por la instruccin. Un procesador se encuentra siempre haciendo una de las dos operaciones anteriores. 4.2.1.-Ciclo de instruccin Es el tiempo total, medido en nmeros de perodos de reloj, de duracin de un ciclo de bsqueda ms uno de ejecucin de la instruccin teniendo en cuenta los sucesivos accesos a memoria en el caso de ser una instruccin de ms de un byte. 4.2.2.-Ciclo de mquina Es el tiempo, medido en nmeros de perodos de reloj de duracin de una operacin de lectura, de escritura o de bsqueda (Fetch) de una instruccin. Un ciclo de instruccin est compuesto por uno o varios ciclos de mquina (M1, M2, M3,M4), dependiendo del tipo de instruccin. Se denomina M1 al ciclo de bsqueda, pues siempre es el primero de cada ciclo de instruccin. Los ciclos de mquina ms comunes son: Fetch, Memory Read, Memory Write, I/O Read, I/O Write, INA, etc.

TIMING DIAGRAM for various machine cycles

Clases de Microprocesadores Prof. B.Barraza.

Los ciclos de la mquina son las operaciones bsicas realizadas por el procesador, mientras que las instrucciones se ejecutan. El tiempo necesario para realizar cada ciclo de la mquina se expresa en trminos de Tstates. Un T-estado es el perodo de tiempo de un ciclo de reloj del microprocesador.The various machine cycles are (los diferentes ciclos de la mquina son):

1. Opcode fetch ...... ....4 / 6 T 2. Memory Read .... 3 T 3. Memory Write . 3 T 4. I/O Read 3 T 5. I/O Write 3 T 6. Interrupt Acknowledge 6 / 12 T 7. Bus Idle.. 2 / 3 T
EJERCICIO ( TIPO PRUEBA ) Se tiene un crital de 6,1414Mhz determinar el Tiempo de ejecucion del programa

MVI B,104 LXI H,1000 DEI: DCX H MOV A,B ORA H JZ FIN JNZ DEI FIN: HLT

4T 10T ;Inicializa el contador aqui 1000=N 4T 4T 4T 7/10T 7/10T 4T 10T(N-1) 7T(N-1)+10T 12TN

TT= 4T+10T+12T*N +(N-1)*7T + (N-1)*10T +10T+4T TT=29N-11T

T=

Clases de Microprocesadores Prof. B.Barraza.

Programa de retardo
Ejemplo 1 de tiempo de retardo MVI A,03 xx: DCR A JNZ XX next inst. HLT ; 7T Aqui N=03 ; 4T ; 10T/7T Salta ocupando 10T ; ...... ; 4T

7T 4T 10T
N=2

4T 10T
N=1

4T 7T 4T
N=0

N N-1

Tiempo Total= 7T+ 4TN +10T(N-1) +7T +4T Tiempo Total = 7T+ 4TN +10TN -10T+7T+4T =8T+12TN N=Tiempo Total -8T / 12T

Clases de Microprocesadores Prof. B.Barraza.

Ejemplo 2 de tiempo de retardo

START

NO N1

SI

N2

N1=N2

NO N2=0 SI N1=0 NO

SI TT= 4T+ N1* 7T +N1X + N1*4T +(N1-1)10T+ 7T+4T X=N2*4T+(N2-1)*10T+7T

Clases de Microprocesadores Prof. B.Barraza.

EJERCICIO PROPUESTOS PARA EL PRIMER EXAMEN

1. 2.

Listar y explicar los modos de direccionamiento usados en el uP 8085. Dibujar el diagrama de flujo de la siguiente operacin.

Sumar A2H con 18H, si la suma es mayor que FFH mostrar el valor 01 en la puerta 5H, otro caso mostrar en la salida 00H.
.ORG 0 MVI MVI MVI MVI MOV ADD CPI JNC MVI OUT A, 00H B,00H C,A2H D,18H A,C D FFH LOOP A,01 00H

LOOP: MVI A,01H OUT 05H HLT

2.-Encender los 8 led en forma serial de desde izquierda a derecha

3.-Que operacin se realiza con cada una de las instrucciones indicadas; MOV A, L MVI D, 75H ADD C SUB L OUT 00H ANI 45H DCR B CMP E XRA L CMA HLT

Clases de Microprocesadores Prof. B.Barraza.

3. Mostrar los contenidos de cada registro cuando las instrucciones son ejecutadas. Inicialmente todos los registros estn en 0. a. MVI A, 56H MVI B, 28H MOV A, B MOV C, A MOV H, C HLT b. MVI B, 28H ORI 45H SUB B MOV C, A MOV E, C HLT c. MVI B, 28H CMA XRA B MOV L, B ADD L HLT

4. Especificar los contenidos de cada registro en un uP 8085, cuando se ejecutan las siguientes instrucciones. Asuma que todos los registros inicialmente estn en 0. a. MVI B, A9H MVI C, 34H ADD B SUB C MOV D, A MVI A, 7DH ORA D MOV H, A CMA XRA H MOV C, H MOV A, D HLT b. MVI A, 03H RLC RAR MVI E, 76H CMP E MOV B, A MOV H, B MOV L, H SUI 21H ANA L MOV C, L INR C HLT c. MVI C, D1H INR A ANA C MOV D, C ANA D ADI 4CH MOV L, A DCR L XRI 24H ORA L DCR L MOV L, A HLT

5. Especificar los contenidos de registros y banderas afectados, cuando las siguientes instrucciones se ejecutan. Asuma registros inicialmente en 0 a. MVI L, 04H ADI 2BH SUB L MOV B, A RAL B CMP B HLT b. CMA XRI 56H MOV B, A MOV D, B ADD D ORA D HLT c. MVI C, 71H MVI D, 29H MOV A, D SUB D ADD C ANA D HLT d. MVI H, 8AH DCR H DCR H ORI 9DH ANI 36H SUB H HLT

6. Especificar los contenidos del acumulador y bit status CY para las siguientes instrucciones. Explicar el significado del carry flag, si est en 1. a MVI A, B7H RLC RLC RLC RLC HLT b MVI A, B7H RAL RAL RAL RAL HLT c. MVI A, B7H RRC RRC RRC RRC HLT d. MVI A, B7H RAR RAR RAR RAR HLT

8. Escribir un programa 8085 para; a) limpiar Acc. b) sumar 47H c) restar 92h d) XOR 64H d) OR 38H e) AND 2BH f) mostrar resultado final 9. Write 8085 assembly language to a) load 00h in accumulator b) decrement the accumulator by 1 four times c) transfer the answer to others register available in 8085 microprocessor.

Clases de Microprocesadores Prof. B.Barraza.

10. Escriba 8085 en lenguaje ensamblador para a) cargar 00h en el acumulador b) disminuir el acumulador 1 cuatro veces c) transferir la respuesta a otros registran disponible en 8085 microprocesador. 11. Escribir instrucciones para cargar el 65H nmero hexadecimal en el registro C y 92H en el acumulador. Muestra el nmero de 65H en el puerto 07H y 92H a 08H. 12. Indique los registros pares

13. Mostrar los contenidos de registros y localizaciones de memorias, que son afectados por la ejecucin de las siguientes instrucciones (Seguimiento de programa ejecutndose paso a paso). A MVI C, FFH LXI H, 2070H MOV M, C LXI D, 2070H LDAX D LDA 2070H HLT 14. Identificar los contenidos de los registros, localizacin de memoria 2355H y las banderas, cuando se ejecutan las siguintes instrucciones. A LXI H, 2355H MVI M, 8AH MVI A, 76H ADD M STA 2355H INR M ORA M HLT 15. Especificar los contenidos de registros al final del programa MVI M, 55H LXI D, 3001H MOV A, M STAX D INX H MVI M, A8H LDA 2002H DCX H ADD M STA 3002H LXI B, 2001H INX B STAX B XCHG ANA M HLT H L S Z AC P CY 2355H C D E H L Memory

LXI H, 2001H

Clases de Microprocesadores Prof. B.Barraza.

16. Tres bytes de datos AAH, BBH, CCH se almacenan en posiciones de memoria 2000H a 2002h. Transfiera todo el bloque de datos a nuevas ubicaciones a partir de 3000H. 17. Datos byte 22H, A5H, B2H, 99H, 7FH y 37H se almacenan en una ubicacin de memoria a partir de 2000H ubicacin. La transferencia de los datos a la ubicacin 3000H a 3005H en orden inverso. (22H a 37H 3005H y 3000H a). 18. Escriba un programa para agregar datos byte 1AH, 32H, 4FH, 12H, 27H almacenados en 2000H ubicacin. Muestra la suma en 3000H ubicacin. Utilice el registro pares HL y DE como puntero de memoria para transferir un byte desde y hacia la memoria de registro.

19. Escribir un programa para restar dos bytes a la vez y almacenar el resultado en un orden secuencial en la posicin de memoria a partir de 3000H. Suponga que el F9H datos, 38H, A7H, 56H, A2H, F4H se almacenan a partir 2000H direcciones. Utilice el registro par BC y HL como puntero de memoria para transferir un byte de la memoria en el registro.

20. Identificar el contenido de los registros, localizacin de memoria 2070H y flag Z cuando las siguientes instrucciones son ejecutadas A MVI A, 7FH ORA A CPI 12H LXI H, 2070H MVI M, 7FH CMP M 21. Definir el mnemonic, cdigo de mquina, tamao de la palabra y operacin de las siguientes instrucciones: a. b. c. d. e. f. g. 22. MVI B, 95H MVI D, 1FH MOV A, L ADD B ANI 0FH STA 2070H HLT Ensamblar el siguiente programa, partiendo de la direccin E000h .org E000H MVI B, 4FH MVI C, 78H MOV A, C ADD B OUT 07H INR B ANA B CMA RAL Clases de Microprocesadores Prof. B.Barraza. Z HL 2070H

HLT 23. Ensamblar el siguiente programa, partiendo de la direccin 1000h .org 1000H LXI H, FFF0H MVI M, 34H DCX H MVI M, 78H LDA FFF0H SUB M STA 300FH INR M LXI B, FFEFH STAX B CMP M HLT

24.- Especificar los contenidos de los registros, localizaciones de memoria y registro de banderas de las siguientes instrucciones, cuando son ejecutadas. Asuma que los contenidos estan en 0 antes de la ejecucin de las instrucciones 1. (a) A MVI A,81H MVI B,29H MOV C,A INR B LXI 300AH DCR L RLC STAX B HLT B C H L M location 2A81H CY

Clases de Microprocesadores Prof. B.Barraza.

(b)

A MVI A,82H LXI B,D912 LXI D,2145H LXI H,BA2CH ADI 96H RAR DAD B XCHG HLT 18H 8C 82

CY

D9 D9 D9

12 12 12 BA 26 12 12 45 45 BA 93 21 2C 45 45 1 0 1 1

25.- Cuantas veces el siguiente loop, ser ejecutaado

LXI B, 0010H LOOP : DCX B MOV A,B ORA JNZ LOOP HLT

Clases de Microprocesadores Prof. B.Barraza.

26.- Especificar los contenidos de las posiciones de memoria 2040H a 2044H, despus de la ejecucin de las siguientes instrucciones

LXI H,2040H MVI B,05H MVI A,0AH STORE: MOV M,A INR A INH DCR B JNZ STORE HLT

GUIA 2 DE EJERCCIOS

4. Escribir las instrucciones para cargar el nmero ABCDH en el registro par BC usando las opciones de las instrucciones LXI y MVI. Explicar brevemente la diferencia entre las 2 instrucciones.

5. La localizacin de memoria 3070H tiene el dato 14H. Escribir las instrucciones para transferir el byte de datos al acumulador usando 3 tipos de diferentes instrucciones: MOV,LDAX y LDA. Explicar brevemente el uso de las 3 ionstrucciones

6. El siguiente block de datos esta cargado en localizaciones de memoria desde 1055H a 105AH. Escribir un programa para transferir los datos anteriores a partir de la localizacin 2080H DATOS (H): 31, 23, 78, 1A, 2D, 69 7. Considerando la informacin del programa 6, ahora escribir un programa para transferir los datos en forma inversa (Ej: el dato de la localizacin 1055H es copiado a la posicin 2085H, el dato de la localizacin 1056H es copiado a la posicin 2084H y as sucesivamente. Cuales son los contenidos de la posicin 2080H a 2085H, despus de la ejecucin del programa?

Clases de Microprocesadores Prof. B.Barraza.

LABORATORIO 1.Ensamblar el siguiente programa

,DEFINE TAMAO VALOR .ORG 0 LXI MOV INX MOV DCR H,TAMAO B,M H A,M B LOOP: INX CMP JNC MOV AHE: DCR JNZ STA HLT .DATA 100H DB 1. 100H 430H

H M AHE A,M B LOOP VALOR

10,3,12,23H,18H,15,6,34H,9,22H,18H

Desemsamblar el siguiente cdigo de un programa para el procesador 8085

0E 00 3A 36 10 47 3A 37 10 80 D2 0E 00 0C 32 38 10 79 32 39 10 76 TRABAJO EN LABORATORIO 1.Editar el programa 1. Ensamblarlo usando el simulador SIM85. Compararlo con el programa ensamblado en el Pre-Informe 2.Cargar el programa objeto o ejecutable en su simulador. Ejecutar elprograma paso a paso e ir verificando el valor de los registros y posiciones de memoria, que son afectados por las instrucciones

Clases de Microprocesadores Prof. B.Barraza.

INFORME FINAL 1.Elaborar informe final. De conclusiones de la experiencia realizada

EJERCICIOS RESUELTOS DE ENSAMBLADOR 1.- 1. Ejemplo de uso de instrucciones de desvo y de control. La instruccin MOV A,B no afecta ningn flag , por lo tanto, no afecta el flag de zero (Z). Si lo hace la instruccin DCR C. Label volta: Instruccin MVI C,10h DCR C JZ fim MOV A,B JMP volta HLT Comentario Carga el registro C con el valor 10 h Decrementa contenido del registro C Si el resultado de DCR C fuese ZERO, desva para "fim" Copia contenido de B en A. No afecta ningn flag. Desvo incondicional para "volta". Esta instruccin para el procesamiento del programa

fim:

2. Ejemplo similar al anterior, pero usando la instruccin JZ direccin y JMP direccin. Label Instruccin MVI A,07h MVI B,00h INC B CMP B JNC volta HLT Comentario Carga registro A con el valor 07 h Carga registro B con el valor 00 h. Incrementa en "1" el contenido del registro B Compara contenido de B con el contenido de A, sin alterar valor de A. Desva para "volta", si el flag CY = 0. CY =0 si A > B o A = B Para el procesamiento cuando CY = 1, o sea, cuando B=8 (A < B).

volta:

3. Ejemplo usando comparacin entre registros (A e B). La operacin de comparacin y volta es repetida hasta que el valor de B alcance el valor 08h, entonces el flag de carry es SETEADO (CY=1) haciendo que el procesamiento se termine

Label volta:

fim:

Instruccin MVI C,10h DCR C MOV A,B JNZ volta HLT

Comentario Carga el registro C con el valor 10 h Decrementa contenido del registro C Copia contenido de B en A. No afecta ningn flag. Si el resultado de DCR C no fue ZERO, desva para "volta" Esta instruccin para el procesamiento del programa

Clases de Microprocesadores Prof. B.Barraza.

4. Ejemplo similar al anterior, pero usando la instruccin JC direccin a diferencia de JNC direccin. Label Instruccin MVI A,07h MVI B,00h volta: INC B CMP B JC fim JMP volta HLT Comentario La operacin de comparacin y volta es repetida hasta que el valor en B alcance el valor 08h, cuando entonces el flag de Carry CY es 1, haciendo que el procesamiento se detenga saltando para fim, donde se encuentra la instruccin HLT

fim: .

5. Programa que realiza la multiplicacin de 4 por 3. Es usada a instruccin ADI dato 8

6. Otra versin de programa que hace la multiplicacin de 4 por 3. La instruccin ADI dato8 substituida por la instruccin ADD B. El acumulador va a asumir los valores 00 h, 04 h, 08 h e, finalmente, 0C h, esto es 12 decimal

7. Programa que hace la multiplicacin de 4 por 3 usando una subrutina.

Clases de Microprocesadores Prof. B.Barraza.

8. Programa que genera una cuenta ascendente en hexadecimal, de 00 h a FF h y enva el resultado para la salida 1

Obs.: En este programa el acumulador se inicia con el valor 00h y se termina cuando el acumulador vuelve al valor 00h, despus de pasar por todos os valores de 00 a FFh

9. Subrutina de atraso de 1 ms. Se hace la suposicin de que un programa llama a subrutina denominada atraso, que es entregada posteriormente. Se asume un tiempo de 1 s para cada estado. _____ _____ CALL atraso _____ _____

Clases de Microprocesadores Prof. B.Barraza.

10. Subrutina de atraso de 10 ms. Se supone un tiempo de 1 s para cada estado.

Clases de Microprocesadores Prof. B.Barraza.

GUIA 3 DE MICROPROCESADOR 1. Cite todas las instrucciones posibles a partir de la instruccin genrica MOV A, r. 2. Si los registros H e L contienen respectivamente, los valores 40 h e 50 h, cual es el significado de la instruccin MVI M, 08h? 3. A qu grupo de instrucciones pertenece la instruccin MVI M, 08h? 4. Explique en pocas palabras como funciona a pila en el 8085. Muestre a travs de un mapa de memoria, a evolucin de la pila cuando se ejecutan las siguientes instrucciones, en la secuencia mostrada: PUSH B, PUSH D, ADD B, PUSH PSW, ADD D, POP PSW, OUT 90, POP D, POP B Valores iniciales: SP = 20C0 h, A = 33 h, B = 1C h, C = 4B h, D = 10 h, E = FE h e F = 3D h 5. Muestre a travs de un mapa de memoria, la evolucin de la pila cuando se ejecutan las siguientes instrucciones en la secuencia mostrada: PUSH PSW, PUSH B, CALL SUMA, (RET), MOV B, A, POP B, POP PSW Valores iniciales: SP = 2090 h, A = 53 h, B = 0F h, C = 05 h, D = 12 h, E = 01 h e F = 55 h Direccin de la llamada de subrutina CALL SUMA: 2020 h 6. Muestre la evolucin de la pila en la ejecucin de la instruccin a seguir: a) PUSH B, PUSH D, PUSH H, LDA 00FF h, POP H, POP D e POP B, sabiendo que o valor inicial de SP es 38FC h y que los registros B, C, D, E, H e L contienen los valores 08 h, 1C h, 2A h, 06 h, FE h e 3Dh. b) CALL 033CH, ADD B e RET (ADD B e RET estn dentro de la sub-rutina que se inicia en la posicin 033CH), en las mismas condiciones del ejercicio anterior, suponiendo de que la direccin de la instruccin CALL 033C h es 0038 h. 7. Considere o programa abajo en mnemnico, y responda las preguntas siguientes, sabiendo que a subrutina en la direccin 0200 h provoca un retardo de 1ms e afecta el registro B.

Clases de Microprocesadores Prof. B.Barraza.

(b) Disea una tabla mostrando las direcciones y contenido de la pila despus de la ejecucin de la instruccin CALL 0200h. (c) Cuales son los valores enviados por la puerta de salida 01? (d) Muestre lo que debe ser realizado si el registro B, fuese usado en lugar del registro C 8. Escriba un programa que produzca un retardo de 1 s, sabiendo que el uP 8085 es accionado por un cristal de 6 MHz. 9. Escriba a partir de la direccin 4050 h, una sub-rutina que produzca un retardo de 0.5 ms, aproximadamente. Suponga que la frecuencia del cristal del 8085 sea de 4,096 MHz. 10. Escriba un programa (usando bytes inmediatos para los datos) que sume los decimales 500 e 650. 11. Describa las etapas de los ciclos (FETCH EXECUTE) de las instrucciones a seguir y explicar lo que ocurre con las seales de control involucradas, los buses de direccin y datos a) MOV B, M b) LXI D, 4050 h c) MOV E, B. 12. Haga comentarios de cada lnea del programa siguiente: Explique cul es la finalidad del programa Complete las direcciones.

4.2 Ejemplos de Programas en Assembly La presente seccin muestra dos ejemplos de programacin para simular en laboratorio Ejemplo 1: Realizar un programa que ejecuta una cuente ascendente en hexadecimal de 00h a 60 h.

Clases de Microprocesadores Prof. B.Barraza.

Ejemplo 2: Realice un programa que ejecuta, de forma ininterrumpida una cuenta en hexadecimal ascendente de 00h at 60h seguida de una cuente en hexadecimal descendente de 60h at 00h.

4.3 Ejercicios Propuestos 1. Realice un programa de un contador decimal de 00 a 60. 2. Realice un programa de un contador descendente en hexadecimal de 60 h at 00 h. 3. Repita o problema anterior para una cuenta en decimal de 60 at 00. 4. Realice un programa que selecciona y muestra en un display el mayor nmero contenido en una tabla en memoria. La tabla contiene nmeros aleatorios y tiene inicio en la direccin 2050h y termina en la direccin 205Fh. 5. Repita el problema anterior, seleccionando e mostrando el menor nmero.

Clases de Microprocesadores Prof. B.Barraza.

6. Realice un programa que selecciona y muestra en el display los nmeros impares contenidos en una Tabla inserta en la memoria. La tabla contiene nmeros aleatorios y tiene inicio en la direccin 2050h e termina en la direccin 205Fh. Use una subrutina de atraso con D = 02 h entre los valores que se mostraran en el display. 7. Realice un programa que haga la ordenacin en orden creciente de una tabla conteniendo 16 Nmeros de 8 bits. Los nmeros ya estn en la memoria a partir de la direccin 2050h y deben ser mantenidos en la misma tabla, pero ordenados. 8. Adapte el programa del problema 7 para ordenar los nmeros en orden decreciente. 9. Realice un programa que selecciona y muestra en el display los nmeros mayores o iguales a 20h y menores que 50h, de una tabla con 16 nmeros, comenzando en la direccin 2050 h. Sugestin de tabla: 05h, 15h, 65h, 95h, 35h, 20h, 50h, 42h, 72h, 10h, 60h, 45h, 33h, 25h, 48h, 49h 10. Repita o problema 9, mostrando os nmeros fuera del intervalo. 11. Ejecute las instrucciones dadas a continuacin, indicando la direccin de cada instruccin y contenido de los registros registradores pedidos e de las banderas de carry e de zero, despus de la ejecucin de la instruccin indicada

Clases de Microprocesadores Prof. B.Barraza.

5.- PUSH/POP/PSW/CALL
75 PUSH

Stack and Subroutines


Given that the stack grows backwards into memory, it is customary to place the bottom of the stack at the end of memory to keep it as far away from user programs as possible. In the 8085, t he stack is defined by setting the SP (Stack Pointer) register. LXI SP, FFFFH This sets the Stack Pointer to location FFFFH (end of memory for the 8085). The Size of the stack is limited only by the available memory

Saving Information on the Stack Information is saved on the stack by PUSHing it on. It is retrieved from the stack by POPing it off. The 8085 provides two instructions: PUSH and POP for storing information on the stack and retrieving it back. Both PUSH and POP work with register pairs ONLY.
The PUSH Instruction PUSH B (1 Byte Instruction) Decrement SP Copy the contents of register B to the memory location pointed to by SP Decrement SP Copy the contents of register C to the memory location pointed to by SP B 12 C F3 FFFBH FFFCH FFFDH FFFEH FFFFH POP The POP Instruction POP D (1 Byte Instruction) Copy the contents of the memory location pointed to by the SP to register E Increment SP Copy the contents of the memory location pointed to by the SP to register D Increment SP D 12 E F3 FFFBH FFFCH FFFDH FFFEH FFFFH

F3 12 SP

F3 12

SP

Operation of the Stack During pushing, the stack operates in a decrement then store style.

Clases de Microprocesadores Prof. B.Barraza.

The stack pointer is decremented first, then the information is placed on the stack. During poping, the stack operates in a use then increment style. The information is retrieved from the top of the the stack and then the pointer is incremented. The SP pointer always points to the top of the stack. LIFO The order of PUSHs and POPs must be opposite of each other in order to retrieve information back into its original location. PUSH B PUSH D ... POP D POP B Reversing the order of the POP instructions will result in the exchange of the contents of BC and DE.

PUSH PSW

PUSH PSW Register Pair PUSH PSW (1 Byte Instruction) Decrement SP Copy the contents of register A to the memory location pointed to by SP Decrement SP Copy the contents of Flag register to the memory location pointed to by SP A 12 Flag F3 FFFBH FFFCH FFFDH FFFEH FFFFH

F3 12 SP

Pop PSW Register Pair POP PSW (1 Byte Instruction) Copy the contents of the memory location pointed to by the SP to Flag register Increment SP Copy the contents of the memory location pointed to by the SP to register A Increment SP POP PSW A 12 Flag F3 FFFBH FFFCH FFFDH FFFEH FFFFH

F3 12

SP

Modify Flag Content using PUSH/POP Let, We want to Reset the Zero Flag

Cy

Clases de Microprocesadores Prof. B.Barraza.

Program: LXI SP FFFF PUSH PSW POP H MOV A L ANI BFH (BFH= 1011 1111) * Masking MOV L A PUSH H POP PSW Subroutines A subroutine is a group of instructions that will be used repeatedly in different locations of the program. Rather than repeat the same instructions several times, they can be grouped into a subroutine that is called from the different locations. In Assembly language, a subroutine can exist anywhere in the code. However, it is customary to place subroutines separately from the main program. The 8085 has two instructions for dealing with subroutines. The CALL instruction is used to redirect program execution to the subroutine. The RET insutruction is used to return the execution to the calling routine. The CALL Instruction CALL 4000H (3 byte instruction) When CALL instruction is fetched, the MP knows that the next two Memory location contains 16bit subroutine address in the memory.

CALL 4000 40 00 20 03 FFFBH FFFCH FFFDH FFFEH FFFFH [W] [Z] Reg.

CALL

03 20 SP

MP Reads the subroutine address from the next two memory location and stores the higher order 8bit of the address in the W register and stores the lower order 8bit of the address in the Z register Pushe the address of the instruction immediately following the CALL onto the stack [Return address] Loads the program counter with the 16-bit address supplied with the CALL instruction from WZ register.

RET (1 byte instruction) Retrieve the return address from the top of the stack Load the program counter with the return address. 4014 4015 RET

PC

2003 FFFBH FFFCH FFFDH FFFEH FFFFH

03 20

SP

Clases de Microprocesadores Prof. B.Barraza.

Things to be considered in Subroutine The CALL instruction places the return address at the two memory locations immediately before where the Stack Pointer is pointing. You must set the SP correctly BEFORE using the CALL instruction. The RET instruction takes the contents of the two memory locations at the top of the stack and uses these as the return address. Do not modify the stack pointer in a subroutine. You will loose the return address. Number of PUSH and POP instruction used in the subroutine must be same, otherwise, RET instruction will pick wrong value of the return address from the stack and program will fail.

Passing Data to a Subroutine. Data is passed to a subroutine through registers. Call by Reference: The data is stored in one of the registers by the calling program and the subroutine uses the value from the register. The register values get modified within the subroutine. Then these modifications will be transferred back to the calling program upon returning from a subroutine Call by Value: The data is stored in one of the registers, but the subroutine first PUSHES register values in the stack and after using the registers, it POPS the previous values of the registers from the stack while exiting the subroutine. i.e. the original values are restored before execution returns to the calling program. The other possibility is to use agreed upon memory locations. The calling program stores the data in the memory location and the subroutine retrieves the data from the location and uses it. Cautions with PUSH and POP PUSH and POP should be used in opposite order. There has to be as many POPs as there are PUSHs. If not, the RET statement will pick up the wrong information from the top of the stack and the program will fail. It is not advisable to place PUSH or POP inside a loop. Conditional CALL and RTE Instructions The 8085 supports conditional CALL and conditional RTE instructions. The same conditions used with conditional JUMP instructions can be used. CC, call subroutine if Carry flag is set. CNC, call subroutine if Carry flag is not set RC, return from subroutine if Carry flag is set RNC, return from subroutine if Carry flag is not set Etc.

A Proper Subroutine. According to Software Engineering practices, a proper subroutine: Is only entered with a CALL and exited with an RTE Has a single entry point Do not use a CALL statement to jump into different points of the same subroutine. Has a single exit point There should be one return statement from any subroutine.

Writing Subroutines Write a Program that will display FF and 11 repeatedly on the seven segment display. Write a delay subroutine and Call it as necessary.

Clases de Microprocesadores Prof. B.Barraza.

Example: LXISP FFFF MVIA FF OUT 00 CALL 14 20 MVIA 11 OUT 00 CALL 14 20 JMP 03 C0 DELAY: MVIB FF MVIC FF DCR C JNZ 18 C0 DCR B JNZ 16 C0 RET

FUENTE:

Clases de Microprocesadores Prof. B.Barraza.

Ejemplo: Mi primer PUSH Iniciamos copiando y pegando el siguiente programa en el editor ASM para entender cmo funciona este programa.
.ORG 0 MVI B,12H MVI C,F3H LXI SP, FFFFH PUSH B HLT

Fig.4.1.- Editor ASM

Fig.4.2.-Visualizando la simulacin PUSH. Lo que hacemos es posicionarnos en la direccin FFFFH, decrementamos 2 posiciones en el SP almacenado los registros B, y C en la direccin FFFEH y FFFDH respectivamente.

Clases de Microprocesadores Prof. B.Barraza.

Ejemplo: Mi primer POP


.ORG 0 MVI MVI LXI POP HLT B,12H C,F3H SP, FFFFH B

Fig.4.2.-Visualizando la simulacin POP.

Clases de Microprocesadores Prof. B.Barraza.

6.- IN/OUT Puertas de entrada/ salida DISPLAY


Debemos tener en claro que estamos trabajando con nmeros hexadecimales y esto genera un problema al momento de generar secuencias de tipo decimal. Para poder manipular contadores, haremos uso de los display de 7 segmentos que tiene el simulador. ANODO COMUN: Los leds se encienden con 0. CATODO COMUN: Los leds se encienden con 1.

DISPLAY 0 1 2 3 4 5 6 7 8 9

Valor HEXADECIMAL Xgfe dcba 3FH 0011 1111 06H 0000 0110 5BH 0101 1011 4FH 0100 1111 66H 0110 0110 6DH 0110 1101 5FH 0101 1111 07H 0000 0111 7FH 0111 1111 6FH 0110 1111 Tabla GENERAL Ctodo comn

DISPLAY Valor HEXADECIMAL Xcde gbaf 0 77H 0111 0111 1 44H 0100 0100 2 3EH 0011 1110 3 6EH 0110 1110 4 4DH 0100 1101 5 6BH 0101 1011 E 6 7BH 0111 1011 7 46H 0100 0110 8 7FH 0111 1111 9 6FH 0110 1111 Tabla del simulador SIM 8085 Ctodo comn

En el nivel ms bsico podemos trabajar con un display de 7 segmentos del simulador 8085 y empezar a crear una rutina sencilla de puertas de entrada y salida (IN/OUT). Ntese que la configuracin de los valores abcdefgX del display pueden diferir dependiendo del fabricante.
Ej: Muestra 0 en el display usndo la puerta 00H. .ORG 0 MVI A, 77H OUT 00H HLT

Clases de Microprocesadores Prof. B.Barraza.

Ejercicio que inicializa un contador, mostrnado en las puesrtas de salida los valores en forma creciente del 0 al 9 No corregido.

.DATA 1000H DB 77H,44H,3EH,6EH,4DH,6BH,7BH,46H,7FH,6FH .ORG 0 INICIO: MVI D,0H LXI H,1000H XX: CALL MOSTRAR CALL DELAY OTRO: INR D ; LLAMA SUBRUTINA

CALL MOSTRAR CALL DELAY MOV A,D CPI 9 JNZ OTRO JMP OTRO HLT

MOSTRAR:

MOV L,D MOV A,M OUT RET 07H

DELAY: MVI B,10H DELAY2: MVI C,FFH YY: DCR C JNZ YY YYY: DCR B JNZ DELAY2 RET

Clases de Microprocesadores Prof. B.Barraza.

Mi primer programa con IN/OUT


Usaremos el teclado para poder ingresar un dato, y compararlo para posteriormente llevar a la salida otro dato.

Fig.8.-Teclado del simulador Ejemplo 1.- En este caso se tiene el teclado que presionando 0 se muestra en el display de 7 segmentos el valor 0 y se termina el ciclo.
.org 0 MVI B, 00H MOV A,B IN 00H ;INICIALIZO ;INGRESO POR TECLADO UN NUMERO

INICIO:

CPI 30H ;COMPARO EL CONTENIDO DEL ACUMULADOR CON 30H QUE EN ANSI II ES 0 JNZ INICIO ; SI ES CERO EL CONTENIDO PODREMO SALIR DEL CICLO MVI A,77H ; EL VALOR QUE SALE (OUT) ES 77H PARA EL DISPLAY DE 7 SEGMENTOS ES 0 OUT 00H ; ESTE VALOR ES LLEVADO A LA PUERA HLT

Clases de Microprocesadores Prof. B.Barraza.

Ejemplo 1.- En este caso se tiene el teclado que presionando 7 se muestra en el display de 7 segmentos el valor 7 y se termina el ciclo.

.org 0 INICIO: MVI B, 00H MOV A,B IN 00H ;INICIALIZO ;INGRESO POR TECLADO UN NUMERO

CPI 37H ;COMPARO EL CONTENIDO DEL ACUMULADOR CON 37H QUE EN ANSI II ES 7 (VER TABLA ANSI) JNZ INICIO ; SI ES CERO EL CONTENIDO PODREMO SALIR DEL CICLO MVI A,46H ; EL VALOR QUE SALE (OUT) ES 46H PARA EL DISPLAY DE 7 SEGMENTOS (VER TABLA SIMULADOR 8085 CATODO COMUN) OUT 00H ; ESTE VALOR ES LLEVADO A LA PUERA HLT

Clases de Microprocesadores Prof. B.Barraza.

EJERCICIO: USANDO EL MICROPROCESADOR 8085


EJEMPLO TIPO PRUEBA DE MICROPROCESADORES Nombre:.......................................... Nota:.................
1. Se desea disear un programa para el microcomputador 8085 de la figura, que permita leer u teclado numerico del 0 al 9, e que codifica su informacin en ASCII (0=30h, 1=31,..... 9=39h) conectado al puerto PB, tal como muestra la siguiente figura. Se entiende que slo es posible mostrar del 0 al 9 y por tanto se supone que solo existen esas teclas. En la puerta C, hay conectado un led que se activa cuando se presiona una tecla. Si se presiona la tecla 5, deber generarse una onda cuadrada de 5000 hz. La Puerta A, esta conectada a un display de siete segmentos: PA0 a segmento a, PB1 a segmento b y as sucesivamente, por lo cual deber mostrarse en el display la informacin correcta. Puede generarse una tabla donde este almacenada la informacin de cada digito asociada al display. Crystal=6,144Mz
Teclado numrico AD0 AD7 p e d LEDs Port A A7 A5 A6 A3 GROUND A4 A0 IO/M A1 A2 RD WR 3 PC PB3 f g c a b

Cs
2.Usando decodificadores 3/8, puertas NAND, disear un direccionamiento de puertas con las siguientes caractersticas: E2 8 DISPOSITIVOS DE ENTRADA, E3 8 DISPOSITIVOS DE SALIDA DIRECCOION INICIAL DIRECCIN DE INICIO A0 E8.
E1

3. -

a) Explique el proceso de dilogo, modo 1, cuando una puerta B del 8155, est recibiendo informacin de un conversor anlogo digital. Tome como referencia al micro usado en laboratorio (8085) b) Indique las ventajas y desventajas de I/O aislada y I/O memoria mapeada. Puntaje: Problema 1, 20 puntos Problema 2, 10 puntos Problema 3, 10 puntos Total : 45 puntos 19 de junio de 2007

Clases de Microprocesadores Prof. B.Barraza.

MICROPROCESADORES
TECLADO C/S COH PB IN 0 3 6 1 4 7 9 2 5 8

MICROPROCESADOR

8085
PA OUT

PC timer TH C5H TL C4H 500Hz

OUT

1 0 1

A7 A5 A6

Menos significativo Mas significativo 000 001 010 DECODIFICADOR 3/8 Selecciona la puerta de salida 5 011 100 101 5 110 111

TIMER 0 0

INTERR 0 0 1

PC 1

PA 0
0:IN 1:OUT

PB 1

00: timer no opera 01: Stop timer 10:Stop timer despus de completar una cuesta 11:Stop Timer A7 A6 A5 A4 A3 A2 X A1 X A0 X

00:IN 11:OUT

0 0 1 Io/M

1 1 1
Tabla de direccionamiento

1 1 1 1 1 1 1

0 0 0 0 0 0 0

0 0 0 0 0 0 0

0 0 0 0 0 0 0

0 0 0 0 1 1

0 0 1 1 0 0

0 1 0 1 0 1

C0H C1H C2H C3H C4H C5H

C/S Shift Select PA PB PC TL TH

1 1 1 1

Modo

TH

4A

TL 20

0 0 0 1 1

1 0 1 0 1

0
Tabla de Timer

N=

=4A 20H =TH TL

Clases de Microprocesadores Prof. B.Barraza.

FLUXOGRAMA

INICIALIZACIONES

NO PRESIONA TECLA SI

MOSTRAR TECLA DISPLAY NO NO #5 SI #6

PARTIR TIMER

DETENER TIMER

Clases de Microprocesadores Prof. B.Barraza.

Ejercicio 3.- Se tiene un teclado que presionando 5 parte el temporizador y presionando 9 se detiene el temporizador .DATA 1030H .dB C0,F9,A4,B0 ; Inicializaciones PA=OUT PB=IN PC=OUT TIMER= NO OPERA

. INICIO: MVI A,ODH OUT COH

MVI A, 20H ; OUT C4H MVI A,4AH OUT C5 LXI H,1030H ;TH ;TL

IN PB

Clases de Microprocesadores Prof. B.Barraza.

MOV L,A MOV A,M OUT PA CPI 35 JZ PARTE TIME CPI 39 JZ DETENER TIME JMP INICIO

PARTE TIME: MVI A,CDH OUT C0 JMP INICIO DETENER TIME: MVI A,4D OUT C0 JMP INICIO

Clases de Microprocesadores Prof. B.Barraza.

EJERCICIO 4- SENSOR DE TEMPERATURA. La temperatura del cuarto produce en un sensor de termopar un voltaje que es proporcional a la temperatura del cuarto, este voltaje es acondicionado por un amplificador operacional y aplicado a la entrada de un ADC, donde es convertida a una seal digital y peridicamente muestreada por un microprocesador . Por ejemplo supongamos que la temperatura del cuarto es de 17 C . Un voltaje especifico a esta temperatura aparece a la entrada del convertidor ADC de 8 bits y en su salida el convertidor da una seal digital correspondiente digamos de 01000011 en cdigo binario de 8 bits. Internamente, el microprocesador compara este numero binario con un numero, tambin binario, que representa la temperatura deseada supngase 01001000 para 23 C, Que es el valor deseado de temperatura que previamente se ha introducido a travs de un teclado y almacenado en un registro. Como resultado de la comparacin, en que para este ejemplo el cuarto tiene una temperatura actual menor que el valor deseado, el microprocesador comanda a la unidad de control a que se encienda el dispositivo calentador del cuarto. Como el microprocesador continuara monitoreando la temperatura del cuarto va el convertidor ADC , cuando la temperatura del cuarto iguale exceda la temperatura deseada el microcontrolador apagar el dispositivo calentador.

Clases de Microprocesadores Prof. B.Barraza.

LISTA DE EJERCICIOS FINALES


EJERCICIO

tres modulos atienden a 100 clientes

;.org 0h lxi sp,ffffh lxi h,bbbbh push psw mvi out out out out out out a,77h 7h 6h 5h 0h 1h 2h

que_tecla_es_?: in 0h cpi 31h jz xx cpi 32h jz yy cpi 33h jz zz jmp que_tecla_es_? xx: mov b,a pop psw cmp b jz ayuda inr c mov a,b push psw mvi a,44h out 0h mvi a,0h out 1h out 2h jmp mostrar yy: mov b,a pop psw cmp b jz ayuda inr c mov a,b push psw mvi a,3eh out 1h mvi a,0h out 0h out 2h jmp mostrar zz:

Clases de Microprocesadores Prof. B.Barraza.

mov b,a pop psw cmp b jz ayuda inr c mov a,b push psw mvi a,6eh out 2h mvi a,0h out 0h out 1h jmp mostrar ayuda: push psw jmp que_tecla_es_? mostrar: inx h mov a,m cpi 77h jz xxx out 7h jmp que_tecla_es_? xxx: out 7h jmp sas ppp: mov a,m cpi 77h jz yyy out 6h lxi h,bbbbh jmp que_tecla_es_? sas: cpi inr lxi mov pool: dcr inx jnz jmp yyy: lxi out inx mov out hlt .data bbbbh db 77h,44h,3eh,6eh,4dh,6bh,7bh,46h,7fh,4fh,77h h,bbbbh 6h h a,m 5h a h pool ppp 77h d h,bbbbh a,d

Clases de Microprocesadores Prof. B.Barraza.

EJERCICIO 6.- CONTADOR


.data 1055h db 77h, 44h, 3eh, 6eh, 4dh, 6bh, 7bh, 46h, 7fh, 6fh .org 0 mvi e,00h fin: lxi h,1055h lxi b,1070h cmp e jnz mostrar2 xxx: mvi d,0ah lxi h,1055h lxi b,1070h xx: mov a,m stax b call mostrar call delay inx b inx h dcr d jz fin jmp xx mostrar: mov b,a mov a,m push psw out 07h pop psw mov a,b ret delay: mvi b,88h dell: mvi c,48h yy: dcr c jnz yy dcr b jnz dell ret

mostrar2:inr e dad d mov a,m stax b

Clases de Microprocesadores Prof. B.Barraza.

EJEMPLO CONTADOR HASTA 60


.data 10000h db 77h,44h,3Eh,6Eh,4Dh,6Bh,7Bh,46h,7Fh,4Fh LXI h,1000h LXI sp,8000h .org 0 mvi a,0 volta: call mostrar call delay cpi 9h jnz crecer jmp yy mostrar: push psw out 00h pop psw ret crecer: adi 1 daa jmp volta call mostrar call delay jz decrecer jmp volta

yy:

decrecer: dcr a jnz yy hlt delay: del: xx: mvi b,55 mvi c,30 dcr c jnz xx dcr b jnz delay ret call mostrar call delay cpi 10h jnz crece jmp xx push psw out 0h pop psw ret crece: adi 1 daa jmp volta call mostrar call delay jz decrece

volta:

mostrar:

xx:

Clases de Microprocesadores Prof. B.Barraza.

jmp volta decrece: dcr a jnz xx hlt mvi b,5 mvi c,3 dcr c jnz yy dcr b jnz del1 ret

delay: del1: yy:

EJERCICIO INTERRUPCIONES
.org 0 lxi sp,2100h mvi a,03h out 20h mvi a,00h out 24h mvi a,4ch out 25h mvi a,c3h out 20h comienzo: mvi a,feh rotar: out 21h call delay rlc jmp rotar delay: mvi d,a0h del1: mvi e,20h yy: dcr e jnz yy dcr d jnz del1 ret .org 3ch jmp 100h .org 100h push psw push b push d mvi a,fch mvi c,00h prender: out 22h call delay rlc inr c mov b,a mov a,c

Clases de Microprocesadores Prof. B.Barraza.

cpi 5 jz xx mov a,b jmp prender xx: mvi sim ei pop pop pop ret a,09h d b psw

.org 34h jmp 200h .org 200h push psw push b push d mvi c,00h mvi a,0bh sim ei retornar: mvi a,00h out 22h call delay mvi a,ffh out 22h call delay inr c mov a,c cpi 5h jz xxx jmp retornar xxx: mvi a,08h sim ei pop d pop b pop psw ret

EJERCICIO LEDS
.org 1000h mvi c,128 mov d,0 salto: mov a,c out 0h jmp salto

.org 003ch ;Subrutina cada 1 segundo sub:

Clases de Microprocesadores Prof. B.Barraza.

mov cpi jnz mov rar mov mov cpi jnz mvi mvi

a,d 0 mub a,c c,a a,c 0 rub c,1 d,1

;direccion -->

mub: mov a,c ral mov c,a mov a,c cpi 0 jnz rub mvi c,128 mvi d,0 rub: ei ret

;direccion <--

EJERCICIO PC1
p1: mvi a,00h out 22h call delay mvi a,ffh out 22h call delay inr c mov a,c cpi 5h jz apagar jmp p1 p2: mvi a,feH rotar: out 21 call delay rlc inr c mov b,a mov a,c cpi 08H jz apagar mov a,b jmp rotar p3: mvi a,feH rotar1: out 22H call delay rlc

Clases de Microprocesadores Prof. B.Barraza.

inr c mov b,a mov a,c cpi 08H jz apagar mov a,b jmp rotar1 apagar: mvi out out jmp delay: mvi del1: mvi yy: dcr jnz dcr jnz ret a,ffh 21h 22h comienzo d,a0H e,20H e yy d del1

Clases de Microprocesadores Prof. B.Barraza.

A5 Apndice A5 Programas de ejemplo


Se han escrito varios programas en ensamblador que muestran el funcionamiento de los componentes que incorpora el simulador. Realizar el negativo de una imagen de niveles de gris cargada en memoria o implementar el juego de la serpiente ( snake en ingls) son algunos ejemplos que pasamos a comentar en las secciones siguientes.

Demostracin:
Nombre: Procesador: Dispositivos: Lneas: negativo.asm 8085 Pantalla Grafica (256) 28

Descripcin: Programa de muestra que invierte la imagen actual en pantalla.


.org 100H mvi H, 10H mvi L, 00H otro: mvi a, FFh SUB M mov M, a INX H ;comprueba parte alta mvi a, 4EH cmp H JZ comprueba_LO jmp otro comprueba_LO: mvi a, 80h cmp L JZ fin jmp otro ; comprueba parte baja

; en HL la posicion de memoria

Clases de Microprocesadores Prof. B.Barraza.

fin: hlt

Demostracin:
Nombre: leds.asm Procesador: 8085 Dispositivos: Panel de Leds (1 linea) Generador de Interrupciones Lneas: 47 Descripcin: Programa que genera un movimiento ordenado y oscilante de una luz mediante un vector de leds.
;LUZ COCHE FANTASTICO ; ; requiere led en puerto 0 ; interrupcion rst 7.5 cada 1 segundo .org 1000h mvi c,128 mov d,0 salto: mov a,c out 0h jmp salto

.org 003ch ;Subrutina cada 1 segundo sub: mov a,d cpi 0

Clases de Microprocesadores Prof. B.Barraza.

jnz mub mov rar mov mov cpi jnz mvi mvi a,c c,a a,c 0 rub c,1 d,1 ;direccion <-;direccion -->

mub: mov a,c ral mov c,a mov a,c cpi 0 jnz rub mvi c,128 mvi d,0 rub: ei ret

Ejemplo de una utilidad:


Nombre: pantalla.asm Procesador: 8085 Dispositivos: Pantalla de Texto Teclado Generador de Interrupciones por teclado Lneas: 59 Descripcin: Simulacin de un terminal de texto.
; Ejemplo de programa ; Simulador de terminal ; Asociado a interrupcin TRAP .define texto E000h tamtexto 25*40 .org 1000h

Clases de Microprocesadores Prof. B.Barraza.

; ------------------------------; PROGRAMA PRINCIPAL ; ------------------------------mvi B, E0h mvi C, 00h call clear_all bucle: jmp bucle .org 0024h ; Direccion de interrupcin TRAP

; ------------------------------; RUTINA QUE LEE DEL TECLADO Y ESCRIBE EN MEMORIA ; ------------------------------in 00h cpi 0 jz no_tecla stax B inx B no_tecla: ret clear_all: LXI H, texto LXI D, texto+tamtexto repite_c: MVI A,32 MOV M,A INX H call comparador cpi 1 jz fin_clear jmp repite_c fin_clear: ret comparador: A=1 si igual MOV A,E CMP L JNZ no_igual MOV A,D CMP H JNZ no_igual MVI A, 1 ret no_igual: MVI A,0 ret ;cargamos origen ;cargamos fin ;borrar punto de memoria ;incrementar direccion

;compara DE con HL (en 16 bits). Devuelve

Clases de Microprocesadores Prof. B.Barraza.

Ejemplo de una utilidad:


Nombre: Reloj.asm Procesador: 8085 Dispositivos: Visualizador de 7 segmentos Generador de Interrupciones Lneas: 83 Descripcin: Programa que convierte a un 8085 en un reloj digital con segundero y minutero.
; Ejemplo de programa ; Reloj digital ; Asociado a interrupcin TRAP .data DDh DB 77h, 44h, ;digitos sin DB F7h, C4h, ;digitos con .org 1000h ; ------------------------------; PROGRAMA PRINCIPAL ; ------------------------------mvi B, 00h mvi C, DDh mvi D, 00h 3Eh, 6Eh, 4Dh, 6Bh, 7Bh, 46h, 7Fh, 4Fh punto BEh, EEh, CDh, EBh, FBh, C6h, FFh, CFh punto

Clases de Microprocesadores Prof. B.Barraza.

mvi mvi mvi mvi out out out mvi out bucle: jmp

E, L, H, A, 6d 7d 4d A, 5d

DDh E7h DDh 77h

F7h

bucle ; Direccion de interrupcin TRAP

.org 0024h

; ------------------------------; RUTINA QUE AUMENTA EL TIEMPO ; ------------------------------ldax B cpi 4Fh jz suma_segundo inx B ldax B out 7d ret suma_segundo: mvi C,DDh ldax B out 7d ldax D cpi 6Bh jz suma_minuto1 inx D ldax D out 6d ret suma_minuto1: mvi E, DDh ldax D out 6d mov D, C mov C, L ldax B cpi CFh jz suma_minuto2 inx B ldax B out 5d mov L, C mov C, D mov D, 00h ret suma_minuto2: mvi L, E7h mov D, C mov C, L ldax B out 5d mov D, C mov C, H inx B

Clases de Microprocesadores Prof. B.Barraza.

ldax B out 4d mov H, C mov C, D mov D, 00h ret

Ejemplo de un Juego Interactivo:


Nombre: Snake.asm Procesador: 8085 Dispositivos: Teclado Pantalla Grafica Generador de Interrupciones Lneas: 236 DESCRIPCIN: Conocido juego de la serpiente, consiste en comer los puntos de comida si mordernos a nosotros mismos.
; Ejemplo de Programa en ensamblador para el simulador de 8085 ; SNAKE 8085 ; Comer sin mordenos a nosotros mismos .define memVideo A000h ;Origen de la memoria de Video sizeVideo 160*100 ;Tamao de la memoria de Video mitadVideo memVideo+sizeVideo/2 ;Posicion intermedia teclado 0h ;Puerto del teclado up (-160)&FFFFh down 160 left -1 right 1 tecla_up 1Eh tecla_down 1Fh tecla_left 11h tecla_right 10h comienzo mitadVideo+80 .data 0b cuanto: dB 10h cola: dW comienzo pos: dB 0 pos_pantalla: dW memVideo+580H,memVideo+1000H,memVideo+2500H,memVideo+3000H

Clases de Microprocesadores Prof. B.Barraza.

.org 500H ; call clear_all LXI H, comienzo call pon_comida repite: IN teclado jmp repite comparador: A=1 si igual MOV A,E CMP L JNZ no_igual MOV A,D CMP H JNZ no_igual MVI A, 1 ret no_igual: MVI A,0 ret compar_inf: A=1 si menor DE MOV A,D CMP H JM menor JZ comp_menor MVI A, 0 ret menor: MVI A,1 ret comp_menor: MOV A,E CMP L JM menor MVI A, 0 ret compar_sup: A=1 si mayor DE MOV A,H CMP D JM menor JZ comp_menor2 MVI A, 0 ret menor2: MVI A,1 ret comp_menor2: MOV A,L CMP E JM menor2 MVI A, 0 ret ;compara DE con HL (en 16 bits). Devuelve

;compara DE con HL (en 16 bits). Devuelve

;compara DE con HL (en 16 bits). Devuelve

Clases de Microprocesadores Prof. B.Barraza.

clear_all: LXI H, memVideo LXI D, memVideo+sizeVideo repite_c: MVI A,0 MOV M,A INX H call comparador cpi 1 jz fin_clear jmp repite_c fin_clear: ret moverse: CPI tecla_up cz haz_arriba CPI tecla_down cz haz_abajo CPI tecla_left cz haz_izqda CPI tecla_right cz haz_decha ret comprobador: de video

;cargamos origen memoria video ;cargamos fin memoria video ;borrar punto de memoria ;incrementar direccion

;en registro A el movimiento

;comprueba que no se excede de la memoria

LXI D, memVideo call compar_sup cpi 1 ;Si es 0 es q DE no es mayor que HL jz fin LXI D, memVideo+sizeVideo call compar_inf cpi 1 ;Si es 0 es que DE no es menor que HL jz fin ret haz_arriba: LXI D, up call pon_punto ret haz_abajo: LXI D, down call pon_punto ret haz_izqda: LXI D, left call pon_punto ret haz_decha: LXI D, right call pon_punto ret pon_punto: ;moverse arriba

;moverse abajo

;moverse izda

;moverse decha

Clases de Microprocesadores Prof. B.Barraza.

DAD d call comprobador mov A,M cpi FFh jz fin cpi FFh/2 CZ pon_comida MVI M, FFh call comp_borra ret comp_borra: push psw LDA cuanto cpi 0 jz borra_punto DCR a STA cuanto pop psw ret borra_punto: push h push d lhld cola LXI d, up DAD d mov a,M cpi FFh jz elimina lhld cola LXI d, down DAD d mov a,M cpi FFh jz elimina lhld cola LXI d, left dad d mov a,M cpi FFh jz elimina lhld cola LXI d, right DAD d elimina: MVI a, 00h mov M,a SHLD cola pop d pop h pop psw ret pon_comida: push psw push d LDA cuanto adi 10h STA cuanto

;pintar

; si el cuanto es 0 hay que borrar ; decrementamos y almacenamos el cuanto

; mirar arriba ;si hay punto hay que borrarlo ; mirar abajo ;si hay punto hay que borrarlo ; mirar izquierda ;si hay punto hay que borrarlo ; mirar izquierda

;almacenamos la nueva cola

;regresa al call de comp_borra

Clases de Microprocesadores Prof. B.Barraza.

LDA rlc Mov rrc Mvi INR ANI STA

pos e,a d,0 a 11b pos

;cargamos la posicion actual

;incrementamos el desplazamiento ;impedimos que sea mayor que 4 ;guardamos la posicion actual

push h LXI h, pos_pantalla DAD d Mov E,M INX h Mov D,M XCHG mvi a, FFh/2 mov M, a pop h pop d pop psw ret fin: hlt

;ya tenemos la direccion en HL ;coloreamos el punto ;recuperamos lo guardado

.org 3Ch ;Interrupcion del timer (RST 7.5) call moverse EI Ret

Clases de Microprocesadores Prof. B.Barraza.

CONCLUSION:
Este trabajo lo he llevado o cabo debido a la necesidad de contar con un texto del que se pueda aprender sobre el lenguaje assembler. Espero haber sido de algn aporte en el camino de la enseanza, rescatando ejemplo de mis compaeros de curso, notas del profesor, la WEB, y ejercicios propios. Espero actualizar este material por que tiene demasiados errores, sin embargo insto que el mejor maestro es uno mismo, lo importante es la idea general Uds saben.... Como futuro ingenieros debemos tener en cuenta que el lmite del conocimiento nos lo ponemos nosotros...

paul.terrazas.lazaro@gmail.com

Clases de Microprocesadores Prof. B.Barraza.

Anda mungkin juga menyukai