Está en la página 1de 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

ALU

BUS DATOS
EXTERNO

CONTROL

REGISTROS
INTERNOS DE
16 BITS

BUS DE
DIRECCIONES
INTERNO

BUS DIRECCIONES EXTERNO

REGISTRO DE
FLAGS

BUS DE
CONTROL

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)

Z: (Cero)

Si el resultado es negativo S=1

Si el resultado es Cero Z=1

Si el resultado es positivo S=0

Si el resultado es diferente de cero Z=0

AC: (Carry auxiliar)

P: (Paridad )

Si hay carry auxiliar AC=1

Si el resultado es par P= 1

Si no hay carry auxiliar AC=0

Si el resultado es impar P=0

CY: (Carry)
Si hay carry Cy=1
Si no hay carry Cy=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

Clases de Microprocesadores Prof. B.Barraza.

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

Tabla 2.1 Set de instrucciones del microprocesador 8085A

No

Nemonicos

Sintesis de operacin y ejemplos

0.

Directiva General

.ORG 0

: Posicion de programa en la DIRECTIVA

.data 2000H
dB
dW
.define

: 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

Cargar un registro con un dato Inmediato

Bits afectados:

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.

Direccionamiento:
Inmediato

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

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

Acumulador
Dato complementado
Nuevo acumulador

0AH:
FBH:
05H:

0
1

0
1

0
1

0
1

0
1

1
0

0
1

1
0
1
1

0
1
0

0
1
0

0
1
0

0
1
0

1
1
0

0
0
1

1
1
0

0
1
1

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

CMP M

CPI dato

Comparar el contenido del acumulador con un dato Inmediato

Flags afectados:
Z, S, P, CY, AC

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):

Direccionamiento:
Registro indirecto

DATO
Complemento 1
Compemento 2
Dato complementado

20H:
C-1:
C-2:
E0H:

Acumulador
Dato complementado
Nuevo acumulador

25H:
E0H:
05H:

0
1

0
1

1
0

0
1

0
1

0
1

0
1

0
1
1
0

0
1
0

0
1
0

1
1
0

0
0
0

0
0
0

1
0
1

0
0
0

1
0
1

Cy=1
Las banderas son afectas.

CPI
Z
Cy
X

X>Y
0
0
X

X=Y
1
0
P

X<Y
0
1
Cy

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

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.

LDA Dir
Bits afectados:
Direccionamiento:
Registro indirecto

Carga directa en el acumulador

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

12

INX Reg
Direccionamiento:
Registro

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

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


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

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:

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

Registro B
Acumulador
Nuevo acumulador

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

2. La instruccin
ADD A
duplica el contenido del acumulador.

Sumar registro o memoria al acumulador con acarreo

15

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:

Registro B
Acumulador
Bit de acarreo
Nuevo acumulador A6H

30H:
76H:

0
0

0
1

1
1

1
1

0
0

0
1

0
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

0
1

1
1

1
1

0
0

0
1

0
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.

0
0
1
1

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

1
0
1

0
0
0

0
0
1
1

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

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

22H:
14H:

0
0

0
0

1
0

0
1

0
0

0
1

1
0

+
37H:

Todos los bits se ponen a cero.

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

Clases de Microprocesadores Prof. B.Barraza.

0
1

0
0

0
0

0
0

Registro E
Complemento 1
Compemento 2
Dato complementado

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

Acumulador
Dato complementado
Nuevo acumulador

60H:
D8H:
38H

0
1

0
1

1
0

0
1

1
0

0
1

0
1

0
1
1
0

0
1
0

1
1
0

1
0
1

0
1
1

0
1
1

0
0
0

0
0
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

B3H:
C-1:
C-2:
4DH:

Acumulador
Dato complementado
Nuevo acumulador

B3H:
4DH:
00H:

1
0

0
1

1
0

1
0

0
1

0
1

1
0

1
0
1
1

1
0
0

0
1
0

1
0
0

1
0
0

0
1
0

0
1
0

1
0
0

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

00H:
FFH:

0
1

0
1

1
1

0
1

0
1

0
1

0
1

+
FFH:

Cy=1
Z=0
Ca=0

Clases de Microprocesadores Prof. B.Barraza.

0
1
0
1

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

22

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

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

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

Clases de Microprocesadores Prof. B.Barraza.

0
1

1
0

0
0

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

25

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

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

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

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

28

STC

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

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

Activar acarreo
El bit de acarreo se pone a 1.

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.

29

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

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

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

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.

JNZ dir

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.

JM dir

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.

37

38

39

40

Clases de Microprocesadores Prof. B.Barraza.

JP dir

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.

JPE dir

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).

41

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.

44

CC dir

CNC dir

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.

CZ dir

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.

CNZ dir

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.

CM dir

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.

45

46

47

48

CP dir
49

CPE dir
50

CPO dir
51

RET
52

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.

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.

Clases de Microprocesadores Prof. B.Barraza.

RC

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.

RNC

Retorno si no hay acarreo

53

54
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.
RZ

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.

RNZ

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.

RM

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.

RP

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.

RPE

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).

RPO

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.

RST

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.

55

56

57

58

59

60

61

EI
62

DI
63

IN port
64

1. La instruccin
IN 2
deposita en el acumulador los datos de entrada del puerto 2.

Clases de Microprocesadores Prof. B.Barraza.

OUT port

Salida

65
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

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

Despus de PUSH

Registro C
16

Puntero
Stack
2028
Registro B
3F

Registro C
16

MEMORIA

DIRECCION

MEMORIA

DIRECCION

00

2027

00

2027

00

2028

16

2028

00

2029

3F

2029

00

2030

00

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

Registro C
16

MEMORIA

DIRECCION

00

2027

16

2028

3F

2029

00

2030

Puntero
Stack
2030
Registro B
3F

Registro C
16

MEMORIA

DIRECCION

00

2027

16

2028

3F

2029

00

2030

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

Z
0

X
0

A
0

X
1

P
1

X
1

Cy
1

=16H

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

71

XTHL

03

04

01

02

01

02

03

04

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

72

SPHL

Puntero
Stack
40B4
Registro H
DD

Registro L
CC

Puntero
Stack
40B4
Registro H
AA

Registro L
BB

MEMORIA

DIRECCION

MEMORIA

DIRECCION

00

40B3

00

40B3

BB

40B4

CC

40B4

AA

40B5

DD

40B5

00

40B6

00

40B6

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

(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)

NINGUNO
NINGUNO
NINGUNO
NINGUNO
NINGUNO
NINGUNO
NINGUNO
NINGUNO
NINGUNO
NINGUNO
NINGUNO
NINGUNO
NINGUNO

INSTRUCCIONES ARITMTICAS

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

(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)

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

INSTRUCCIONES LGICAS.

ANA r
ANA M
ANI byte
XRA r

(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)

TODOS
TODOS
TODOS
TODOS

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 )

JMP addr
Jccc addr

(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)

NINGUNO
NINGUNO
NINGUNO
NINGUNO

NINGUNO
NINGUNO

NINGUNO
NINGUNO

INSTRUCCIONES DE MANEJO DE LA PILA.

PUSH rp

PUSH PSW

POP rp

POP PSW

XTLH
SPLH

[(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)

NINGUNO

NINGUNO

NINGUNO

NINGUNO

NINGUNO
NINGUNO

INSTRUCCIONES DE ENTRADA Y SALIDA.

IN puerta
OUT puerta

(A)[puerta]
[puerta](A)

NINGUNO
NINGUNO

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

STA
LDA
DCR
INR

MVI

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

; contador

JNZ LOOP
HLT

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

Clases de Microprocesadores Prof. B.Barraza.

LARGEST

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

4T

LXI H,1000

10T ;Inicializa el contador aqui 1000=N

DEI: DCX H

4T

MOV A,B

4T

ORA H

4T

JZ FIN

7/10T

10T(N-1)

JNZ DEI

7/10T

7T(N-1)+10T

FIN: HLT

12TN

4T

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

xx:

MVI A,03

; 7T Aqui N=03

DCR A

; 4T

JNZ XX

; 10T/7T Salta ocupando 10T

next inst.

; ......

HLT

; 4T

7T
4T

4T

4T

10T

10T

7T

N-1

4T
N=2

N=1

N=0

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.

Listar y explicar los modos de direccionamiento usados en el uP 8085.

2.

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

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

Memory

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

AC

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

LXI H, 2001H
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

Clases de Microprocesadores Prof. B.Barraza.

CY

2355H

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

HL

2070H

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.

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

Clases de Microprocesadores Prof. B.Barraza.

M location
2A81H

CY

(b)

LXI B,D912

D9

12

LXI D,2145H

D9

LXI H,BA2CH

MVI A,82H

12

12

45

D9

12

12

45

BA

2C

CY

82

ADI 96H

18H

RAR

8C

DAD B

93

45

XCHG

21

45

BA

26

HLT

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

100H
430H

.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.

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

Comentario
Carga el registro C con el valor 10 h
Decrementa contenido del registro C

fim:

JZ fim
MOV A,B
JMP volta
HLT

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

2. Ejemplo similar al anterior, pero usando la instruccin JZ direccin y JMP direccin.


Label

volta:

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).

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

volta:

fim:
.

Instruccin
MVI A,07h

Comentario

MVI B,00h

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

INC B
CMP B
JC fim
JMP volta
HLT

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

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 1s para cada estado.
_____
_____
CALL atraso
_____
_____

Clases de Microprocesadores Prof. B.Barraza.

10. Subrutina de atraso de 10 ms. Se supone un tiempo de 1s 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, the 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

C
12

F3
FFFBH
FFFCH
FFFDH
FFFEH
FFFFH

F3
12
SP

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

E
12

F3
FFFBH
FFFCH
FFFDH
FFFEH
FFFFH

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

Flag
12

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

Flag
12

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

[W]

[Z] Reg.

20 03
FFFBH
FFFCH
FFFDH
FFFEH
FFFFH

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

; LLAMA SUBRUTINA

CALL DELAY
OTRO:

INR

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

MOSTRAR:

MOV L,D
MOV A,M
OUT

07H

RET

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

INICIO:

MVI B, 00H
MOV A,B
IN 00H

;INICIALIZO
;INGRESO POR TECLADO UN NUMERO

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

PB3

AD7

f
p

b
g

c
d

LEDs
Port A
A0 IO/M

A7
A5
A6
A3
GROUND
A4

A1

RD

A2

WR3
PC

Cs
2.-

E1

Usando decodificadores 3/8, puertas NAND, disear un direccionamiento de puertas con las siguientes
caractersticas:
E2
8 DISPOSITIVOS DEE3ENTRADA,
8 DISPOSITIVOS DE SALIDA

3. -

DIRECCOION INICIAL
DIRECCIN DE INICIO

A0
E8.

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

Clases de Microprocesadores Prof. B.Barraza.

19 de junio de 2007

MICROPROCESADORES
TECLADO
C/S
COH

PB

IN

MICROPROCESADOR

8085

timer

A7

Menos significativo

0
1

A5
A6

Mas significativo

TH

TL

C5H

C4H

001
010
011

3/8

100

Selecciona la puerta de
salida 5

101

OUT

PC

OUT

500Hz

000

DECODIFICADOR

PA

TIMER

INTERR

PC

00: timer
no opera
01: Stop
timer
10:Stop timer despus
de completar una cuesta
11:Stop
Timer

5
110
111

00:IN
11:OUT

PA

PB

0:IN
1:OUT

0
0
1

A7

A6

A5

A4

A3

A2

A1

A0

C0H

C/S Shift Select

C1H

PA

C2H

PB

C3H

PC

C4H

TL

C5H

TH

Io/M

Tabla de direccionamiento

Modo

TH

4A

TL 20

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

#6

SI

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

;TL

MVI A,4AH
OUT C5

;TH

LXI H,1030H

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

77h
d
h,bbbbh
a,d

dcr
inx
jnz
jmp

a
h
pool
ppp

lxi
out
inx
mov
out

h,bbbbh
6h
h
a,m
5h

pool:

yyy:

hlt
.data bbbbh
db 77h,44h,3eh,6eh,4dh,6bh,7bh,46h,7fh,4fh,77h

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

yy:

call mostrar
call delay
jz decrecer
jmp volta

decrecer:
dcr a
jnz yy
hlt
delay:
del:
xx:

mvi b,55
mvi c,30
dcr c
jnz xx
dcr b
jnz delay
ret

volta:

call mostrar
call delay
cpi 10h
jnz crece
jmp xx

mostrar:
push psw
out 0h
pop psw
ret
crece:

adi 1
daa
jmp volta

xx:

call mostrar
call delay
jz decrece

Clases de Microprocesadores Prof. B.Barraza.

jmp volta
decrece:

dcr a
jnz xx
hlt

delay:
del1:
yy:

mvi b,5
mvi c,3
dcr c
jnz yy
dcr b
jnz del1
ret

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

;direccion -->

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

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

;direccion <--

rub:
ei
ret

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

; en HL la posicion de memoria

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

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

;direccion -->

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

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

;direccion <--

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

3Eh, 6Eh, 4Dh, 6Bh, 7Bh, 46h, 7Fh, 4Fh


punto
BEh, EEh, CDh, EBh, FBh, C6h, FFh, CFh
punto

.org 1000h
; ------------------------------; PROGRAMA PRINCIPAL
; ------------------------------mvi B, 00h
mvi C, DDh
mvi D, 00h

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

.org 0024h

; Direccion de interrupcin TRAP

; ------------------------------; 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

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

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

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

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

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

;cargamos origen memoria video


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

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

;en registro A el movimiento

comprobador:
de video

;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

;moverse arriba

haz_abajo:
LXI D, down
call pon_punto
ret

;moverse abajo

haz_izqda:
LXI D, left
call pon_punto
ret

;moverse izda

haz_decha:
LXI D, right
call pon_punto
ret

;moverse decha

pon_punto:

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

;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

pon_comida:
push psw
push d
LDA cuanto
adi 10h
STA cuanto

Clases de Microprocesadores Prof. B.Barraza.

LDA
rlc
Mov
rrc
Mvi
INR
ANI
STA

pos

;cargamos la posicion actual

e,a
d,0
a
11b
pos

;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

;ya tenemos la direccion en HL


;coloreamos el punto
;recuperamos lo guardado

fin:
hlt
.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.

También podría gustarte