UNIVERSIDAD DE TARAPACÁ
Escuela Universitaria de Ingeniería

Eléctrica – Electrónica
[Edición 8]

“APUNTES DEL
MICROPROCESADOR 8085”
PROGRAMACIÓN 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
inglés suena como More Noise, que literalmente significa: Más Ruido), así que eligieron
como nombre las siglas de Integrated Electronics, en español Electrónica 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 podía ser utilizado en muchos otros dispositivos sin necesidad de ser rediseñado.
Los chicos de Intel enseguida se dieron cuenta del potencial de este producto, capaz de
dotar de ‘inteligencia’ a muchas máquinas ‘tontas’. El único problema es que Busicom
poseía los derechos, y para recuperarlos Intel tuvo que pagarles 60.000 dólares.
El centro de operaciones de Intel está localizado en Santa Clara, California. La
compañía también tiene instalaciones en Argentina, China, Costa Rica, Malasia,
México, Israel, Irlanda, India, Filipinas, y Rusia. En los Estados Unidos Intel emplea
más de 45.000 personas en Colorado, Massachusetts, Arizona, Nuevo México, Oregón,
Texas, Washington, y Utah
1.1.-Centro de operaciones
El centro de operaciones de Intel está localizado en Santa Clara, California. La
compañía también tiene instalaciones en Argentina, China, Costa Rica, Malasia,
México, Israel, Irlanda, India, Filipinas, y Rusia. En los Estados Unidos Intel emplea
más de 45.000 personas en Colorado, Massachusetts, Arizona, Nuevo México, Oregón,
Texas, Washington, y Utah

1.1.1.-Adquisición de McAfee
El 19 de agosto de 2010 Intel, el mayor fabricante mundial de microchips, anunció la
compra de McAfee, compañía de software de seguridad informática y del cual su
producto más conocido es el antivirus McAfee VirusScan. Al mismo tiempo McAfee ya
había anunciado la inversión en empresas especializadas a su vez en seguridad
dispositivos móviles, como tenCube y Trust Digital, pese a haber obtenido bajos
resultados en el último trimestre. La adquisición anunciada por Intel registra una
operación de 7.680 millones de dólares.

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 diseños de CPU en circuito integrado, tales como el
militar F14 CADC de 1970, fueron implementados como chipsets, es decir
constelaciones de múltiples chips.

Fig.1.2.1.3.-Historia y descripción
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 diseñado y fabricado por el
fabricante de chips Intel, quien previamente hacía semiconductores de chips de
memoria. Marcian "Ted" Hoff formuló la propuesta arquitectónica en 1969. Sin
embargo, la implementación del microprocesador sólo comenzó en 1970 cuando
Federico Faggin fue empleado por Intel, procedente de Fairchild Semiconductor, para
dirigir el proyecto y para diseñar el 4004 (1970-1971). En Fairchild, Faggin había
desarrollado la tecnología pionera llamada Silicon Gate Technology (SGT) y había
también diseñado el primer circuito integrado MOS usando la tecnología SGT (el
Fairchild 3708), en 1968, demostrando la viabilidad de la nueva tecnología.
1.3.1.-Especificaciones técnicas.
 Microprocesador de 4 bits
 Contiene 2.300 transistores
 Encapsulado CERDIP de 16 pines
 Máxima velocidad del reloj 740 KHz
 Usa Arquitectura Harvard, es decir, almacenamiento separado de programas y
datos. Contrario a la mayoría de los diseños 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. Diseñado
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 más de dos veces el ancho del 4004 y tenía 24 pines en lugar de
los 16 del 4004. El 4040 agregó 14 instrucciones, un espacio más grande para el stack (7
niveles en vez de 3), un espacio para programas de 8KB, 8 registros adicionales, y
habilidades de interrupción (incluyendo sombras (shadows) de los primeros 8 registros).
Nuevas características
 Interrupciones
 Ejecución 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 diseñado 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 cumplía
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 diseño 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 circuitería externa para poder ser utilizado. El i8008 puede acceder a 8
puertos de entrada y 24 de salida.

Aunque un poco más 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 más memoria hacen que el i8008 sea en la práctica unas tres o cuatro veces más
rápido que sus predecesores de 4 bits.
1.6.-INTEL 8080
El Intel 8080 fue un microprocesador temprano diseñado y fabricado por Intel. El CPU
de 8 bits fue lanzado en abril de 1974. Corría a 2 MHz, y generalmente se le considera
el primer diseño de CPU microprocesador verdaderamente usable.

1.6.1.-Modelo de programación
El Intel 8080 fue el sucesor del Intel 8008, esto se debía 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
más grande, DIP de 40 pines, se permitió al 8080 proporcionar un bus de dirección de
16 bits y un bus de datos de 8 bits, permitiendo el fácil acceso a 64 KB de memoria.
Tenía siete registros de 8 bits, seis de los cuales se podían 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 máquinas que corrían
el sistema operativo CP/M. Posteriormente, en 1976, aparece el microprocesador Zilog
Z80, completamente compatible con el 8080 pero más capaz, el cual capitalizaría en
esto, convirtiéndose el Z80 y el CP/M en la combinación dominante de CPU y OS del
período, bastante parecido al x86 y el MS-DOS para el PC de la década posterior, los

Clases de Microprocesadores –Prof. B.Barraza.
(años 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 exigía menos soporte de
hardware, así permitía unos sistemas de microordenadores más simples y más baratos
de hacer.
El número 5 de la numeración del procesador proviene del hecho que solamente
requería una alimentación 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 idénticos, 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 más rápido, mientras que el 8088
podía usar menos y más económicos circuitos lógicos de soporte, lo que permitía la
fabricación de sistemas más económicos.
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 máximo y modo mínimo
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 más económico. 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 característica principal del i80186 e i80188 es que utilizándolos es posible reducir
el número de circuitos integrados auxiliares necesarios, al integrar características como
un controlador de acceso directo a memoria (DMA), un controlador de interrupciones,
temporizadores y lógica de selección 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, también 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.

Características
Una de las características interesantes de este procesador es que fue el primer
procesador x86 con modo protegido, en el cual existían cuatro anillos de ejecución y
división 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 permitía el
uso de toda la memoria directamente, habilitando que pudiera ser direccionada hasta 16
MB de memoria con la unidad de gestión de memoria (MMU) lineal del chip y con 1
GB de espacio de dirección lógica.
1.11.-INTEL 80386
El Intel 80386 (i386, 386) es un microprocesador CISC con arquitectura x86.
Durante su diseño se lo llamó 'P3', debido a que era el prototipo de la tercera generación
x86. El i386 fue empleado como la unidad central de proceso de muchos ordenadores
personales desde mediados de los años 80 hasta principios de los 90.

Clases de Microprocesadores –Prof. B.Barraza.
Fabricado y diseñado 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 producción lo hubieran hecho poco rentable.

El hardware de un piloto automático y aerodinámico típico es un conjunto de cinco
CPUs 80386, cada una con su propio circuito impreso. El 80386 es un diseño barato y
probado a fondo que puede implementar un verdadero ordenador virtual. Se han
implementado nuevas prestaciones que lo convierten en resistente a la radiación y
adecuado para uso aeroespacial, pero a este veterano diseño 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 diseñados 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 rápidos que un i386 e i387 a la misma
frecuencia de reloj. De todos modos, algunos i486 de gama baja son más lentos que
los i386 más rápidos.

2.- Constitución básica de un microprocesador 8085.
El microprocesador posee una serie de “bloques internos” que se comunican
entre sí y con el exterior a través de unos conjuntos de líneas denominados buses que
sirven para transmitir señales 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 están 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 líneas (líneas 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
información entre sus distintos bloques internos y para comunicarse con el exterior.
Son un conjunto de 8 bits que utilizan 8 líneas de conexión al exterior, normalmente
denominadas D0 a D7. Por este bus sale y entra información, por tanto se trata de un
bus bidireccional.
2.2.3.- Bus de control
Compuesto por una serie de líneas, variable en número según el componente de
que se trate. Contiene las líneas de sincronización de funciones, pudiendo ser unas de
salida y otras de entrada al microprocesador. Algunas señales 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 aritméticas y lógicas. Para llevar a
cabo este proceso emplean normalmente un registro especial denominado Acumulador
donde almacenan el resultado de las operaciones realizadas. Algunos microprocesadores
poseen más de un acumulador.
Para completar las indicaciones necesarias tras la ejecución de las instrucciones,
el microprocesador emplea además un registro especial de 8 bits denominado Registro

Clases de Microprocesadores –Prof. B.Barraza.
de Estado o Registro de Flags que marcarán distintas características y peculiaridades
de las operaciones desarrolladas. Posteriormente Se verá con más detalle este Registro
de Flags.
En la FIG.12A puede verse también un bloque denominado Control que sirve
para sincronizar el funcionamiento de todo el sistema. Genera señales de sincronismo
para la ALU, memorias y dispositivos de E/S. Las unidades de control generalmente
están constituidas basándose en microprogramación (programación interna no accesible
al usuario) y se encargan de descifrar y ejecutar las instrucciones del programa que
nosotros construyamos.
Puede verse además un bloque compuesto por Registros Internos de 8 bits, se
trata en este caso de una serie de registros (variable según 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 también un bloque de Registros Internos de 16 bits que también son
llamados registros de direccionamiento. Están 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 señalará en todo momento a la cima de la
pila. (La pila estará constituida por un bloque de memoria RAM, donde se almacenarán
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 dirección de la siguiente instrucción 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 ejecución secuencial de las instrucciones.

Clases de Microprocesadores –Prof. B.Barraza.
3.-Arquitectura del microprocesador 8085
Sintetizando, el microprocesador 8085 está constituido básicamente por tres grandes bloques:
una unidad de control, un conjunto de registros y una unidad aritmético-lógica.
-Unidad de control (UC).
-Registros internos del microprocesador (RI).
- Unidad aritmético-lógica ALU

Fig.- Estructura del microcontrolador

Clases de Microprocesadores –Prof. B.Barraza.
3.1.- Unidad de control.
La unidad de control es un bloque de lógica 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 señal de reloj maestro de
microprocesador, por otra, las señales de control de otros elementos del sistema, para
interrumpir la secuencia del programa, y el bus de datos, a través del decodificador de
instrucciones con la información ya interpretada, para que la unidad pueda responder
con las señales 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 operación 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 función básica del microprocesador
consistente en la búsqueda y posterior ejecución de instrucciones. Esta operación es
cíclica mientras no se interrumpa mediante una instrucción de paro (HALT). En el
estado de búsqueda se transfiere una instrucción desde la memoria hasta el
microprocesador y en el estado de ejecución se realiza esta operación.
3.2 Registros internos del microprocesador.
El 8085 tiene una serie de registros de propósito 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 operación.

Clases de Microprocesadores –Prof. B.Barraza.
Los registros de propósito 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
Instrucción (RI), de 8 bits.
El Contador de Programa (CP) es un registro que memoriza la dirección de
la próxima instrucción a ejecutar o bien la dirección de parte de una instrucción formada
por más 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 automáticamente en uno al contenido del CP
cada vez que termina un ciclo de búsqueda, salvo cuando aparece la instrucción HALT
(paro). La señal de RESET, que es una de las entradas de la unidad de control, coloca al
CP a cero e inicializa la ejecución del programa.

3.3.- Unidad aritmético-lógica.
La unidad de proceso completa del 8085 está formada por una ALU (Unidad
aritmético-lógica), que es un circuito combinacional capaz de realizar operaciones de
suma y resta, así como operaciones lógicas, un registro de 8 bits llamado Acumulador
(A) y un conjunto de cinco biestables o flags denominados registros de estado, que
ofrecen información relativa al resultado de las operaciones aritméticas o lógicas que se
realizan.

Fig.3.3.- Unidad aritmética lógica.
Cuando se realiza una operación, el acumulador contiene un operando y uno de los
registros temporales. El resultado de la operación se coloca en el acumulador
reemplazando al dato u operando que contenía anteriormente.

Clases de Microprocesadores –Prof. B.Barraza.
La denominación y situación de cada flag se muestra en el siguiente dibujo. CY es
el señalizador de arrastre, y su contenido pasa a ser 1 cuando se produce acarreo al
realizar una suma. AC es el señalizador 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 más significativo del resultado es 1. En caso contrario, será
cero. Z es el señalizador de cero y se pone a 1 cuando el resultado de una operación ha
sido cero. Por último, P es el flag de paridad y su valor será 1 cuando el número 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. Código máquina y nemónicos
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 número y más 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 codificación binario es muy engorroso para
ser utilizado como lenguaje de programación, ya que un dato o palabra, en un circuito
que utiliza un microprocesador como el 8085, está formado por 8 bits y una dirección
por 16 bits. Además, tales expresiones numéricas resultan ininteligibles.
Por este motivo, los equipos más elementales que se emplean para programar
admiten para la escritura de las instrucciones al menos la codificación hexadecimal. La
traducción a lenguaje binario, también denominado código máquina, se realiza con el
correspondiente decodificador hexadecimal/binario incorporado al equipo.

4.1. Acumulador Registro temporal
Lógicamente este sistema ofrece también grandes inconvenientes, tanto en la fase
de definición como en la de depuración, 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 operación que realiza. Dado el origen de las compañías fabricantes
de este tipo de dispositivos, estas palabras están expresadas en inglés. 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 nemónicos, que significa recordatorio. Por tanto,
las expresiones del microprocesador 8085 son un conjunto de 74 nemónicos
compatibles con las de otros dispositivos de INTEL, pero, desgraciadamente, distintas,
aunque realicen la misma operación, a las de otros fabricantes.
Existen equipos de programación que admiten directamente las instrucciones en
forma de nemónicos. Estos equipos disponen de un programa denominado assembler,
que traduce el programa escrito en leguaje ensamblador el sistema binario, que es el
único código capaz de ser interpretado por la máquina. Los equipos más complejos,
denominados genéricamente sistemas de desarrollo, son capaces de traducir a código
máquina 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 número de instrucciones que cada microprocesador puede interpretar y
ejecutar es distinto en cada caso. Así el 8085 está diseñado para admitir 74 instrucciones
básicas, 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 aritméticas.
5.1.3.-Operaciones lógicas
5.1.4.-Bifurcaciones (salto).
5.1.5.- Instrucciones de stack, /S y control de máquina.

Existe un gran cantidad de clasificaciones que sin lugar a dudas ayudarían a comprender mas
sus características. Pero su dominio no está en memorizarlas sin darle sentido, si no el buscar
herramientas que permitan solucionar requerimientos. En programación siempre se empieza con
la estructura elemental, de allí se arma la estructura total. Si no hay practica no hay maestría.

Í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

Instrucción
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

Instrucción
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

Instrucción
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

Instrucción
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 operación 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 dirección de memoria, cuya dirección 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 dirección de memoria indicada por los registros H-L.
Supongamos que el registro H contiene 00H y el registro L contiene 30H. La instrucción
MOV M, A
almacenará el contenido del acumulador en la posición 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 instrucción:
MVI H, 33H
carga en el registro H el valor 33H, mientras que La instrucción
MVI L, 44H
carga en el registro L el valor 44H.

Direccionamiento:
Inmediato

2

Supuestos los dos ejemplos anteriores, la instrucción
MVI M, Reg

MVI M, 2AH
carga en la posición de memoria 3344H (dirección aportada por los registros H
y L) el valor 2AH.

Clases de Microprocesadores –Prof. B.Barraza.
3

CMP Reg

Comparar registro o memoria con acumulador
El contenido del registro o posición de memoria especificados se compara con el contenido del acumulador. Esta
comparación se realiza restando internamente el contenido del registro al del acumulador, permaneciendo éste invariable, y
colocando los bits de condición en función 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

0
1

0AH:
FBH:
05H:

0
1

0
1

0
1

0
1

1
0

0
1

1

1

1

1

1

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

4

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 instrucción (1) carga en el acumulador el valor 25H.
La instrucción (2) realiza la siguiente operación 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

0
1

25H:
E0H:
05H:

0
1

1
0

0
1

0
1

0
1

0
1

1

1

1

0

0

0

0

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.

S

Z

CPI
Z
Cy
X

A

X>Y
0
0
X

X=Y
1
0
P

X

X<Y
0
1
Cy

Cargar un par de registros con un dato Inmediato
5

LXI Reg,dato
Bits afectados:
Direccionamiento:

LXI es una instrucción 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 instrucción inmediata que acepta un valor de

Clases de Microprocesadores –Prof. B.Barraza.
Inmediato

6

16 bits. El resto trabajan con datos de 8 bits.
Si el par de registros especificados es SP, el segundo byte de la instrucción sustituye a los 8 bits menos significativos del
puntero de pila, mientras que el tercer byte de la instrucción reemplaza a los 8 bits más significativos del puntero de pila.
1. La instrucción
LXI B, 00FFH
carga en el registro B el valor 00H y en el registro C el valor FFH.
2. La siguiente instrucción 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 posición 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 instrucción
STAX B
almacenará el contenido del acumulador en la posición de memoria 3F16H.

7

STA Dir
Direccionamiento:
Directo

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

LDAX Reg

Cargar el acumulador
El contenido de la posición 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 instrucción
LDAX D
cargará en el acumulador el contenido de la posición 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 posición de memoria especificados se incrementa en una
unidad.
Si el registro A contiene 98H, la instrucción
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

8

9

LDA DIR carga el acumulador con el contenido de la memoria direccionada por DIR. La dirección puede ser puesta como un
número, una etiqueta previamente definida o una expresión.
A continuación se introducen en el acumulador el contenido de la posición de memoria 1000H:
LDA 1000H

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

Incrementar par de registros
El número 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
instrucción
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 instrucción
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 Aritmética)
El contenido del registro o posición de memoria especificados se suma al contenido del acumulador, usando
aritmética 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 instrucción
ADD B
realiza la siguiente suma:

El número 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
instrucción
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 instrucción
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 posición de memoria especificados más 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 instrucción 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

1

0

1

0

0

1

1

+

0
0
0
0

El nuevo contenido del acumulador será A6H, mientras que todos los bits de condición quedarán puestos a cero excepto
los de signo y paridad. Si el bit de acarreo hubiera sido 1 antes de realizar la operación, 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

1

0

1

0

0

1

1

El acumulador contendría ahora A7H y todos los bits de condición excepto el de
signo, estarían 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 instrucción (DATOS), al contenido del
acumulador y deja el resultado en el acumulador. El dato debe ser expresado en forma
de número, un ASCII constante, la etiqueta de un valor previamente definido o una

Clases de Microprocesadores –Prof. B.Barraza.

0
0
1
1
expresión. El dato no debe exceder de un byte.
Se utiliza aritmética de complemento a dos.
Ejemplo
A continuación 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 instrucción (2) el valor 20 es 14H.
La instrucción (1) carga en el acumulador el valor 22H.
La instrucción (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 instrucción (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 instrucción, al contenido del
acumulador, añadiendo además el bit del acarreo. El resultado se almacena en el
acumulador (perdiéndose así el anterior contenido del Acumulador).
El dato (DATOS) debe estar especificado en forma de número, en ASCII
constante, como etiqueta de un valor previamente definido o una expresión. 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 instrucción (1) carga en el acumulador el valor 22H.
La instrucción (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

0

0

1

1

0

1

1

+
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 posición de memoria especificados se resta al contenido del acumulador, usando
aritmética de complemento a dos. El resultado se guarda en el acumulador.
Si no hay acarreo del bit de más peso, el bit de acarreo se pone a uno, y viceversa, al contrario de lo que ocurre
con la operación de suma.
Antes de entrar en los ejemplos recordamos que restar utilizando aritmética 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 instrucción
SUB E
realizará la siguiente operación 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

1

1

0

1

1

0

0

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
Descripción
El byte de datos inmediato se resta del contenido del acumulador usando aritmética de complemento a dos. El resultado se
deja en el acumulador.
Ya que se trata de una operación de resta, el bit de acarreo se pone a uno cuando no hay acarreo del bit de más peso, y se pone
a cero si tiene dicho acarreo.
A continuación presentamos un ejemplo con 2 instrucciones:
(1).MVI A, B3H
(2).SUI B3H
La instrucción (1) carga en el acumulador el valor B3H.
La instrucción (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

0

1

0

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 séptimo bit se produce acarreo y se pone el bit de acarreo a cero.
El bit de paridad se pone a uno mientras que los demás 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 aritmética de complemento a dos. El resultado se deja en el acumulador.
Esta instrucción, 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 más peso, poniéndose 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 instrucción (1) carga en el acumulador el valor 00H.
La instrucción (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

1

1

1

1

1

1

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 están 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

Función lógica AND entre registro o Memoria con acumulador
Se realiza la función lógica AND bit a bit entre el contenido del registro o posición de memoria especificados y el contenido
del acumulador. El bit de acarreo se pone a cero.
La tabla de verdad de la función lógica 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 instrucción
ANA B
realiza la siguiente operación:Si el registro B contiene 6CH y el acumulador almacena 3AH, la instrucción
ANA B
realiza la siguiente operación:
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

Función lógica AND entre el acumulador y un Dato Inmediato
Realiza una operación Y lógica entre el dato (DATOS) especificado en la instrucción 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 número, un ASCII constante, la etiqueta de algún valor previamente definido o una
Expresión.
Disponemos de las siguientes instrucciones:
(1).MVI A, A0H
(2).ANI 0FH
La instrucción (1) carga en el acumulador el valor A0H.
La instrucción (2) realiza la siguiente operación 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 instrucción 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

Función lógica O-EXCLUSIVO entre registro o memoria con acumulador.
Se realiza la función lógica O-EXCLUSIVO bit a bit entre el contenido del registro o
posición de memoria especificados y el contenido del acumulador, guardándose el
resultado en este último.
La tabla de verdad de la función lógica 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 instrucción
XRA B
realiza la siguiente operación:
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:

0

1

0

1

0

1

1

0

La función O-EXCLUSIVO de cualquier bit con uno da lugar al complemento del mismo. Así, si el acumulador contiene todo
unos, la instrucción
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 condición de falso o verdadero, actuado o inhibido, etc.
Mediante la función O-EXCLUSIVO podemos determinar cuántos 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

Función lógica O-EXCLUSIVO entre el acumulador y un dato Inmediato
Se realiza la función lógica 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 instrucción se suele utilizar para complementar bits específicos del acumulador dejando los restantes en su estado
original. De este modo y suponiendo que el acumulador contiene ABH, la instrucción
XRI 80H
complementa el bit de más 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

Función lógica OR entre registro o memoria con acumulador
Se realiza la función lógica AND bit a bit entre el contenido del registro o posición 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 función lógica OR es:
A
B
f
0
0
0
0
1
1
1
0
1
1
1
1

Como sea que la función OR de cualquier bit con un uno da como resultado uno, y de
cualquier bit con cero, lo deja invariable, esta función se utiliza frecuentemente para
poner a uno grupos de bits.
Si el registro B contiene OFH y el acumulador almacena 33H, la instrucción
ORA B
realiza la siguiente operación:
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 demás permanecen invariables.

26

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

Función lógica OR entre el acumulador y un dato Inmediato
ORI desarrolla una operación lógica 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 instrucción
ORI F0H
realiza la siguiente operación 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 instrucción 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 número hexadecimal de 8 bits contenido en el acumulador se ajusta como dos dígitos de 4 bits codificados en binario
decimal, según el proceso siguiente:
(1).Si los cuatro bits menos significativos del acumulador representan un número 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 varía.
(2).Si los cuatro bits más significativos del acumulador representan ahora un número mayor que 9, o si el bit de acarreo es
uno, los cuatro bits más 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 más significativos durante el paso (2), se activará el bit de acarreo, poniéndose a cero si no se produce acarreo.

29

Esta instrucción se utiliza en las operaciones de suma de números decimales. Es la única instrucción cuya operación depende
del bit de acarreo auxiliar.
Supongamos que queremos realizar una suma decimal de dos números (40 + 80).
Ambos bits de acarreo están a cero.
La secuencia de instrucciones podría 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 instrucción 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 varía.
2. Como los 4 bits más significativos del acumulador representan un número
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 operación.

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 más alto orden al bit de acarreo y al mismo tiempo a la posición 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 más bajo orden a la posición de más alto
orden del acumulador, además 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 través 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 posición a la derecha. El bit de acarreo que es tratado
como si fuera parte del acumulador se transfiere al bit de más alto orden del acumulador. El bit de menor peso del acumulador
se carga en el bit de acarreo. No existen operandos en la instrucción RAR.

Cy

Az

Acc

Ao
...

JMP dir
35

Salto incondicional
La instrucción JMP DIR altera la ejecución del programa cargando el valor especificado
por DIR en el contador de programa.
JC dir

36

La instrucción JC DIR comprueba el valor del bit de acarreo. Si es un 1 la ejecución del
programa continúa en la dirección especificada por DIR. Si es un 0 el programa
continúa su ejecución normal de forma secuencial.
JNC dir

Saltar si no hay acarreo
La instrucción JNC DIR comprueba el estado del bit acarreo. Si esta a 0 el programa cambia a la dirección especificada por
DIR. Si esta a 1 la ejecución del programa continúa normalmente.

JZ dir

Saltar si hay cero
La instrucción JZ DIR comprueba el bit de cero. Si está a 1 el programa continúa en la
dirección expresada por DIR. Si está a 0 continúa con la ejecución secuencial normal.

JNZ dir

Saltar si no hay cero
La instrucción JNZ DIR comprueba el valor del bit de cero. Si el contenido del acumulador no es cero (Bit de cero = 0) el
programa continúa en la dirección especificada por DIR. Si el contenido del acumulador es cero (Bit de cero = 1) el
programa continúa su ciclo normal.

JM dir

Saltar si hay signo negativo
La instrucción JM DIR comprueba el estado del bit de signo. Si el contenido del acumulador es negativo (bit de signo = 1) la
ejecución del programa continúa en la dirección especificada por DIR. Si el contenido del acumulador es positivo (bit de
signo = 0) continúa la ejecución de la secuencia normal.

37

38

39

40

Clases de Microprocesadores –Prof. B.Barraza.
JP dir

Salta si hay signo positivo
La instrucción JP DIR comprueba el estado de bit del signo. Si el contenido del acumulador es positivo (bit de signo = 0) la
ejecución del programa continúa con la dirección especificada por DIR. Si el contenido del acumulador es negativo (bit de
signo = 1) continúa el programa con su ejecución normal.

JPE dir

Salta si la paridad es par
La paridad existe si el byte que esta en el acumulador tiene un número par de bits. El bit de paridad se pone a 1 para indicar
esta condición.
La instrucción JPE DIR comprueba la situación del bit de paridad. Si esta a 1, la ejecución del programa continúa en la
dirección especificada por DIR. Si esta a 0, continúa con la siguiente instrucción de forma secuencial.
Las instrucciones JPE y JPO son especialmente usadas para comprobar la paridad de los datos de entrada. (Sin embargo con
la instrucción IN los bits no actúan.
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 dirección de la próxima instrucción secuencial) dentro del stack y a
continuación salta a la dirección especificada por DIR.
Cada instrucción CALL o alguna de sus variantes implica una instrucción RET (retorno), de lo contrario el programa podría
"perderse" con consecuencias impredecibles. La dirección debe ser especificada como un número, una etiqueta, o una
expresión. La etiqueta es lo más normal (El ensamblador invierte los bytes alto y bajo de dirección 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

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
continuación salta a la dirección especificada por DIR. Si el bit esta a 0, la ejecución del programa continúa con la próxima
instrucción de su secuencia normal. Aunque el uso de una etiqueta es lo más normal, la dirección puede ser especificada
también como un número o una expresión.

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
continuación salta a la dirección especificada por la instrucción en DIR. Si el bit está a 1, el programa continúa con su
secuencia normal.
Aunque el uso de una etiqueta es lo más común, la dirección puede también estar indicada por un número o por una
expresión.

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 dirección especificada en DIR. Si el bit está a 0 (indicando que el contenido del
acumulador es distinto de cero) el programa continúa 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
dirección especificada por DIR. Si el bit está a 1 el programa continúa 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 dirección especificada por DIR. Si el bit es 0 la ejecución
del programa continúa con su secuencia normal. El uso de la etiqueta es lo más corriente, pero la dirección puede
especificarse también por un número o una expresión.
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 envía el contenido del contador de programa al stack y
salta a la dirección especificada por DIR. Si el bit tiene un 1, continúa el programa
normalmente con la instrucción siguiente.
Llamar si la paridad es par.
Existe paridad en un byte si el número de unos que tiene es par. El bit de paridad se
pone a 1 para indicar esta condición. CPE chequea el valor del bit de paridad. Si tiene
un 1, CPE envía el contenido del contador de programa al stack y salta a la dirección
especificada por la instrucción en DIR. Si el bit tiene un cero, el programa continúa
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 dirección especificada en DIR. Si el bit está a 1 el
programa continúa su desarrollo normal.

45

46

47

48

CP dir
49

CPE dir
50

CPO dir
51

RET
52

Retorno incodicional
Se realiza una operación de retorno incondicional.
La instrucción RET echa fuera dos bytes de datos del stack y los mete en el
registro contador de programa. El programa continúa entonces en la nueva dirección.
Normalmente RET se emplea conjuntamente con CALL.

Clases de Microprocesadores –Prof. B.Barraza.
RC

Retorno si hay acarreo
La instrucción RC comprueba el estado del bit de acarreo. Si tiene un 1 (indicando que
hay acarreo) la instrucción saca dos bytes del stack y los mete en el contador de
programa. El programa continúa en la nueva dirección suministrada. Si el bit es 0, el
programa continúa en la siguiente instrucción de la secuencia normal.

RNC

Retorno si no hay acarreo

53

54
La instrucción RNC comprueba el bit de acarreo. Si está a 0 indicando que no hay
acarreo, la instrucción echa fuera del stack dos bytes y los carga en el contador de
programa. Si el bit está a 1 continúa el ciclo normal.
RZ

Retorno si hay cero
La instrucción RZ comprueba el bit de cero. Si está a 1, indicando que el contenido del acumulador es cero, la instrucción
echa fuera del stack dos bytes y los carga en el contador de programa. Si el bit está a 0, continúa el ciclo normal.

RNZ

Retorno si no hay cero
La instrucción RNZ comprueba el bit cero. Si está a 0, indicando que el contenido del acumulador no es cero, la instrucción
echa fuera del stack dos bytes y los carga en el contador de programa. Si el bit está a 1, continúa el ciclo normal.

RM

Retorno si hay signo negativo
La instrucción RM comprueba el bit de signo. Si tiene un 1, indicando dato negativo en el acumulador, la instrucción echa
dos bytes fuera del stack y los mete en el contador de programa. Si el bit tiene 0, continúa el programa normal con la
siguiente instrucción.

RP

Retorno si hay signo positivo
La instrucción RP comprueba el bit signo. Si está a 0, indicando que el contenido del acumulador es positivo, la instrucción
echa fuera del stack dos bytes y los carga en el contador de programa. Si el bit está a 1 continúa el ciclo normal.

RPE

Retorno si la paridad es par
La instrucción RPE comprueba el bit de paridad. Si está a 1, indicando que existe paridad, la instrucción echa fuera del stack
dos bytes y los carga en el contador de programa. Si el bit está a 0 continúa el ciclo normal. (Existe paridad si el byte que está
en el acumulador tiene un número par de bits, colocándose el bit de paridad a 1 en este caso).

RPO

Retorno si la paridad es impar
La instrucción RPO comprueba el bit de paridad. Si está a 0, indicando que no hay paridad, la instrucción echa fuera del stack
dos bytes y los carga en el contador de programa. Si el bit está a 1, continúa el ciclo normal.

RST

Es una instrucción CALL para usar con interrupciones. RST carga el contenido del
contador de programa en el stack, para proveerse de una dirección de retorno y salta a
una de las "ocho" direcciones determinadas previamente.
Un código de tres bits incluido en el código de operación de la instrucción RST
especifica la dirección de salto. Esta instrucción es empleada por los periféricos cuando
intentan una interrupción.
Para volver a la instrucción en que ha tenido lugar la interrupción, se debe
utilizar una instrucción de RETORNO.
Activar interrupciones
La instrucción EI pone en servicio el sistema de interrupciones a partir de la siguiente
instrucción secuencial del programa. Esta instrucción activa el flip-flop INTE.
Se puede desconectar el sistema de interrupciones poniendo una instrucción DI
al principio de una secuencia, puesto que no se puede predecir la llegada de una
interrupción.
Al final de la secuencia se incluye la instrucción EI que vuelve a habilitar el
sistema de interrupciones. (RESET también pone fuera de servicio el sistema de
interrupciones además de poner el contador de programa a cero).
Desactivar interrupciones
Esta instrucción desactiva el flip-flop INTE. Después de la ejecución de una instrucción DI, el sistema de "interrupciones"
esta sin posibilidad de ponerse en marcha. En aplicaciones que empleen las interrupciones, la instrucción 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 instrucción DI el principio del código de secuencia.
La interrupción TRAP del 8085 no puede ser puesta fuera de servicio. Esta interrupción especial esta prevista para serios
problemas que pueden presentarse independientemente del bit de interrupción (fallo de alimentación, etc.).
Entrada
La instrucción 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 número o una expresión 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 instrucción
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 número de puertos oscila de 0 a 255 y es duplicado en el bus de
direcciones. Es la lógica externa la encargada de seleccionar el puerto y aceptar el dato
de salida. El operando (PORT) debe especificar el número del puerto de salida
seleccionado.

1. La instrucción OUT 2 envía el contenido del acumulador al puerto de salida número 2.
66

HLT

La instrucción HLT detiene el procesador.
El contador de programa contiene la dirección de la próxima instrucción 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 interrupción. Por tanto debemos asegurarnos que las interrupciones estén en disposición
de ser activadas antes de ejecutar la instrucción 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 través de la interrupción 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 propósito básico de la instrucción HLT es permitir una pausa al procesador mientras espera por la interrupción de un
periférico.

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 posición de memoria inmediatamente inferior a la del puntero de stack. El
contenido del segundo registro del par se guarda en la posición de memoria dos unidades inferior al puntero de stack. Si se
hace referencia al para de registros PSW, en el primer byte de información se guarda el estado de los cinco bits de condición.
El formato de este byte es el siguiente:
67

PUSH pr
S

Z

X

A

X

P

X

Cy

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

1. Supongamos que el registro B contiene 3FH, el registro C contiene 16H y el
puntero de pila vale 2030H. La instrucción
PUSH B
almacenará el contenido del registro B en posición de memoria 2029H, el contenido del registro C en la dirección de memoria
2028H, y decrementa dos unidades el puntero de stack, dejándolo en 2028H.
Gráficamente podemos ver el proceso anterior:
Antes de PUSH
Puntero
Stack
2030
Registro B
3F

Después 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 condición de cero,
acarreo y paridad están a uno, mientras que los de signo y acarreo auxiliar están a cero. La instrucción
PUSH PSW

Clases de Microprocesadores –Prof. B.Barraza.
Almacena el contenido del acumulador en la posición de memoria 1028H, y coloca el valor 47H, correspondiente a los
citados estados de los bits de condición, en la posición 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 posición de memoria direccionada por el stack pointer
en el registro de bajo orden del par de registros especificados. A continuación se
incrementa el stack pointer en 1 y copia el contenido de la dirección resultante en el
registro de más 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 localización 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 instrucción
POP B
Carga el registro C con el valor de 16H de la posición de memoria 2028H, carga el registro B con el valor 3FH de la posición
2029H, e incrementa dos unidades el puntero de stack, dejándolo en 2030H. Gráficamente podemos ver este proceso:

Antes de POP
Después 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 instrucción
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

0

=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.
Téngase 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 además no afecta a ningún otro bit.

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

Clases de Microprocesadores –Prof. B.Barraza.
2. Al ejecutar la instrucción
DAD H
se duplica el valor del número de 16 bits contenido en H – L (equivale a desplazar los 16 bits una posición 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 instrucción XCHG realiza el siguiente
intercambio:
Antes de ejecutar XCHG
Despues de ejecutar XCHG
D

E

H

L

03

04

01

02

71

XTHL

D

E

H

L

01

02

03

04

Intercambiar datos con el stack

XTHL cambia los dos bytes de la posición más 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 posición 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 instrucción
Después de XTHL
Antes de XTHL

Puntero
Stack
40B4
Registro H
DD

Registro L
CC

Puntero
Stack
40B4
Registro H
AA

DIRECCION

DIRECCION

00

40B3

00

40B3

BB

40B4

CC

40B4

AA

40B5

DD

40B5

00

40B6

00

SPHL

MEMORIA

MEMORIA

72

Registro L
BB

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 instrucción
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 PROGRAMACIÓN LENGUAJE
ASSEMBLER 8085.
Para programar en lenguaje assembler, se debe dominar las 74 instrucciones del
microprocesador, esto es el requicito mínimo 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 programación assembler
es crear la lógica por medio de un fluxograma. Por ende recomiendo hacer ejercicios de
lógica a travéz de esta herramienta.
Existen programas para ensamblar del m-8085, que sin lugar a dudas os ayudarán a tener una
programación mas flexible y natural.
A continuación 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 ARITMÉTICAS

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 LÓGICAS.

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 ROTACIÓN Y FLAGS

RLC
RRC
RAL
RAR
CMA
CMC
STC

Rotacion izqda
Rotación 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 BIFURCACIÓN
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 programación 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 estás 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 ejecución. 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

Descripción: 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 almacenarán de
forma inversa. Ambos con el mismo tamaño N. La manera que abordé este problema fue
empezar a recorrer en forma decreciente la tabla BC y su información se almacenaba en el
acumulador a mismo tiempo que se transfería 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 Ejecución 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 cómo 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 dirección de la primera
instrucción a ser ejecutada. Luego, el PC se incrementa automáticamente recorriendo
secuencialmente los sucesivos lugares de memoria donde se halla el programa.

7.2 Ciclos de operación.
Hay dos operaciones fundamentales que realiza un procesador:
- Búsqueda de la instrucción: en la cual el procesador busca el código de
operación(FETCH).
- Ejecución de la instrucción: en la cual el procesador ejecuta la operación determinada por
la instrucción. Un procesador se encuentra siempre haciendo una de las dos operaciones
anteriores.
4.2.1.-Ciclo de instrucción
Es el tiempo total, medido en números de períodos de reloj, de duración de un ciclo de
búsqueda más uno de ejecución de la instrucción teniendo en cuenta los sucesivos accesos a
memoria en el caso de ser una instrucción de más de un byte.
4.2.2.-Ciclo de máquina
Es el tiempo, medido en números de períodos de reloj de duración de una operación de
lectura, de escritura o de búsqueda (Fetch) de una instrucción. Un ciclo de instrucción está
compuesto por uno o varios ciclos de máquina (M1, M2, M3,M4), dependiendo del tipo de
instrucción.
Se denomina M1 al ciclo de búsqueda, pues siempre es el primero de cada ciclo de
instrucción. Los ciclos de máquina más 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 máquina son las operaciones básicas realizadas por el procesador,
mientras que las instrucciones se ejecutan. El tiempo necesario para realizar cada ciclo de la
máquina se expresa en términos de Tstates. Un T-estado es el período de tiempo de un ciclo
de reloj del microprocesador.The various machine cycles are (los diferentes ciclos de la
máquina 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
MVI A,03
DCR A

; 4T

JNZ XX

; 10T/7T Salta ocupando 10T

next inst.

xx:

; 7T Aqui N=03

; ......

HLT

; 4T

7T
4T

4T

4T

N

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

X

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 operación.

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 operación 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 están 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 están en 0.
a. MVI B, A9H
MVI C, 34H
ADD B
SUB C
MOV D, A
MVI A, 7DH
ORA D
MOV H, A
CMA
XRA H
MOV C, H
MOV A, D
HLT

b. MVI A, 03H
RLC
RAR
MVI E, 76H
CMP E
MOV B, A
MOV H, B
MOV L, H
SUI 21H
ANA L
MOV C, L
INR C
HLT

c.

MVI C, D1H
INR A
ANA C
MOV D, C
ANA D
ADI 4CH
MOV L, A
DCR L
XRI 24H
ORA L
DCR L
MOV L, A
HLT

5.
Especificar los contenidos de registros y banderas afectados, cuando las siguientes
instrucciones se ejecutan. Asuma registros inicialmente en 0
a. MVI L, 04H
ADI 2BH
SUB L
MOV B, A
RAL B
CMP B
HLT

b. CMA
XRI 56H
MOV B, A
MOV D, B
ADD D
ORA D
HLT

c. MVI C, 71H
MVI D, 29H
MOV A, D
SUB D
ADD C
ANA D
HLT

d. MVI H, 8AH
DCR H
DCR H
ORI 9DH
ANI 36H
SUB H
HLT

6.
Especificar los contenidos del acumulador y bit status CY para las siguientes instrucciones.
Explicar el significado del carry flag, si está en 1.
a

MVI A, B7H
RLC
RLC
RLC
RLC
HLT

b

MVI A, B7H
RAL
RAL
RAL
RAL
HLT

c. MVI A, B7H
RRC
RRC
RRC
RRC
HLT

d. MVI A, B7H
RAR
RAR
RAR
RAR
HLT

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

Clases de Microprocesadores –Prof. B.Barraza.
10.
Escriba 8085 en lenguaje ensamblador para a) cargar 00h en el acumulador b) disminuir el
acumulador 1 cuatro veces c) transferir la respuesta a otros registran disponible en 8085
microprocesador.
11.
Escribir instrucciones para cargar el 65H número hexadecimal en el registro C y 92H en el
acumulador. Muestra el número 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
ejecución de las siguientes instrucciones (Seguimiento de programa ejecutándose paso a paso).
A

C

D

E

H

L

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, localización de memoria 2355H y las banderas,
cuando se ejecutan las siguintes instrucciones.
A

H

L

S

Z

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.

P

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 ubicación de memoria a
partir de 2000H ubicación. La transferencia de los datos a la ubicación 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 ubicación. Muestra la suma en 3000H ubicación. 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 posición 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, localización de memoria 2070H y flag Z cuando las
siguientes instrucciones son ejecutadas
A

Z

HL

2070H

MVI A, 7FH
ORA A
CPI 12H
LXI H, 2070H
MVI M, 7FH
CMP M
21.
Definir el mnemonic, código de máquina, tamaño de la palabra y operación 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 dirección 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 dirección 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 ejecución de las instrucciones
1. (a)
A

B

C

H

L

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)

A

B

C

LXI B,D912

D9

12

LXI D,2145H

D9

LXI H,BA2CH

MVI A,82H

D

E

H

L

12

12

45

D9

12

12

45

BA

CY

P

2C

82

ADI 96H

18H

“

“

“

“

“

“

1

1

RAR

8C

“

“

“

“

“

“

0

1

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, después de la ejecución 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 número 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 localización 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 localización 2080H
DATOS (H): 31, 23, 78, 1A, 2D, 69
7.
Considerando la información del programa 6, ahora escribir un programa para transferir los
datos en forma inversa (Ej: el dato de la localización 1055H es copiado a la posición 2085H, el dato de
la localización 1056H es copiado a la posición 2084H y así sucesivamente.
Cuales son los contenidos de la posición 2080H a 2085H, después de la ejecución del programa?

Clases de Microprocesadores –Prof. B.Barraza.
LABORATORIO
1.-

Ensamblar el siguiente programa

,DEFINE
TAMAÑO
VALOR

100H
430H

.ORG 0
LXI
MOV
INX
MOV
DCR

H,TAMAÑO
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 código 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 desvío y de control. La instrucción MOV A,B no afecta
ningún flag , por lo tanto, no afecta el flag de zero (Z). Si lo hace la instrucción DCR C.
Label
volta:

Instrucción
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, desvía para "fim"
Copia contenido de B en A. No afecta ningún flag.
Desvío incondicional para "volta".
Esta instrucción para el procesamiento del programa

2. Ejemplo similar al anterior, pero usando la instrucción JZ dirección y JMP dirección.
Label

volta:

Instrucción
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.
Desvía 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 comparación entre registros (A e B). La operación de comparación 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:

Instrucción
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 ningún flag.
Si el resultado de DCR C no fue ZERO, desvía para "volta"
Esta instrucción para el procesamiento del programa

Clases de Microprocesadores –Prof. B.Barraza.
4. Ejemplo similar al anterior, pero usando la instrucción JC dirección a diferencia de JNC dirección.
Label

fim:
.

Comentario

MVI B,00h
volta:

Instrucción
MVI A,07h

La operación de comparación 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 instrucción HLT

INC B
CMP B
JC fim
JMP volta
HLT

5. Programa que realiza la multiplicación de 4 por 3. Es usada a instrucción ADI dato8

6. Otra versión de programa que hace la multiplicación de 4 por 3. La instrucción ADI dato8 é
substituida por la instrucción 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 multiplicación 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 envía 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, después de pasar por todos os valores de 00 a FFh

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

Clases de Microprocesadores –Prof. B.Barraza.
10. Subrutina de atraso de 10 ms. Se supone un tiempo de 1μs para cada estado.

Clases de Microprocesadores –Prof. B.Barraza.
GUIA 3 DE MICROPROCESADOR
1. Cite todas las instrucciones posibles a partir de la instrucción genérica 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 instrucción MVI M, 08h?
3. A qué grupo de instrucciones pertenece la instrucción MVI M, 08h?
4. Explique en pocas palabras como funciona a pila en el 8085. Muestre a través de un mapa de
memoria, a evolución 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 través de un mapa de memoria, la evolución 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
Dirección de la llamada de subrutina “CALL SUMA”: 2020 h
6. Muestre la evolución de la pila en la ejecución de la instrucción 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 están dentro de la sub-rutina que se inicia en la
posición 033CH), en las mismas condiciones del ejercicio anterior, suponiendo de que la dirección de
la instrucción CALL 033C h es 0038 h.
7. Considere o programa abajo en mnemónico, y responda las preguntas siguientes, sabiendo que a
subrutina en la dirección 0200 h provoca un retardo de 1ms e afecta el registro B.

Clases de Microprocesadores –Prof. B.Barraza.
(b) Diseña una tabla mostrando las direcciones y contenido de la pila después de la ejecución de la
instrucción 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 dirección 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 señales de control involucradas, los buses de dirección y datos
a) MOV B, M
b) LXI D, 4050 h
c) MOV E, B.
12. Haga comentarios de cada línea del programa siguiente: Explique cuál es la finalidad del programa
Complete las direcciones.

4.2 Ejemplos de Programas en Assembly
La presente sección muestra dos ejemplos de programación 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 número contenido en una
tabla
en memoria. La tabla contiene números aleatorios y tiene inicio en la dirección 2050h y termina en la
dirección 205Fh.
5. Repita el problema anterior, seleccionando e mostrando el menor número.

Clases de Microprocesadores –Prof. B.Barraza.
6. Realice un programa que selecciona y muestra en el display los números impares contenidos en una
Tabla inserta en la memoria. La tabla contiene números aleatorios y tiene inicio en la dirección 2050h
e termina en la dirección 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 ordenación en orden creciente de una tabla conteniendo 16
Números de 8 bits. Los números ya están en la memoria a partir de la dirección 2050h y deben ser
mantenidos en la misma tabla, pero ordenados.
8. Adapte el programa del problema 7 para ordenar los números en orden decreciente.
9. Realice un programa que selecciona y muestra en el display los números mayores o iguales a 20h y
menores que 50h, de una tabla con 16 números, comenzando en la dirección 2050 h.
Sugestión 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 números fuera del intervalo.
11. Ejecute las instrucciones dadas a continuación, indicando la dirección de cada instrucción y
contenido de los registros registradores pedidos e de las banderas de carry e de zero, después de la
ejecución de la instrucción 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

S

Z

X

A

X

P

X

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 POP’s as there are
PUSH’s.
– 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 cómo
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 simulación PUSH.
Lo que hacemos es posicionarnos en la dirección FFFFH, decrementamos 2 posiciones en el
SP almacenado los registros B, y C en la dirección 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 simulación POP.

Clases de Microprocesadores –Prof. B.Barraza.
6.- IN/OUT Puertas de entrada/ salida DISPLAY
Debemos tener en claro que estamos trabajando con números 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 Cátodo común

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 Cátodo común

En el nivel más básico 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). Nótese que la
configuración 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

D

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 diseñar un programa para el microcomputador 8085 de la figura, que permita leer u teclado
numerico del 0 al 9, e que codifica su información en ASCII (0=30h, 1=31,..... 9=39h) conectado al
puerto PB, tal como muestra la siguiente figura. Se entiende que sólo 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 información correcta. Puede generarse una
tabla donde este almacenada la información de cada digito asociada al display.
Crystal=6,144Mz
Teclado numérico
AD0

PB3

a

AD7

f
p

b
g

e

c
d

LED´s
Port A
A0 IO/M

A7
A5
A6

A1
A2

A3
GROUND
A4

RD
WR
3
PC

Cs
2.-

E1

Usando decodificadores 3/8, puertas NAND, diseñar un direccionamiento de puertas con las siguientes
características:
E2
8 DISPOSITIVOS DE ENTRADA,
E3
8 DISPOSITIVOS DE SALIDA

3. -

DIRECCOION INICIAL
DIRECCIÓN DE INICIO

A0
E8.

a) Explique el proceso de diálogo, modo 1, cuando una puerta B del 8155, está recibiendo información
de un conversor análogo 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

0

COH

PB

1

2

3

IN

4

5

7

8

6

9

MICROPROCESADOR

8085
PA

PC
timer

1

A7

Mas significativo

OUT

C4H

500Hz

Menos significativo

A5
A6

TL

C5H

0
1

TH

OUT

TIMER

001
010
DECODIFICADOR
3/8

0

0

PC

0

1

00: timer
no opera
01: Stop
timer
10:Stop timer después
de completar una cuesta
11:Stop
Timer

011
100

Selecciona la puerta de
salida 5

INTERR

0

000

101
5
110
111

1

00:IN
11:OUT

PA

PB

0

1

0:IN
1:OUT

0
0

A7

A6

A5

A4

A3

A2

A1

A0

1

1

0

0

0

X

X

X

1

1

0

0

0

0

0

0

C0H

C/S Shift Select

1

1

0

0

0

0

0

1

C1H

PA

1

1

0

0

0

0

1

0

C2H

PB

1

1

0

0

0

0

1

1

C3H

PC

1

1

0

0

0

1

0

0

C4H

TL

1

1

1

0

0

0

1

0

1

C5H

TH

Io/M

Tabla de direccionamiento

Modo

0

1

0

1

1

0

1

0

1

0

4A

0

1

TL 20

0

0

TH

0

1

0

0

0

1

0

0

0

1

0

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 señal digital y periódicamente 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 señal digital
correspondiente digamos de 01000011 en código binario de 8 bits.
Internamente, el microprocesador compara este numero binario con un numero, también binario, que representa
la temperatura deseada supóngase 01001000 para 23 ° C, Que es el valor deseado de temperatura que
previamente se ha introducido a través de un teclado y almacenado en un registro. Como resultado de la
comparación, 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 vía 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
Apéndice 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 inglés) son algunos
ejemplos que pasamos a comentar en las secciones siguientes.

Demostración:
Nombre:
Procesador:
Dispositivos:
Líneas:

negativo.asm
8085
Pantalla Grafica (256)
28

Descripción:
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

Demostración:
Nombre:
leds.asm
Procesador: 8085
Dispositivos: Panel de Leds (1 linea)
Generador de Interrupciones
Líneas:
47
Descripción:
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
Líneas:
59
Descripción:
Simulación de un terminal de texto.
; Ejemplo de programa
; Simulador de terminal
; Asociado a interrupción 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 interrupción 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
Líneas:
83
Descripción:
Programa que convierte a un 8085 en un reloj digital con segundero y minutero.
; Ejemplo de programa
; Reloj digital
; Asociado a interrupción 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 interrupción 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
Líneas:
236
DESCRIPCIÓN:
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
;Tamaño 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 algún aporte en el
camino de la enseñanza, rescatando ejemplo de mis compañeros
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
límite del conocimiento nos lo ponemos nosotros...

paul.terrazas.lazaro@gmail.com

Clases de Microprocesadores –Prof. B.Barraza.

Más contenido relacionado

DOCX
Platos tipicos de los 9 departamentos de bolivia
PDF
PLANOS CABLEADO ESTRUCTURADO
PDF
Diseño de interfaces Fundamentos de UI y UX
PPSX
Tipos de redes
PPTX
Presentacion sensores digitales y analogicos
PDF
Investigacion de torres de enfriamiento
PPTX
Sesión 6: Teoría Básica de Transistores BJT
DOCX
Ejemplos de lazo abierto
Platos tipicos de los 9 departamentos de bolivia
PLANOS CABLEADO ESTRUCTURADO
Diseño de interfaces Fundamentos de UI y UX
Tipos de redes
Presentacion sensores digitales y analogicos
Investigacion de torres de enfriamiento
Sesión 6: Teoría Básica de Transistores BJT
Ejemplos de lazo abierto

La actualidad más candente (20)

PDF
Instrucciones del-8085 eiee
PDF
Cuadro comparativo de familias logicas
PPTX
Arquitecturas harvard y von neumann
PPTX
Algebra Booleana 2
PDF
Sumador en Paralelo de Circuito Integrado
PPTX
Ciclos de instrucciones 8085
PPT
Estructura datos pilas y colas
PDF
Circuitos digitales-problemas
PPTX
Segmentacion de memoria
DOCX
Ejemplos de simplex
PDF
Los factores de forma
PPTX
El transistor como amplificador
DOCX
Transformador monofasico en vacio
PPTX
Familias Lógicas
PDF
L09 sumador restador-binariode8bits
PDF
Registros de desplazamiento
PPSX
Las fuentes de alimentación conmutadas (switching)
PDF
Modulacion en frecuencia fm
PPTX
Procesos Ligeros: Hilos o Hebras
 
Instrucciones del-8085 eiee
Cuadro comparativo de familias logicas
Arquitecturas harvard y von neumann
Algebra Booleana 2
Sumador en Paralelo de Circuito Integrado
Ciclos de instrucciones 8085
Estructura datos pilas y colas
Circuitos digitales-problemas
Segmentacion de memoria
Ejemplos de simplex
Los factores de forma
El transistor como amplificador
Transformador monofasico en vacio
Familias Lógicas
L09 sumador restador-binariode8bits
Registros de desplazamiento
Las fuentes de alimentación conmutadas (switching)
Modulacion en frecuencia fm
Procesos Ligeros: Hilos o Hebras
 
Publicidad

Destacado (20)

PPT
El Microprocesador 8085
DOC
1972 microprocesador 8008
DOC
Procesador intel 8086
PDF
Processadores intel 8008 e 8080
DOC
01 intel 8086 y 8088
PPTX
Microprocesador 8080
PPTX
80286 80386-80486
DOCX
Tabla microprocesadores
DOCX
Microprocesador
PDF
Tema 2 Hardware
PPTX
Tipo de microprocesador
DOC
1979 microprocesador 8088
PPTX
Arquitectura y Estructura del Computador
DOC
1974 microprocesador 8080
PPTX
Registro de banderas y alu
PPTX
EL INVESTIGADOR
PPTX
Cronología de la evolución de los procesadores con tecnología de multiprogram...
PDF
UNIDAD IV
PDF
Lenguaje ensamblador y programacion para ibm pc y compatibles
PDF
Processadores intel 4000 a 4004
El Microprocesador 8085
1972 microprocesador 8008
Procesador intel 8086
Processadores intel 8008 e 8080
01 intel 8086 y 8088
Microprocesador 8080
80286 80386-80486
Tabla microprocesadores
Microprocesador
Tema 2 Hardware
Tipo de microprocesador
1979 microprocesador 8088
Arquitectura y Estructura del Computador
1974 microprocesador 8080
Registro de banderas y alu
EL INVESTIGADOR
Cronología de la evolución de los procesadores con tecnología de multiprogram...
UNIDAD IV
Lenguaje ensamblador y programacion para ibm pc y compatibles
Processadores intel 4000 a 4004
Publicidad

Similar a Microprocesador 8085 Apuntes assembler (20)

PPTX
Intel
PDF
Generacion del Procesador
PDF
Evolución de los procesadores Cisc
PPTX
Evolucion de los microprocesaodres.pps
PPTX
Laura daniela cortes herrera
PPTX
Microprocesador
PDF
Evolución de los procesadores cisc
PDF
Evolución de los procesadores cisc 2
DOCX
Intel pentium
PDF
Historia de los procesadores intel
PDF
Historia de los procesadores intel
PPTX
Presentacion de arquitectura
PPTX
PPTX
PPTX
Evolución del microprocesador
PPTX
Microprocesador
DOCX
Microposesadores
DOCX
Microposesadores
PDF
David arias microoprocesadores
PPSX
Microprocesadores.ppsx carlos mario
Intel
Generacion del Procesador
Evolución de los procesadores Cisc
Evolucion de los microprocesaodres.pps
Laura daniela cortes herrera
Microprocesador
Evolución de los procesadores cisc
Evolución de los procesadores cisc 2
Intel pentium
Historia de los procesadores intel
Historia de los procesadores intel
Presentacion de arquitectura
Evolución del microprocesador
Microprocesador
Microposesadores
Microposesadores
David arias microoprocesadores
Microprocesadores.ppsx carlos mario

Más de Universidad de Tarapaca (11)

PDF
Systemas Y Control Automatco para ingenieros eléctricos
PDF
Pspice fuentes dependientes
DOC
Programa de asignatura analisis de sistemas
DOC
La transformación fasorial analisis de sistemas
DOC
Analisis de sistemas introduccion
PDF
Informe 1 Electronica I Laboratorio
PDF
Informe 2 de Electronica I laboratorio
PDF
Ciencias Materiales
PDF
Uta como resolver problemas de quimica genral tomo II
PDF
Uta como resolver problemas de quimica general tomo 1
PDF
8080 8085 assembly language_programming manual programando
Systemas Y Control Automatco para ingenieros eléctricos
Pspice fuentes dependientes
Programa de asignatura analisis de sistemas
La transformación fasorial analisis de sistemas
Analisis de sistemas introduccion
Informe 1 Electronica I Laboratorio
Informe 2 de Electronica I laboratorio
Ciencias Materiales
Uta como resolver problemas de quimica genral tomo II
Uta como resolver problemas de quimica general tomo 1
8080 8085 assembly language_programming manual programando

Último (20)

PDF
Ficha de Atencion a Estudiantes RE Ccesa007.pdf
PDF
Lo que hacen los Mejores Profesores de la Universidad - Ken Bain Ccesa007.pdf
PDF
ACERTIJO EL CONJURO DEL CAZAFANTASMAS MATEMÁTICO. Por JAVIER SOLIS NOYOLA
DOCX
Fisiopatologia bdjdbd resumen de cierta parte
PDF
El Genero y Nuestros Cerebros - Gina Ripon Ccesa007.pdf
PDF
Jodorowsky, Alejandro - Manual de Psicomagia.pdf
PDF
Aprendizaje Emocionante - Begoña Ibarrola SM2 Ccesa007.pdf
DOCX
TEXTO DE TRABAJO DE EDUCACION RELIGIOSA - PRIMER GRADO.docx
PDF
Házlo con Miedo - Scott Allan Ccesa007.pdf
DOCX
TEXTO DE TRABAJO DE EDUCACION RELIGIOSA - TERCER GRADO.docx
PPTX
fisiologia respiratoria pediatria ruza.pptx
PDF
UNIDAD 2 | La noticia como género: Informar con precisión y criterio
PDF
Didáctica de las literaturas infantiles.
PDF
Los hombres son de Marte - Las mujeres de Venus Ccesa007.pdf
PDF
MODULO I ENFERMERIA BASICA.pdf HIstoria en enfermeria
PPTX
PRESENTACIÓN SOBRE LA RELIGIÓN MUSULMANA Y LA FORMACIÓN DEL IMPERIO MUSULMAN
PDF
Los10 Mandamientos de la Actitud Mental Positiva Ccesa007.pdf
PPTX
LAS MIGRACIONES E INVASIONES Y EL INICIO EDAD MEDIA
PDF
Texto Digital Los Miserables - Victor Hugo Ccesa007.pdf
PDF
KOF-2022-espanol-mar-27-11-36 coke.pdf jsja
Ficha de Atencion a Estudiantes RE Ccesa007.pdf
Lo que hacen los Mejores Profesores de la Universidad - Ken Bain Ccesa007.pdf
ACERTIJO EL CONJURO DEL CAZAFANTASMAS MATEMÁTICO. Por JAVIER SOLIS NOYOLA
Fisiopatologia bdjdbd resumen de cierta parte
El Genero y Nuestros Cerebros - Gina Ripon Ccesa007.pdf
Jodorowsky, Alejandro - Manual de Psicomagia.pdf
Aprendizaje Emocionante - Begoña Ibarrola SM2 Ccesa007.pdf
TEXTO DE TRABAJO DE EDUCACION RELIGIOSA - PRIMER GRADO.docx
Házlo con Miedo - Scott Allan Ccesa007.pdf
TEXTO DE TRABAJO DE EDUCACION RELIGIOSA - TERCER GRADO.docx
fisiologia respiratoria pediatria ruza.pptx
UNIDAD 2 | La noticia como género: Informar con precisión y criterio
Didáctica de las literaturas infantiles.
Los hombres son de Marte - Las mujeres de Venus Ccesa007.pdf
MODULO I ENFERMERIA BASICA.pdf HIstoria en enfermeria
PRESENTACIÓN SOBRE LA RELIGIÓN MUSULMANA Y LA FORMACIÓN DEL IMPERIO MUSULMAN
Los10 Mandamientos de la Actitud Mental Positiva Ccesa007.pdf
LAS MIGRACIONES E INVASIONES Y EL INICIO EDAD MEDIA
Texto Digital Los Miserables - Victor Hugo Ccesa007.pdf
KOF-2022-espanol-mar-27-11-36 coke.pdf jsja

Microprocesador 8085 Apuntes assembler

  • 1. UNIVERSIDAD DE TARAPACÁ Escuela Universitaria de Ingeniería Eléctrica – Electrónica [Edición 8] “APUNTES DEL MICROPROCESADOR 8085” PROGRAMACIÓN EN LENGUAJE ASSEMBLER AUTOR: PAUL TERRAZAS L. ARICA – CHILE 2013 Clases de Microprocesadores –Prof. B.Barraza.
  • 2. 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 inglés suena como More Noise, que literalmente significa: Más Ruido), así que eligieron como nombre las siglas de Integrated Electronics, en español Electrónica 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 podía ser utilizado en muchos otros dispositivos sin necesidad de ser rediseñado. Los chicos de Intel enseguida se dieron cuenta del potencial de este producto, capaz de dotar de ‘inteligencia’ a muchas máquinas ‘tontas’. El único problema es que Busicom poseía los derechos, y para recuperarlos Intel tuvo que pagarles 60.000 dólares. El centro de operaciones de Intel está localizado en Santa Clara, California. La compañía también tiene instalaciones en Argentina, China, Costa Rica, Malasia, México, Israel, Irlanda, India, Filipinas, y Rusia. En los Estados Unidos Intel emplea más de 45.000 personas en Colorado, Massachusetts, Arizona, Nuevo México, Oregón, Texas, Washington, y Utah 1.1.-Centro de operaciones El centro de operaciones de Intel está localizado en Santa Clara, California. La compañía también tiene instalaciones en Argentina, China, Costa Rica, Malasia, México, Israel, Irlanda, India, Filipinas, y Rusia. En los Estados Unidos Intel emplea más de 45.000 personas en Colorado, Massachusetts, Arizona, Nuevo México, Oregón, Texas, Washington, y Utah 1.1.1.-Adquisición de McAfee El 19 de agosto de 2010 Intel, el mayor fabricante mundial de microchips, anunció la compra de McAfee, compañía de software de seguridad informática y del cual su producto más conocido es el antivirus McAfee VirusScan. Al mismo tiempo McAfee ya había anunciado la inversión en empresas especializadas a su vez en seguridad dispositivos móviles, como tenCube y Trust Digital, pese a haber obtenido bajos resultados en el último trimestre. La adquisición anunciada por Intel registra una operación de 7.680 millones de dólares. Clases de Microprocesadores –Prof. B.Barraza.
  • 3. 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 diseños de CPU en circuito integrado, tales como el militar F14 CADC de 1970, fueron implementados como chipsets, es decir constelaciones de múltiples chips. Fig.1.2.1.3.-Historia y descripción 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 diseñado y fabricado por el fabricante de chips Intel, quien previamente hacía semiconductores de chips de memoria. Marcian "Ted" Hoff formuló la propuesta arquitectónica en 1969. Sin embargo, la implementación del microprocesador sólo comenzó en 1970 cuando Federico Faggin fue empleado por Intel, procedente de Fairchild Semiconductor, para dirigir el proyecto y para diseñar el 4004 (1970-1971). En Fairchild, Faggin había desarrollado la tecnología pionera llamada Silicon Gate Technology (SGT) y había también diseñado el primer circuito integrado MOS usando la tecnología SGT (el Fairchild 3708), en 1968, demostrando la viabilidad de la nueva tecnología. 1.3.1.-Especificaciones técnicas.  Microprocesador de 4 bits  Contiene 2.300 transistores  Encapsulado CERDIP de 16 pines  Máxima velocidad del reloj 740 KHz  Usa Arquitectura Harvard, es decir, almacenamiento separado de programas y datos. Contrario a la mayoría de los diseños 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.
  • 4. 1.4.-INTEL 4040 El Intel 4040 fue el sucesor del Intel 4004. Fue lanzado al mercado en 1974. Diseñado 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 más de dos veces el ancho del 4004 y tenía 24 pines en lugar de los 16 del 4004. El 4040 agregó 14 instrucciones, un espacio más grande para el stack (7 niveles en vez de 3), un espacio para programas de 8KB, 8 registros adicionales, y habilidades de interrupción (incluyendo sombras (shadows) de los primeros 8 registros). Nuevas características  Interrupciones  Ejecución 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 diseñado 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 cumplía 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 diseño 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.
  • 5. gran cantidad de circuitería externa para poder ser utilizado. El i8008 puede acceder a 8 puertos de entrada y 24 de salida. Aunque un poco más 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 más memoria hacen que el i8008 sea en la práctica unas tres o cuatro veces más rápido que sus predecesores de 4 bits. 1.6.-INTEL 8080 El Intel 8080 fue un microprocesador temprano diseñado y fabricado por Intel. El CPU de 8 bits fue lanzado en abril de 1974. Corría a 2 MHz, y generalmente se le considera el primer diseño de CPU microprocesador verdaderamente usable. 1.6.1.-Modelo de programación El Intel 8080 fue el sucesor del Intel 8008, esto se debía 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 más grande, DIP de 40 pines, se permitió al 8080 proporcionar un bus de dirección de 16 bits y un bus de datos de 8 bits, permitiendo el fácil acceso a 64 KB de memoria. Tenía siete registros de 8 bits, seis de los cuales se podían 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 máquinas que corrían el sistema operativo CP/M. Posteriormente, en 1976, aparece el microprocesador Zilog Z80, completamente compatible con el 8080 pero más capaz, el cual capitalizaría en esto, convirtiéndose el Z80 y el CP/M en la combinación dominante de CPU y OS del período, bastante parecido al x86 y el MS-DOS para el PC de la década posterior, los Clases de Microprocesadores –Prof. B.Barraza.
  • 6. (años 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 exigía menos soporte de hardware, así permitía unos sistemas de microordenadores más simples y más baratos de hacer. El número 5 de la numeración del procesador proviene del hecho que solamente requería una alimentación 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 idénticos, 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 más rápido, mientras que el 8088 podía usar menos y más económicos circuitos lógicos de soporte, lo que permitía la fabricación de sistemas más económicos. 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 máximo y modo mínimo Bus de direcciones y datos multiplexados Clases de Microprocesadores –Prof. B.Barraza.
  • 7. 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 más económico. 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 característica principal del i80186 e i80188 es que utilizándolos es posible reducir el número de circuitos integrados auxiliares necesarios, al integrar características como un controlador de acceso directo a memoria (DMA), un controlador de interrupciones, temporizadores y lógica de selección 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, también 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. Características Una de las características interesantes de este procesador es que fue el primer procesador x86 con modo protegido, en el cual existían cuatro anillos de ejecución y división 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 permitía el uso de toda la memoria directamente, habilitando que pudiera ser direccionada hasta 16 MB de memoria con la unidad de gestión de memoria (MMU) lineal del chip y con 1 GB de espacio de dirección lógica. 1.11.-INTEL 80386 El Intel 80386 (i386, 386) es un microprocesador CISC con arquitectura x86. Durante su diseño se lo llamó 'P3', debido a que era el prototipo de la tercera generación x86. El i386 fue empleado como la unidad central de proceso de muchos ordenadores personales desde mediados de los años 80 hasta principios de los 90. Clases de Microprocesadores –Prof. B.Barraza.
  • 8. Fabricado y diseñado 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 producción lo hubieran hecho poco rentable. El hardware de un piloto automático y aerodinámico típico es un conjunto de cinco CPUs 80386, cada una con su propio circuito impreso. El 80386 es un diseño barato y probado a fondo que puede implementar un verdadero ordenador virtual. Se han implementado nuevas prestaciones que lo convierten en resistente a la radiación y adecuado para uso aeroespacial, pero a este veterano diseño 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 diseñados 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 rápidos que un i386 e i387 a la misma frecuencia de reloj. De todos modos, algunos i486 de gama baja son más lentos que los i386 más rápidos. 2.- Constitución básica de un microprocesador 8085. El microprocesador posee una serie de “bloques internos” que se comunican entre sí y con el exterior a través de unos conjuntos de líneas denominados buses que sirven para transmitir señales 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.
  • 9. con el exterior, es decir con componentes que están 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 líneas (líneas 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 información entre sus distintos bloques internos y para comunicarse con el exterior. Son un conjunto de 8 bits que utilizan 8 líneas de conexión al exterior, normalmente denominadas D0 a D7. Por este bus sale y entra información, por tanto se trata de un bus bidireccional. 2.2.3.- Bus de control Compuesto por una serie de líneas, variable en número según el componente de que se trate. Contiene las líneas de sincronización de funciones, pudiendo ser unas de salida y otras de entrada al microprocesador. Algunas señales 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 aritméticas y lógicas. Para llevar a cabo este proceso emplean normalmente un registro especial denominado Acumulador donde almacenan el resultado de las operaciones realizadas. Algunos microprocesadores poseen más de un acumulador. Para completar las indicaciones necesarias tras la ejecución de las instrucciones, el microprocesador emplea además un registro especial de 8 bits denominado Registro Clases de Microprocesadores –Prof. B.Barraza.
  • 10. de Estado o Registro de Flags que marcarán distintas características y peculiaridades de las operaciones desarrolladas. Posteriormente Se verá con más detalle este Registro de Flags. En la FIG.12A puede verse también un bloque denominado Control que sirve para sincronizar el funcionamiento de todo el sistema. Genera señales de sincronismo para la ALU, memorias y dispositivos de E/S. Las unidades de control generalmente están constituidas basándose en microprogramación (programación interna no accesible al usuario) y se encargan de descifrar y ejecutar las instrucciones del programa que nosotros construyamos. Puede verse además un bloque compuesto por Registros Internos de 8 bits, se trata en este caso de una serie de registros (variable según 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 también un bloque de Registros Internos de 16 bits que también son llamados registros de direccionamiento. Están 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 señalará en todo momento a la cima de la pila. (La pila estará constituida por un bloque de memoria RAM, donde se almacenarán 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 dirección de la siguiente instrucción 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 ejecución secuencial de las instrucciones. Clases de Microprocesadores –Prof. B.Barraza.
  • 11. 3.-Arquitectura del microprocesador 8085 Sintetizando, el microprocesador 8085 está constituido básicamente por tres grandes bloques: una unidad de control, un conjunto de registros y una unidad aritmético-lógica. -Unidad de control (UC). -Registros internos del microprocesador (RI). - Unidad aritmético-lógica ALU Fig.- Estructura del microcontrolador Clases de Microprocesadores –Prof. B.Barraza.
  • 12. 3.1.- Unidad de control. La unidad de control es un bloque de lógica 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 señal de reloj maestro de microprocesador, por otra, las señales de control de otros elementos del sistema, para interrumpir la secuencia del programa, y el bus de datos, a través del decodificador de instrucciones con la información ya interpretada, para que la unidad pueda responder con las señales 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 operación 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 función básica del microprocesador consistente en la búsqueda y posterior ejecución de instrucciones. Esta operación es cíclica mientras no se interrumpa mediante una instrucción de paro (HALT). En el estado de búsqueda se transfiere una instrucción desde la memoria hasta el microprocesador y en el estado de ejecución se realiza esta operación. 3.2 Registros internos del microprocesador. El 8085 tiene una serie de registros de propósito 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 operación. Clases de Microprocesadores –Prof. B.Barraza.
  • 13. Los registros de propósito 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 Instrucción (RI), de 8 bits. El Contador de Programa (CP) es un registro que memoriza la dirección de la próxima instrucción a ejecutar o bien la dirección de parte de una instrucción formada por más 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 automáticamente en uno al contenido del CP cada vez que termina un ciclo de búsqueda, salvo cuando aparece la instrucción HALT (paro). La señal de RESET, que es una de las entradas de la unidad de control, coloca al CP a cero e inicializa la ejecución del programa. 3.3.- Unidad aritmético-lógica. La unidad de proceso completa del 8085 está formada por una ALU (Unidad aritmético-lógica), que es un circuito combinacional capaz de realizar operaciones de suma y resta, así como operaciones lógicas, un registro de 8 bits llamado Acumulador (A) y un conjunto de cinco biestables o flags denominados registros de estado, que ofrecen información relativa al resultado de las operaciones aritméticas o lógicas que se realizan. Fig.3.3.- Unidad aritmética lógica. Cuando se realiza una operación, el acumulador contiene un operando y uno de los registros temporales. El resultado de la operación se coloca en el acumulador reemplazando al dato u operando que contenía anteriormente. Clases de Microprocesadores –Prof. B.Barraza.
  • 14. La denominación y situación de cada flag se muestra en el siguiente dibujo. CY es el señalizador de arrastre, y su contenido pasa a ser 1 cuando se produce acarreo al realizar una suma. AC es el señalizador 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 más significativo del resultado es 1. En caso contrario, será cero. Z es el señalizador de cero y se pone a 1 cuando el resultado de una operación ha sido cero. Por último, P es el flag de paridad y su valor será 1 cuando el número 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.
  • 15. 4. Código máquina y nemónicos 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 número y más 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 codificación binario es muy engorroso para ser utilizado como lenguaje de programación, ya que un dato o palabra, en un circuito que utiliza un microprocesador como el 8085, está formado por 8 bits y una dirección por 16 bits. Además, tales expresiones numéricas resultan ininteligibles. Por este motivo, los equipos más elementales que se emplean para programar admiten para la escritura de las instrucciones al menos la codificación hexadecimal. La traducción a lenguaje binario, también denominado código máquina, se realiza con el correspondiente decodificador hexadecimal/binario incorporado al equipo. 4.1. Acumulador Registro temporal Lógicamente este sistema ofrece también grandes inconvenientes, tanto en la fase de definición como en la de depuración, 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 operación que realiza. Dado el origen de las compañías fabricantes de este tipo de dispositivos, estas palabras están expresadas en inglés. 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 nemónicos, que significa recordatorio. Por tanto, las expresiones del microprocesador 8085 son un conjunto de 74 nemónicos compatibles con las de otros dispositivos de INTEL, pero, desgraciadamente, distintas, aunque realicen la misma operación, a las de otros fabricantes. Existen equipos de programación que admiten directamente las instrucciones en forma de nemónicos. Estos equipos disponen de un programa denominado assembler, que traduce el programa escrito en leguaje ensamblador el sistema binario, que es el único código capaz de ser interpretado por la máquina. Los equipos más complejos, denominados genéricamente sistemas de desarrollo, son capaces de traducir a código máquina cualquier programa escrito en lenguajes de alto nivel, tales como Pascal, Clases de Microprocesadores –Prof. B.Barraza.
  • 16. BASIC, etc. Estos equipos facilitan enormemente el desarrollo del software de un sistema digital. 5. Tipos de instrucciones El número de instrucciones que cada microprocesador puede interpretar y ejecutar es distinto en cada caso. Así el 8085 está diseñado para admitir 74 instrucciones básicas, 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 aritméticas. 5.1.3.-Operaciones lógicas 5.1.4.-Bifurcaciones (salto). 5.1.5.- Instrucciones de stack, /S y control de máquina. Existe un gran cantidad de clasificaciones que sin lugar a dudas ayudarían a comprender mas sus características. Pero su dominio no está en memorizarlas sin darle sentido, si no el buscar herramientas que permitan solucionar requerimientos. En programación siempre se empieza con la estructura elemental, de allí se arma la estructura total. Si no hay practica no hay maestría. Í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 Instrucción 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 Instrucción 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 Instrucción 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 Instrucción RST EI DI IN OUT HLT PUSH POP DAD XCHG XTHL SPHL
  • 17. Tabla 2.1 Set de instrucciones del microprocesador 8085A No Nemonicos Sintesis de operación 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 dirección de memoria, cuya dirección 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 dirección de memoria indicada por los registros H-L. Supongamos que el registro H contiene 00H y el registro L contiene 30H. La instrucción MOV M, A almacenará el contenido del acumulador en la posición 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 instrucción: MVI H, 33H carga en el registro H el valor 33H, mientras que La instrucción MVI L, 44H carga en el registro L el valor 44H. Direccionamiento: Inmediato 2 Supuestos los dos ejemplos anteriores, la instrucción MVI M, Reg MVI M, 2AH carga en la posición de memoria 3344H (dirección aportada por los registros H y L) el valor 2AH. Clases de Microprocesadores –Prof. B.Barraza.
  • 18. 3 CMP Reg Comparar registro o memoria con acumulador El contenido del registro o posición de memoria especificados se compara con el contenido del acumulador. Esta comparación se realiza restando internamente el contenido del registro al del acumulador, permaneciendo éste invariable, y colocando los bits de condición en función 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 0 1 0AH: FBH: 05H: 0 1 0 1 0 1 0 1 1 0 0 1 1 1 1 1 1 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 4 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 instrucción (1) carga en el acumulador el valor 25H. La instrucción (2) realiza la siguiente operación 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 0 1 25H: E0H: 05H: 0 1 1 0 0 1 0 1 0 1 0 1 1 1 1 0 0 0 0 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. S Z CPI Z Cy X A X>Y 0 0 X X=Y 1 0 P X X<Y 0 1 Cy Cargar un par de registros con un dato Inmediato 5 LXI Reg,dato Bits afectados: Direccionamiento: LXI es una instrucción 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 instrucción inmediata que acepta un valor de Clases de Microprocesadores –Prof. B.Barraza.
  • 19. Inmediato 6 16 bits. El resto trabajan con datos de 8 bits. Si el par de registros especificados es SP, el segundo byte de la instrucción sustituye a los 8 bits menos significativos del puntero de pila, mientras que el tercer byte de la instrucción reemplaza a los 8 bits más significativos del puntero de pila. 1. La instrucción LXI B, 00FFH carga en el registro B el valor 00H y en el registro C el valor FFH. 2. La siguiente instrucción 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 posición 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 instrucción STAX B almacenará el contenido del acumulador en la posición de memoria 3F16H. 7 STA Dir Direccionamiento: Directo Almacenamiento directo desde el Acumulador STA DIR almacena una copia del contenido actual del acumulador en la posición de memoria especificada por DIR. Todas las instrucciones que se muestran a continuación introducen el contenido del acumulador en la posición de memoria 0080H: STA 0080H LDAX Reg Cargar el acumulador El contenido de la posición 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 instrucción LDAX D cargará en el acumulador el contenido de la posición 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 posición de memoria especificados se incrementa en una unidad. Si el registro A contiene 98H, la instrucción 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 8 9 LDA DIR carga el acumulador con el contenido de la memoria direccionada por DIR. La dirección puede ser puesta como un número, una etiqueta previamente definida o una expresión. A continuación se introducen en el acumulador el contenido de la posición de memoria 1000H: LDA 1000H Decrementa registro o memoria El contenido del registro o posición de memoria especificados se incrementa en una unidad. Si el registro A contiene 99H, la instrucción DCR A hará que este registro contenga la cantidad 98H. Incrementar par de registros El número 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 instrucción 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 instrucción INX SP hace que éste contenga 0000H. Clases de Microprocesadores –Prof. B.Barraza.
  • 20. 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 Aritmética) El contenido del registro o posición de memoria especificados se suma al contenido del acumulador, usando aritmética 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 instrucción ADD B realiza la siguiente suma: El número 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 instrucción 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 instrucción 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 posición de memoria especificados más 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 instrucción 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 1 0 1 0 0 1 1 + 0 0 0 0 El nuevo contenido del acumulador será A6H, mientras que todos los bits de condición quedarán puestos a cero excepto los de signo y paridad. Si el bit de acarreo hubiera sido 1 antes de realizar la operación, 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 1 0 1 0 0 1 1 El acumulador contendría ahora A7H y todos los bits de condición excepto el de signo, estarían 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 instrucción (DATOS), al contenido del acumulador y deja el resultado en el acumulador. El dato debe ser expresado en forma de número, un ASCII constante, la etiqueta de un valor previamente definido o una Clases de Microprocesadores –Prof. B.Barraza. 0 0 1 1
  • 21. expresión. El dato no debe exceder de un byte. Se utiliza aritmética de complemento a dos. Ejemplo A continuación 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 instrucción (2) el valor 20 es 14H. La instrucción (1) carga en el acumulador el valor 22H. La instrucción (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 instrucción (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 instrucción, al contenido del acumulador, añadiendo además el bit del acarreo. El resultado se almacena en el acumulador (perdiéndose así el anterior contenido del Acumulador). El dato (DATOS) debe estar especificado en forma de número, en ASCII constante, como etiqueta de un valor previamente definido o una expresión. 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 instrucción (1) carga en el acumulador el valor 22H. La instrucción (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 0 0 1 1 0 1 1 + 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 posición de memoria especificados se resta al contenido del acumulador, usando aritmética de complemento a dos. El resultado se guarda en el acumulador. Si no hay acarreo del bit de más peso, el bit de acarreo se pone a uno, y viceversa, al contrario de lo que ocurre con la operación de suma. Antes de entrar en los ejemplos recordamos que restar utilizando aritmética 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 instrucción SUB E realizará la siguiente operación 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
  • 22. 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 1 1 0 1 1 0 0 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 Descripción El byte de datos inmediato se resta del contenido del acumulador usando aritmética de complemento a dos. El resultado se deja en el acumulador. Ya que se trata de una operación de resta, el bit de acarreo se pone a uno cuando no hay acarreo del bit de más peso, y se pone a cero si tiene dicho acarreo. A continuación presentamos un ejemplo con 2 instrucciones: (1).MVI A, B3H (2).SUI B3H La instrucción (1) carga en el acumulador el valor B3H. La instrucción (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 0 1 0 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 séptimo bit se produce acarreo y se pone el bit de acarreo a cero. El bit de paridad se pone a uno mientras que los demás 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 aritmética de complemento a dos. El resultado se deja en el acumulador. Esta instrucción, 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 más peso, poniéndose 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 instrucción (1) carga en el acumulador el valor 00H. La instrucción (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 1 1 1 1 1 1 1 + FFH: Cy=1 Z=0 Ca=0 Clases de Microprocesadores –Prof. B.Barraza. 0 1 0 1
  • 23. No hay acarreo, por lo que el bit de acarreo se pone a uno. Los bits de cero y acarreo auxiliar están 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 Función lógica AND entre registro o Memoria con acumulador Se realiza la función lógica AND bit a bit entre el contenido del registro o posición de memoria especificados y el contenido del acumulador. El bit de acarreo se pone a cero. La tabla de verdad de la función lógica 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 instrucción ANA B realiza la siguiente operación:Si el registro B contiene 6CH y el acumulador almacena 3AH, la instrucción ANA B realiza la siguiente operación: 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 Función lógica AND entre el acumulador y un Dato Inmediato Realiza una operación Y lógica entre el dato (DATOS) especificado en la instrucción 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 número, un ASCII constante, la etiqueta de algún valor previamente definido o una Expresión. Disponemos de las siguientes instrucciones: (1).MVI A, A0H (2).ANI 0FH La instrucción (1) carga en el acumulador el valor A0H. La instrucción (2) realiza la siguiente operación 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 instrucción 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 Función lógica O-EXCLUSIVO entre registro o memoria con acumulador. Se realiza la función lógica O-EXCLUSIVO bit a bit entre el contenido del registro o posición de memoria especificados y el contenido del acumulador, guardándose el resultado en este último. La tabla de verdad de la función lógica 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 instrucción XRA B realiza la siguiente operación: 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
  • 24. Nuevo acumulador 56H: 0 1 0 1 0 1 1 0 La función O-EXCLUSIVO de cualquier bit con uno da lugar al complemento del mismo. Así, si el acumulador contiene todo unos, la instrucción 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 condición de falso o verdadero, actuado o inhibido, etc. Mediante la función O-EXCLUSIVO podemos determinar cuántos 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 Función lógica O-EXCLUSIVO entre el acumulador y un dato Inmediato Se realiza la función lógica 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 instrucción se suele utilizar para complementar bits específicos del acumulador dejando los restantes en su estado original. De este modo y suponiendo que el acumulador contiene ABH, la instrucción XRI 80H complementa el bit de más 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 Función lógica OR entre registro o memoria con acumulador Se realiza la función lógica AND bit a bit entre el contenido del registro o posición 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 función lógica OR es: A B f 0 0 0 0 1 1 1 0 1 1 1 1 Como sea que la función OR de cualquier bit con un uno da como resultado uno, y de cualquier bit con cero, lo deja invariable, esta función se utiliza frecuentemente para poner a uno grupos de bits. Si el registro B contiene OFH y el acumulador almacena 33H, la instrucción ORA B realiza la siguiente operación: 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 demás permanecen invariables. 26 ORI datos Bits Afectados: Z, S, P, CY, AC Función lógica OR entre el acumulador y un dato Inmediato ORI desarrolla una operación lógica 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 instrucción ORI F0H realiza la siguiente operación 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.
  • 25. Como vemos la instrucción 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 número hexadecimal de 8 bits contenido en el acumulador se ajusta como dos dígitos de 4 bits codificados en binario decimal, según el proceso siguiente: (1).Si los cuatro bits menos significativos del acumulador representan un número 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 varía. (2).Si los cuatro bits más significativos del acumulador representan ahora un número mayor que 9, o si el bit de acarreo es uno, los cuatro bits más 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 más significativos durante el paso (2), se activará el bit de acarreo, poniéndose a cero si no se produce acarreo. 29 Esta instrucción se utiliza en las operaciones de suma de números decimales. Es la única instrucción cuya operación depende del bit de acarreo auxiliar. Supongamos que queremos realizar una suma decimal de dos números (40 + 80). Ambos bits de acarreo están a cero. La secuencia de instrucciones podría 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 instrucción 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 varía. 2. Como los 4 bits más significativos del acumulador representan un número 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 operación. 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 más alto orden al bit de acarreo y al mismo tiempo a la posición de menor orden del acumulador. Cy Az Acc Ao ... Clases de Microprocesadores –Prof. B.Barraza.
  • 26. 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 más bajo orden a la posición de más alto orden del acumulador, además 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 través 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 posición a la derecha. El bit de acarreo que es tratado como si fuera parte del acumulador se transfiere al bit de más alto orden del acumulador. El bit de menor peso del acumulador se carga en el bit de acarreo. No existen operandos en la instrucción RAR. Cy Az Acc Ao ... JMP dir 35 Salto incondicional La instrucción JMP DIR altera la ejecución del programa cargando el valor especificado por DIR en el contador de programa. JC dir 36 La instrucción JC DIR comprueba el valor del bit de acarreo. Si es un 1 la ejecución del programa continúa en la dirección especificada por DIR. Si es un 0 el programa continúa su ejecución normal de forma secuencial. JNC dir Saltar si no hay acarreo La instrucción JNC DIR comprueba el estado del bit acarreo. Si esta a 0 el programa cambia a la dirección especificada por DIR. Si esta a 1 la ejecución del programa continúa normalmente. JZ dir Saltar si hay cero La instrucción JZ DIR comprueba el bit de cero. Si está a 1 el programa continúa en la dirección expresada por DIR. Si está a 0 continúa con la ejecución secuencial normal. JNZ dir Saltar si no hay cero La instrucción JNZ DIR comprueba el valor del bit de cero. Si el contenido del acumulador no es cero (Bit de cero = 0) el programa continúa en la dirección especificada por DIR. Si el contenido del acumulador es cero (Bit de cero = 1) el programa continúa su ciclo normal. JM dir Saltar si hay signo negativo La instrucción JM DIR comprueba el estado del bit de signo. Si el contenido del acumulador es negativo (bit de signo = 1) la ejecución del programa continúa en la dirección especificada por DIR. Si el contenido del acumulador es positivo (bit de signo = 0) continúa la ejecución de la secuencia normal. 37 38 39 40 Clases de Microprocesadores –Prof. B.Barraza.
  • 27. JP dir Salta si hay signo positivo La instrucción JP DIR comprueba el estado de bit del signo. Si el contenido del acumulador es positivo (bit de signo = 0) la ejecución del programa continúa con la dirección especificada por DIR. Si el contenido del acumulador es negativo (bit de signo = 1) continúa el programa con su ejecución normal. JPE dir Salta si la paridad es par La paridad existe si el byte que esta en el acumulador tiene un número par de bits. El bit de paridad se pone a 1 para indicar esta condición. La instrucción JPE DIR comprueba la situación del bit de paridad. Si esta a 1, la ejecución del programa continúa en la dirección especificada por DIR. Si esta a 0, continúa con la siguiente instrucción de forma secuencial. Las instrucciones JPE y JPO son especialmente usadas para comprobar la paridad de los datos de entrada. (Sin embargo con la instrucción IN los bits no actúan. 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 dirección de la próxima instrucción secuencial) dentro del stack y a continuación salta a la dirección especificada por DIR. Cada instrucción CALL o alguna de sus variantes implica una instrucción RET (retorno), de lo contrario el programa podría "perderse" con consecuencias impredecibles. La dirección debe ser especificada como un número, una etiqueta, o una expresión. La etiqueta es lo más normal (El ensamblador invierte los bytes alto y bajo de dirección 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 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 continuación salta a la dirección especificada por DIR. Si el bit esta a 0, la ejecución del programa continúa con la próxima instrucción de su secuencia normal. Aunque el uso de una etiqueta es lo más normal, la dirección puede ser especificada también como un número o una expresión. 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 continuación salta a la dirección especificada por la instrucción en DIR. Si el bit está a 1, el programa continúa con su secuencia normal. Aunque el uso de una etiqueta es lo más común, la dirección puede también estar indicada por un número o por una expresión. 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 dirección especificada en DIR. Si el bit está a 0 (indicando que el contenido del acumulador es distinto de cero) el programa continúa 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 dirección especificada por DIR. Si el bit está a 1 el programa continúa 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 dirección especificada por DIR. Si el bit es 0 la ejecución del programa continúa con su secuencia normal. El uso de la etiqueta es lo más corriente, pero la dirección puede especificarse también por un número o una expresión. 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 envía el contenido del contador de programa al stack y salta a la dirección especificada por DIR. Si el bit tiene un 1, continúa el programa normalmente con la instrucción siguiente. Llamar si la paridad es par. Existe paridad en un byte si el número de unos que tiene es par. El bit de paridad se pone a 1 para indicar esta condición. CPE chequea el valor del bit de paridad. Si tiene un 1, CPE envía el contenido del contador de programa al stack y salta a la dirección especificada por la instrucción en DIR. Si el bit tiene un cero, el programa continúa 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 dirección especificada en DIR. Si el bit está a 1 el programa continúa su desarrollo normal. 45 46 47 48 CP dir 49 CPE dir 50 CPO dir 51 RET 52 Retorno incodicional Se realiza una operación de retorno incondicional. La instrucción RET echa fuera dos bytes de datos del stack y los mete en el registro contador de programa. El programa continúa entonces en la nueva dirección. Normalmente RET se emplea conjuntamente con CALL. Clases de Microprocesadores –Prof. B.Barraza.
  • 28. RC Retorno si hay acarreo La instrucción RC comprueba el estado del bit de acarreo. Si tiene un 1 (indicando que hay acarreo) la instrucción saca dos bytes del stack y los mete en el contador de programa. El programa continúa en la nueva dirección suministrada. Si el bit es 0, el programa continúa en la siguiente instrucción de la secuencia normal. RNC Retorno si no hay acarreo 53 54 La instrucción RNC comprueba el bit de acarreo. Si está a 0 indicando que no hay acarreo, la instrucción echa fuera del stack dos bytes y los carga en el contador de programa. Si el bit está a 1 continúa el ciclo normal. RZ Retorno si hay cero La instrucción RZ comprueba el bit de cero. Si está a 1, indicando que el contenido del acumulador es cero, la instrucción echa fuera del stack dos bytes y los carga en el contador de programa. Si el bit está a 0, continúa el ciclo normal. RNZ Retorno si no hay cero La instrucción RNZ comprueba el bit cero. Si está a 0, indicando que el contenido del acumulador no es cero, la instrucción echa fuera del stack dos bytes y los carga en el contador de programa. Si el bit está a 1, continúa el ciclo normal. RM Retorno si hay signo negativo La instrucción RM comprueba el bit de signo. Si tiene un 1, indicando dato negativo en el acumulador, la instrucción echa dos bytes fuera del stack y los mete en el contador de programa. Si el bit tiene 0, continúa el programa normal con la siguiente instrucción. RP Retorno si hay signo positivo La instrucción RP comprueba el bit signo. Si está a 0, indicando que el contenido del acumulador es positivo, la instrucción echa fuera del stack dos bytes y los carga en el contador de programa. Si el bit está a 1 continúa el ciclo normal. RPE Retorno si la paridad es par La instrucción RPE comprueba el bit de paridad. Si está a 1, indicando que existe paridad, la instrucción echa fuera del stack dos bytes y los carga en el contador de programa. Si el bit está a 0 continúa el ciclo normal. (Existe paridad si el byte que está en el acumulador tiene un número par de bits, colocándose el bit de paridad a 1 en este caso). RPO Retorno si la paridad es impar La instrucción RPO comprueba el bit de paridad. Si está a 0, indicando que no hay paridad, la instrucción echa fuera del stack dos bytes y los carga en el contador de programa. Si el bit está a 1, continúa el ciclo normal. RST Es una instrucción CALL para usar con interrupciones. RST carga el contenido del contador de programa en el stack, para proveerse de una dirección de retorno y salta a una de las "ocho" direcciones determinadas previamente. Un código de tres bits incluido en el código de operación de la instrucción RST especifica la dirección de salto. Esta instrucción es empleada por los periféricos cuando intentan una interrupción. Para volver a la instrucción en que ha tenido lugar la interrupción, se debe utilizar una instrucción de RETORNO. Activar interrupciones La instrucción EI pone en servicio el sistema de interrupciones a partir de la siguiente instrucción secuencial del programa. Esta instrucción activa el flip-flop INTE. Se puede desconectar el sistema de interrupciones poniendo una instrucción DI al principio de una secuencia, puesto que no se puede predecir la llegada de una interrupción. Al final de la secuencia se incluye la instrucción EI que vuelve a habilitar el sistema de interrupciones. (RESET también pone fuera de servicio el sistema de interrupciones además de poner el contador de programa a cero). Desactivar interrupciones Esta instrucción desactiva el flip-flop INTE. Después de la ejecución de una instrucción DI, el sistema de "interrupciones" esta sin posibilidad de ponerse en marcha. En aplicaciones que empleen las interrupciones, la instrucción 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 instrucción DI el principio del código de secuencia. La interrupción TRAP del 8085 no puede ser puesta fuera de servicio. Esta interrupción especial esta prevista para serios problemas que pueden presentarse independientemente del bit de interrupción (fallo de alimentación, etc.). Entrada La instrucción 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 número o una expresión 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 instrucción IN 2 deposita en el acumulador los datos de entrada del puerto 2. Clases de Microprocesadores –Prof. B.Barraza.
  • 29. OUT port Salida 65 OUT PORT pone el contenido del acumulador en el bus de datos de 8 bits del puerto seleccionado. El número de puertos oscila de 0 a 255 y es duplicado en el bus de direcciones. Es la lógica externa la encargada de seleccionar el puerto y aceptar el dato de salida. El operando (PORT) debe especificar el número del puerto de salida seleccionado. 1. La instrucción OUT 2 envía el contenido del acumulador al puerto de salida número 2. 66 HLT La instrucción HLT detiene el procesador. El contador de programa contiene la dirección de la próxima instrucción 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 interrupción. Por tanto debemos asegurarnos que las interrupciones estén en disposición de ser activadas antes de ejecutar la instrucción 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 través de la interrupción 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 propósito básico de la instrucción HLT es permitir una pausa al procesador mientras espera por la interrupción de un periférico. 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 posición de memoria inmediatamente inferior a la del puntero de stack. El contenido del segundo registro del par se guarda en la posición de memoria dos unidades inferior al puntero de stack. Si se hace referencia al para de registros PSW, en el primer byte de información se guarda el estado de los cinco bits de condición. El formato de este byte es el siguiente: 67 PUSH pr S Z X A X P X Cy Sea cual sea el par de registros especificado, una vez que los datos se han guardado, el puntero de pila se decrementa en dos unidades. 1. Supongamos que el registro B contiene 3FH, el registro C contiene 16H y el puntero de pila vale 2030H. La instrucción PUSH B almacenará el contenido del registro B en posición de memoria 2029H, el contenido del registro C en la dirección de memoria 2028H, y decrementa dos unidades el puntero de stack, dejándolo en 2028H. Gráficamente podemos ver el proceso anterior: Antes de PUSH Puntero Stack 2030 Registro B 3F Después 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 condición de cero, acarreo y paridad están a uno, mientras que los de signo y acarreo auxiliar están a cero. La instrucción PUSH PSW Clases de Microprocesadores –Prof. B.Barraza.
  • 30. Almacena el contenido del acumulador en la posición de memoria 1028H, y coloca el valor 47H, correspondiente a los citados estados de los bits de condición, en la posición 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 posición de memoria direccionada por el stack pointer en el registro de bajo orden del par de registros especificados. A continuación se incrementa el stack pointer en 1 y copia el contenido de la dirección resultante en el registro de más 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 localización 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 instrucción POP B Carga el registro C con el valor de 16H de la posición de memoria 2028H, carga el registro B con el valor 3FH de la posición 2029H, e incrementa dos unidades el puntero de stack, dejándolo en 2030H. Gráficamente podemos ver este proceso: Antes de POP Después 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 instrucción 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 0 =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. Téngase 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 además no afecta a ningún otro bit. 1. Supuesto que los registros D, E, H y L contienen 33H, 9FH, A1H y 7BH respectivamente, la instrucción Realiza la siguiente suma: B – C 339F H – L A17B H – L 051A Clases de Microprocesadores –Prof. B.Barraza.
  • 31. 2. Al ejecutar la instrucción DAD H se duplica el valor del número de 16 bits contenido en H – L (equivale a desplazar los 16 bits una posición 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 instrucción XCHG realiza el siguiente intercambio: Antes de ejecutar XCHG Despues de ejecutar XCHG D E H L 03 04 01 02 71 XTHL D E H L 01 02 03 04 Intercambiar datos con el stack XTHL cambia los dos bytes de la posición más 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 posición 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 instrucción Después de XTHL Antes de XTHL Puntero Stack 40B4 Registro H DD Registro L CC Puntero Stack 40B4 Registro H AA DIRECCION DIRECCION 00 40B3 00 40B3 BB 40B4 CC 40B4 AA 40B5 DD 40B5 00 40B6 00 SPHL MEMORIA MEMORIA 72 Registro L BB 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 instrucción 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.
  • 32. 6.- EJERCICIOS DE PROGRAMACIÓN LENGUAJE ASSEMBLER 8085. Para programar en lenguaje assembler, se debe dominar las 74 instrucciones del microprocesador, esto es el requicito mínimo 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 programación assembler es crear la lógica por medio de un fluxograma. Por ende recomiendo hacer ejercicios de lógica a travéz de esta herramienta. Existen programas para ensamblar del m-8085, que sin lugar a dudas os ayudarán a tener una programación mas flexible y natural. A continuación 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.
  • 33. 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 ARITMÉTICAS 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 LÓGICAS. 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.
  • 34. 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 ROTACIÓN Y FLAGS RLC RRC RAL RAR CMA CMC STC Rotacion izqda Rotación 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 BIFURCACIÓN 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.
  • 35. 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 programación 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 estás 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.
  • 36. 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 ejecución. 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.
  • 37. 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 Descripción: 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 almacenarán de forma inversa. Ambos con el mismo tamaño N. La manera que abordé este problema fue empezar a recorrer en forma decreciente la tabla BC y su información se almacenaba en el acumulador a mismo tiempo que se transfería 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.
  • 38. JNZ XX INR C XX: DCR B JZ FIN INX H JMP OTRO HLT Clases de Microprocesadores –Prof. B.Barraza.
  • 39. ADICION DE 2 NUMEROS DE 8 BITS (Material profe) Clases de Microprocesadores –Prof. B.Barraza.
  • 40. MULTIPLICATION OF TWO 8 BITS NUMBERS NUMBER IN AN ARRAY OF DATA Clases de Microprocesadores –Prof. B.Barraza. LARGEST
  • 41. SMALLEST NUMBER IN AN ARRAY OF DATA Clases de Microprocesadores –Prof. B.Barraza.
  • 42. ARRANGE AN ARRAY OF DATA IN DESCENDING ORDER Clases de Microprocesadores –Prof. B.Barraza.
  • 43. HEX TO BCD CONVERSION Clases de Microprocesadores –Prof. B.Barraza.
  • 44. Clases de Microprocesadores –Prof. B.Barraza.
  • 45. 7.- OPERACION INTERNA DE UN MICROPROCESADOR 7.1 Ejecución 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 cómo 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 dirección de la primera instrucción a ser ejecutada. Luego, el PC se incrementa automáticamente recorriendo secuencialmente los sucesivos lugares de memoria donde se halla el programa. 7.2 Ciclos de operación. Hay dos operaciones fundamentales que realiza un procesador: - Búsqueda de la instrucción: en la cual el procesador busca el código de operación(FETCH). - Ejecución de la instrucción: en la cual el procesador ejecuta la operación determinada por la instrucción. Un procesador se encuentra siempre haciendo una de las dos operaciones anteriores. 4.2.1.-Ciclo de instrucción Es el tiempo total, medido en números de períodos de reloj, de duración de un ciclo de búsqueda más uno de ejecución de la instrucción teniendo en cuenta los sucesivos accesos a memoria en el caso de ser una instrucción de más de un byte. 4.2.2.-Ciclo de máquina Es el tiempo, medido en números de períodos de reloj de duración de una operación de lectura, de escritura o de búsqueda (Fetch) de una instrucción. Un ciclo de instrucción está compuesto por uno o varios ciclos de máquina (M1, M2, M3,M4), dependiendo del tipo de instrucción. Se denomina M1 al ciclo de búsqueda, pues siempre es el primero de cada ciclo de instrucción. Los ciclos de máquina más 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.
  • 46. Los ciclos de la máquina son las operaciones básicas realizadas por el procesador, mientras que las instrucciones se ejecutan. El tiempo necesario para realizar cada ciclo de la máquina se expresa en términos de Tstates. Un T-estado es el período de tiempo de un ciclo de reloj del microprocesador.The various machine cycles are (los diferentes ciclos de la máquina 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.
  • 47. Programa de retardo Ejemplo 1 de tiempo de retardo MVI A,03 DCR A ; 4T JNZ XX ; 10T/7T Salta ocupando 10T next inst. xx: ; 7T Aqui N=03 ; ...... HLT ; 4T 7T 4T 4T 4T N 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.
  • 48. Ejemplo 2 de tiempo de retardo START NO N1 SI N2 N1=N2 X 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.
  • 49. 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 operación. 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 operación 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.
  • 50. 3. Mostrar los contenidos de cada registro cuando las instrucciones son ejecutadas. Inicialmente todos los registros están 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 están en 0. a. MVI B, A9H MVI C, 34H ADD B SUB C MOV D, A MVI A, 7DH ORA D MOV H, A CMA XRA H MOV C, H MOV A, D HLT b. MVI A, 03H RLC RAR MVI E, 76H CMP E MOV B, A MOV H, B MOV L, H SUI 21H ANA L MOV C, L INR C HLT c. MVI C, D1H INR A ANA C MOV D, C ANA D ADI 4CH MOV L, A DCR L XRI 24H ORA L DCR L MOV L, A HLT 5. Especificar los contenidos de registros y banderas afectados, cuando las siguientes instrucciones se ejecutan. Asuma registros inicialmente en 0 a. MVI L, 04H ADI 2BH SUB L MOV B, A RAL B CMP B HLT b. CMA XRI 56H MOV B, A MOV D, B ADD D ORA D HLT c. MVI C, 71H MVI D, 29H MOV A, D SUB D ADD C ANA D HLT d. MVI H, 8AH DCR H DCR H ORI 9DH ANI 36H SUB H HLT 6. Especificar los contenidos del acumulador y bit status CY para las siguientes instrucciones. Explicar el significado del carry flag, si está en 1. a MVI A, B7H RLC RLC RLC RLC HLT b MVI A, B7H RAL RAL RAL RAL HLT c. MVI A, B7H RRC RRC RRC RRC HLT d. MVI A, B7H RAR RAR RAR RAR HLT 8. Escribir un programa 8085 para; a) limpiar Acc. b) sumar 47H c) restar 92h d) XOR 64H d) OR 38H e) AND 2BH f) mostrar resultado final 9. Write 8085 assembly language to a) load 00h in accumulator b) decrement the accumulator by 1 four times c) transfer the answer to others register available in 8085 microprocessor. Clases de Microprocesadores –Prof. B.Barraza.
  • 51. 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 número hexadecimal en el registro C y 92H en el acumulador. Muestra el número 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 ejecución de las siguientes instrucciones (Seguimiento de programa ejecutándose paso a paso). A C D E H L 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, localización de memoria 2355H y las banderas, cuando se ejecutan las siguintes instrucciones. A H L S Z 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. P CY 2355H
  • 52. 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 ubicación de memoria a partir de 2000H ubicación. La transferencia de los datos a la ubicación 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 ubicación. Muestra la suma en 3000H ubicación. 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 posición 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, localización de memoria 2070H y flag Z cuando las siguientes instrucciones son ejecutadas A Z HL 2070H MVI A, 7FH ORA A CPI 12H LXI H, 2070H MVI M, 7FH CMP M 21. Definir el mnemonic, código de máquina, tamaño de la palabra y operación 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 dirección 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.
  • 53. HLT 23. Ensamblar el siguiente programa, partiendo de la dirección 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 ejecución de las instrucciones 1. (a) A B C H L 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
  • 54. (b) A B C LXI B,D912 D9 12 LXI D,2145H D9 LXI H,BA2CH MVI A,82H D E H L 12 12 45 D9 12 12 45 BA CY P 2C 82 ADI 96H 18H “ “ “ “ “ “ 1 1 RAR 8C “ “ “ “ “ “ 0 1 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.
  • 55. 26.- Especificar los contenidos de las posiciones de memoria 2040H a 2044H, después de la ejecución 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 número 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 localización 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 localización 2080H DATOS (H): 31, 23, 78, 1A, 2D, 69 7. Considerando la información del programa 6, ahora escribir un programa para transferir los datos en forma inversa (Ej: el dato de la localización 1055H es copiado a la posición 2085H, el dato de la localización 1056H es copiado a la posición 2084H y así sucesivamente. Cuales son los contenidos de la posición 2080H a 2085H, después de la ejecución del programa? Clases de Microprocesadores –Prof. B.Barraza.
  • 56. LABORATORIO 1.- Ensamblar el siguiente programa ,DEFINE TAMAÑO VALOR 100H 430H .ORG 0 LXI MOV INX MOV DCR H,TAMAÑO 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 código 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.
  • 57. INFORME FINAL 1.Elaborar informe final. De conclusiones de la experiencia realizada EJERCICIOS RESUELTOS DE ENSAMBLADOR 1.- 1. Ejemplo de uso de instrucciones de desvío y de control. La instrucción MOV A,B no afecta ningún flag , por lo tanto, no afecta el flag de zero (Z). Si lo hace la instrucción DCR C. Label volta: Instrucción 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, desvía para "fim" Copia contenido de B en A. No afecta ningún flag. Desvío incondicional para "volta". Esta instrucción para el procesamiento del programa 2. Ejemplo similar al anterior, pero usando la instrucción JZ dirección y JMP dirección. Label volta: Instrucción 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. Desvía 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 comparación entre registros (A e B). La operación de comparación 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: Instrucción 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 ningún flag. Si el resultado de DCR C no fue ZERO, desvía para "volta" Esta instrucción para el procesamiento del programa Clases de Microprocesadores –Prof. B.Barraza.
  • 58. 4. Ejemplo similar al anterior, pero usando la instrucción JC dirección a diferencia de JNC dirección. Label fim: . Comentario MVI B,00h volta: Instrucción MVI A,07h La operación de comparación 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 instrucción HLT INC B CMP B JC fim JMP volta HLT 5. Programa que realiza la multiplicación de 4 por 3. Es usada a instrucción ADI dato8 6. Otra versión de programa que hace la multiplicación de 4 por 3. La instrucción ADI dato8 é substituida por la instrucción 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 multiplicación de 4 por 3 usando una subrutina. Clases de Microprocesadores –Prof. B.Barraza.
  • 59. 8. Programa que genera una cuenta ascendente en hexadecimal, de 00 h a FF h y envía 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, después de pasar por todos os valores de 00 a FFh 9. Subrutina de atraso de 1 ms. Se hace la suposición de que un programa llama a subrutina denominada atraso, que es entregada posteriormente. Se asume un tiempo de 1μs para cada estado. _____ _____ CALL atraso _____ _____ Clases de Microprocesadores –Prof. B.Barraza.
  • 60. 10. Subrutina de atraso de 10 ms. Se supone un tiempo de 1μs para cada estado. Clases de Microprocesadores –Prof. B.Barraza.
  • 61. GUIA 3 DE MICROPROCESADOR 1. Cite todas las instrucciones posibles a partir de la instrucción genérica 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 instrucción MVI M, 08h? 3. A qué grupo de instrucciones pertenece la instrucción MVI M, 08h? 4. Explique en pocas palabras como funciona a pila en el 8085. Muestre a través de un mapa de memoria, a evolución 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 través de un mapa de memoria, la evolución 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 Dirección de la llamada de subrutina “CALL SUMA”: 2020 h 6. Muestre la evolución de la pila en la ejecución de la instrucción 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 están dentro de la sub-rutina que se inicia en la posición 033CH), en las mismas condiciones del ejercicio anterior, suponiendo de que la dirección de la instrucción CALL 033C h es 0038 h. 7. Considere o programa abajo en mnemónico, y responda las preguntas siguientes, sabiendo que a subrutina en la dirección 0200 h provoca un retardo de 1ms e afecta el registro B. Clases de Microprocesadores –Prof. B.Barraza.
  • 62. (b) Diseña una tabla mostrando las direcciones y contenido de la pila después de la ejecución de la instrucción 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 dirección 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 señales de control involucradas, los buses de dirección y datos a) MOV B, M b) LXI D, 4050 h c) MOV E, B. 12. Haga comentarios de cada línea del programa siguiente: Explique cuál es la finalidad del programa Complete las direcciones. 4.2 Ejemplos de Programas en Assembly La presente sección muestra dos ejemplos de programación 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.
  • 63. 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 número contenido en una tabla en memoria. La tabla contiene números aleatorios y tiene inicio en la dirección 2050h y termina en la dirección 205Fh. 5. Repita el problema anterior, seleccionando e mostrando el menor número. Clases de Microprocesadores –Prof. B.Barraza.
  • 64. 6. Realice un programa que selecciona y muestra en el display los números impares contenidos en una Tabla inserta en la memoria. La tabla contiene números aleatorios y tiene inicio en la dirección 2050h e termina en la dirección 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 ordenación en orden creciente de una tabla conteniendo 16 Números de 8 bits. Los números ya están en la memoria a partir de la dirección 2050h y deben ser mantenidos en la misma tabla, pero ordenados. 8. Adapte el programa del problema 7 para ordenar los números en orden decreciente. 9. Realice un programa que selecciona y muestra en el display los números mayores o iguales a 20h y menores que 50h, de una tabla con 16 números, comenzando en la dirección 2050 h. Sugestión 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 números fuera del intervalo. 11. Ejecute las instrucciones dadas a continuación, indicando la dirección de cada instrucción y contenido de los registros registradores pedidos e de las banderas de carry e de zero, después de la ejecución de la instrucción indicada Clases de Microprocesadores –Prof. B.Barraza.
  • 65. 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.
  • 66. – 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 S Z X A X P X Cy Clases de Microprocesadores –Prof. B.Barraza.
  • 67. 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.
  • 68. 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 POP’s as there are PUSH’s. – 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.
  • 69. 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.
  • 70. Ejemplo: Mi primer PUSH Iniciamos copiando y pegando el siguiente programa en el editor ASM para entender cómo 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 simulación PUSH. Lo que hacemos es posicionarnos en la dirección FFFFH, decrementamos 2 posiciones en el SP almacenado los registros B, y C en la dirección FFFEH y FFFDH respectivamente. Clases de Microprocesadores –Prof. B.Barraza.
  • 71. Ejemplo: Mi primer POP .ORG 0 MVI MVI LXI POP HLT B,12H C,F3H SP, FFFFH B Fig.4.2.-Visualizando la simulación POP. Clases de Microprocesadores –Prof. B.Barraza.
  • 72. 6.- IN/OUT Puertas de entrada/ salida DISPLAY Debemos tener en claro que estamos trabajando con números 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 Cátodo común 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 Cátodo común En el nivel más básico 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). Nótese que la configuración 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.
  • 73. 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 D 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.
  • 74. 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.
  • 75. 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.
  • 76. EJERCICIO: USANDO EL MICROPROCESADOR 8085 EJEMPLO TIPO PRUEBA DE MICROPROCESADORES Nombre:.......................................... Nota:................. 1. - Se desea diseñar un programa para el microcomputador 8085 de la figura, que permita leer u teclado numerico del 0 al 9, e que codifica su información en ASCII (0=30h, 1=31,..... 9=39h) conectado al puerto PB, tal como muestra la siguiente figura. Se entiende que sólo 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 información correcta. Puede generarse una tabla donde este almacenada la información de cada digito asociada al display. Crystal=6,144Mz Teclado numérico AD0 PB3 a AD7 f p b g e c d LED´s Port A A0 IO/M A7 A5 A6 A1 A2 A3 GROUND A4 RD WR 3 PC Cs 2.- E1 Usando decodificadores 3/8, puertas NAND, diseñar un direccionamiento de puertas con las siguientes características: E2 8 DISPOSITIVOS DE ENTRADA, E3 8 DISPOSITIVOS DE SALIDA 3. - DIRECCOION INICIAL DIRECCIÓN DE INICIO A0 E8. a) Explique el proceso de diálogo, modo 1, cuando una puerta B del 8155, está recibiendo información de un conversor análogo 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
  • 77. MICROPROCESADORES TECLADO C/S 0 COH PB 1 2 3 IN 4 5 7 8 6 9 MICROPROCESADOR 8085 PA PC timer 1 A7 Mas significativo OUT C4H 500Hz Menos significativo A5 A6 TL C5H 0 1 TH OUT TIMER 001 010 DECODIFICADOR 3/8 0 0 PC 0 1 00: timer no opera 01: Stop timer 10:Stop timer después de completar una cuesta 11:Stop Timer 011 100 Selecciona la puerta de salida 5 INTERR 0 000 101 5 110 111 1 00:IN 11:OUT PA PB 0 1 0:IN 1:OUT 0 0 A7 A6 A5 A4 A3 A2 A1 A0 1 1 0 0 0 X X X 1 1 0 0 0 0 0 0 C0H C/S Shift Select 1 1 0 0 0 0 0 1 C1H PA 1 1 0 0 0 0 1 0 C2H PB 1 1 0 0 0 0 1 1 C3H PC 1 1 0 0 0 1 0 0 C4H TL 1 1 1 0 0 0 1 0 1 C5H TH Io/M Tabla de direccionamiento Modo 0 1 0 1 1 0 1 0 1 0 4A 0 1 TL 20 0 0 TH 0 1 0 0 0 1 0 0 0 1 0 0 Tabla de Timer N= = = =4A 20H =TH TL Clases de Microprocesadores –Prof. B.Barraza.
  • 78. FLUXOGRAMA INICIALIZACIONES NO PRESIONA TECLA SI MOSTRAR TECLA DISPLAY NO NO #5 #6 SI PARTIR TIMER DETENER TIMER Clases de Microprocesadores –Prof. B.Barraza.
  • 79. 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.
  • 80. 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.
  • 81. 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 señal digital y periódicamente 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 señal digital correspondiente digamos de 01000011 en código binario de 8 bits. Internamente, el microprocesador compara este numero binario con un numero, también binario, que representa la temperatura deseada supóngase 01001000 para 23 ° C, Que es el valor deseado de temperatura que previamente se ha introducido a través de un teclado y almacenado en un registro. Como resultado de la comparación, 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 vía 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.
  • 82. 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.
  • 83. 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.
  • 84. 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.
  • 85. 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.
  • 86. 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.
  • 87. 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.
  • 88. 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.
  • 89. 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.
  • 90. A5 Apéndice 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 inglés) son algunos ejemplos que pasamos a comentar en las secciones siguientes. Demostración: Nombre: Procesador: Dispositivos: Líneas: negativo.asm 8085 Pantalla Grafica (256) 28 Descripción: 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.
  • 91. fin: hlt Demostración: Nombre: leds.asm Procesador: 8085 Dispositivos: Panel de Leds (1 linea) Generador de Interrupciones Líneas: 47 Descripción: 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.
  • 92. 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 Líneas: 59 Descripción: Simulación de un terminal de texto. ; Ejemplo de programa ; Simulador de terminal ; Asociado a interrupción TRAP .define texto E000h tamtexto 25*40 .org 1000h Clases de Microprocesadores –Prof. B.Barraza.
  • 93. ; ------------------------------; PROGRAMA PRINCIPAL ; ------------------------------mvi B, E0h mvi C, 00h call clear_all bucle: jmp bucle .org 0024h ; Direccion de interrupción 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.
  • 94. Ejemplo de una utilidad: Nombre: Reloj.asm Procesador: 8085 Dispositivos: Visualizador de 7 segmentos Generador de Interrupciones Líneas: 83 Descripción: Programa que convierte a un 8085 en un reloj digital con segundero y minutero. ; Ejemplo de programa ; Reloj digital ; Asociado a interrupción 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.
  • 95. 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 interrupción 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.
  • 96. 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 Líneas: 236 DESCRIPCIÓN: 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 ;Tamaño 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.
  • 97. .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.
  • 98. 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.
  • 99. 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.
  • 100. 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.
  • 101. 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 algún aporte en el camino de la enseñanza, rescatando ejemplo de mis compañeros 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 límite del conocimiento nos lo ponemos nosotros... paul.terrazas.lazaro@gmail.com Clases de Microprocesadores –Prof. B.Barraza.