Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Microprocesador 8085 (Ejercicio y Ejemplos) PDF
Microprocesador 8085 (Ejercicio y Ejemplos) PDF
Elctrica Electrnica
[Edicin 8]
APUNTES DEL
MICROPROCESADOR 8085
PROGRAMACIN EN LENGUAJE
ASSEMBLER
AUTOR:
PAUL TERRAZAS L.
ARICA CHILE
2013
1.
INTRODUCCION AL MICROCOMPUTADOR.
INTEL fue fundada por Gordon E. Moore y Robert Noyce en 1969, quienes
inicialmente quisieron llamar a la empresa Moore Noyce, pero sonaba mal (ya que en
ingls suena como More Noise, que literalmente significa: Ms Ruido), as que eligieron
como nombre las siglas de Integrated Electronics, en espaol Electrnica Integrada.
Este nombre estaba registrado por una cadena hotelera, por lo que tuvieron que comprar
los derechos para poder utilizarlo.
El xito comenz modestamente cuando consiguieron que los japoneses Busicom les
encargasen una remesa de microprocesadores para sus calculadoras programables. Pese
a las indicaciones de los japoneses, el ingeniero Ted Hoff dise un chip revolucionario
que poda ser utilizado en muchos otros dispositivos sin necesidad de ser rediseado.
Los chicos de Intel enseguida se dieron cuenta del potencial de este producto, capaz de
dotar de inteligencia a muchas mquinas tontas. El nico problema es que Busicom
posea los derechos, y para recuperarlos Intel tuvo que pagarles 60.000 dlares.
El centro de operaciones de Intel est localizado en Santa Clara, California. La
compaa tambin tiene instalaciones en Argentina, China, Costa Rica, Malasia,
Mxico, Israel, Irlanda, India, Filipinas, y Rusia. En los Estados Unidos Intel emplea
ms de 45.000 personas en Colorado, Massachusetts, Arizona, Nuevo Mxico, Oregn,
Texas, Washington, y Utah
1.1.-Centro de operaciones
El centro de operaciones de Intel est localizado en Santa Clara, California. La
compaa tambin tiene instalaciones en Argentina, China, Costa Rica, Malasia,
Mxico, Israel, Irlanda, India, Filipinas, y Rusia. En los Estados Unidos Intel emplea
ms de 45.000 personas en Colorado, Massachusetts, Arizona, Nuevo Mxico, Oregn,
Texas, Washington, y Utah
1.1.1.-Adquisicin de McAfee
El 19 de agosto de 2010 Intel, el mayor fabricante mundial de microchips, anunci la
compra de McAfee, compaa de software de seguridad informtica y del cual su
producto ms conocido es el antivirus McAfee VirusScan. Al mismo tiempo McAfee ya
haba anunciado la inversin en empresas especializadas a su vez en seguridad
dispositivos mviles, como tenCube y Trust Digital, pese a haber obtenido bajos
resultados en el ltimo trimestre. La adquisicin anunciada por Intel registra una
operacin de 7.680 millones de dlares.
Fig.1.2.1.3.-Historia y descripcin
El 4004 fue lanzado en un paquete de 16 pines CERDIP el 15 de noviembre de
1971. El 4004 fue el primer procesador de computadora diseado y fabricado por el
fabricante de chips Intel, quien previamente haca semiconductores de chips de
memoria. Marcian "Ted" Hoff formul la propuesta arquitectnica en 1969. Sin
embargo, la implementacin del microprocesador slo comenz en 1970 cuando
Federico Faggin fue empleado por Intel, procedente de Fairchild Semiconductor, para
dirigir el proyecto y para disear el 4004 (1970-1971). En Fairchild, Faggin haba
desarrollado la tecnologa pionera llamada Silicon Gate Technology (SGT) y haba
tambin diseado el primer circuito integrado MOS usando la tecnologa SGT (el
Fairchild 3708), en 1968, demostrando la viabilidad de la nueva tecnologa.
1.3.1.-Especificaciones tcnicas.
Microprocesador de 4 bits
Contiene 2.300 transistores
Encapsulado CERDIP de 16 pines
Mxima velocidad del reloj 740 KHz
Usa Arquitectura Harvard, es decir, almacenamiento separado de programas y
datos. Contrario a la mayora de los diseos con arquitectura de Harvard, que
utilizan buses separados, el 4004, con su necesidad de mantener baja la cuenta
de pines, usaba un bus de 4 bits multiplexado para transferir:
12 bits de direcciones (direccionando hasta 4 KB)
Instrucciones de 8 bits de ancho, que no deben ser colocadas en la misma
memoria de datos de 4 bits de ancho.
El conjunto de instrucciones est formado por 46 instrucciones (de las cuales 41
son de 8 bits de ancho y 5 de 16 bits de ancho)
16 registros de 4 bits cada uno
Stack interno de llamadas a subrutinas de tres niveles de profundidad
Chipset (circuitos auxiliares) para crear sistemas basados en el 4004
1.4.-INTEL 4040
El Intel 4040 fue el sucesor del Intel 4004. Fue lanzado al mercado en 1974. Diseado
por Federico Faggin (quien propuso la arquitectura y condujo el proyecto) y Tom Innes.
El 4040 fue usado primariamente en juegos, pruebas, desarrollo, y equipos del control.
El paquete del 4040 era ms de dos veces el ancho del 4004 y tena 24 pines en lugar de
los 16 del 4004. El 4040 agreg 14 instrucciones, un espacio ms grande para el stack (7
niveles en vez de 3), un espacio para programas de 8KB, 8 registros adicionales, y
habilidades de interrupcin (incluyendo sombras (shadows) de los primeros 8 registros).
Nuevas caractersticas
Interrupciones
Ejecucin paso a paso
Fig.1.4.Extensiones
Conjunto de instrucciones ampliado a 60 instrucciones.
Memoria de programa ampliada a 8 Kbytes.
Registros ampliados a 24.
Pila de llamadas ampliada a 7 niveles de profundidad.
1.5.-INTEL 8008
El Intel 8008 (i8008) es un microprocesador diseado y fabricado por Intel que fue
lanzado al mercado en abril de 1972. Codificado inicialmente como 1201, fue pedido a
Intel por Computer Terminal Corporation para usarlo en su terminal programable
Datapoint 2200, pero debido a que Intel termin el proyecto tarde y a que no cumpla
con la expectativas de Computer Terminal Corporation, finalmente no fue usado en el
Datapoint 2200. Posteriormente Computer Terminal Corporation e Intel acordaron que
el i8008 pudiera ser vendido a otros clientes.
El conjunto de instrucciones del i8008 y de todos los procesadores posteriores de
Intel est fuertemente basado en las especificaciones de diseo de Computer Terminal
Corporation.
El i8008 emplea direcciones de 14 bits, pudiendo direccionar hasta 16 KB de
memoria. El circuito integrado del i8008, limitado por las 18 patillas de su encapsulado
DIP, tiene un bus compartido de datos y direcciones de 8 bits, por lo qu e necesita una
gran cantidad de circuitera externa para poder ser utilizado. El i8008 puede acceder a 8
puertos de entrada y 24 de salida.
Aunque un poco ms lento que los microprocesadores Intel 4004 e Intel 4040 de
4 bits en cuanto a la cantidad de millones de instrucciones por segundo ejecutadas, el
hecho de que el i8008 procesara 8 bits de datos al tiempo y de que pudiera acceder a
mucha ms memoria hacen que el i8008 sea en la prctica unas tres o cuatro veces ms
rpido que sus predecesores de 4 bits.
1.6.-INTEL 8080
El Intel 8080 fue un microprocesador temprano diseado y fabricado por Intel. El CPU
de 8 bits fue lanzado en abril de 1974. Corra a 2 MHz, y generalmente se le considera
el primer diseo de CPU microprocesador verdaderamente usable.
1.6.1.-Modelo de programacin
El Intel 8080 fue el sucesor del Intel 8008, esto se deba a que era compatible a
nivel fuente en el lenguaje ensamblador porque usaban el mismo conjunto de
instrucciones desarrollado por Computer Terminal Corporation. Con un empaquetado
ms grande, DIP de 40 pines, se permiti al 8080 proporcionar un bus de direccin de
16 bits y un bus de datos de 8 bits, permitiendo el fcil acceso a 64 KB de memoria.
Tena siete registros de 8 bits, seis de los cuales se podan combinar en tres registros de
16 bits, un puntero de pila en memoria de 16 bits que reemplazaba la pila interna del
8008, y un contador de programa de 16 bits.
1.6.2.-El impacto industrial
El 8080 fue usado en muchos de los primeros microcomputadores, tales como la
Altair 8800 de MITS y el IMSAI 8080, formando la base para las mquinas que corran
el sistema operativo CP/M. Posteriormente, en 1976, aparece el microprocesador Zilog
Z80, completamente compatible con el 8080 pero ms capaz, el cual capitalizara en
esto, convirtindose el Z80 y el CP/M en la combinacin dominante de CPU y OS del
perodo, bastante parecido al x86 y el MS-DOS para el PC de la dcada posterior, los
(aos 1980). El primer microcomputador en una simple tarjeta fue construido en base al
8080.
1.7.-INTEL 8085
El Intel 8085 es un procesador de 8 bits fabricado por Intel a mediados de los 70.
Era binariamente compatible con el anterior Intel 8080 pero exiga menos soporte de
hardware, as permita unos sistemas de microordenadores ms simples y ms baratos
de hacer.
El nmero 5 de la numeracin del procesador proviene del hecho que solamente
requera una alimentacin de 5 voltios, no como el 8080 que necesitaba unas
alimentaciones de 5 y 12 voltios. Ambos procesadores fueron usados alguna vez en
ordenadores corriendo el sistema operativo CP/M, y el procesador 8085 fue usado como
un microcontrolador.
1.7.1.-Longitud de palabra
La longitud de palabra del microprocesador Intel 8085 es de 8 bits, o lo que es lo
mismo, 1 byte.
1.8.-INTEL 8088
El 8088 fue lanzado en 1979.
El 8086 y el 8088 ejecutan el mismo conjunto de instrucciones. Internamente
son idnticos, excepto que el 8086 tiene una cola de 6 bytes para instrucciones y el 8088
de solo 4. Exteriormente se diferencian en que el 8086 tiene un bus de datos de 16 bits y
el del 8088 es de solo 8 bits, por ello, el 8086 era ms rpido, mientras que el 8088
poda usar menos y ms econmicos circuitos lgicos de soporte, lo que permita la
fabricacin de sistemas ms econmicos.
El 8088 fue el microprocesador usado para el primer computador personal de
IBM, el IBM PC, que sali al mercado en agosto de 1981.
Bus de datos de 8 bits
Arquitectura interna de 16 bits
Direccionamiento de 1Mb
Clock de 5 MHz
Modo mximo y modo mnimo
Bus de direcciones y datos multiplexados
1.10.-INTEL 80286
El Intel 80286 (llamado oficialmente iAPX 286, tambin conocido como i286 o
286) es un microprocesador de 16 bits de la familia x86, que fue lanzado al mercado por
Intel el 1 de febrero de 1982. Cuenta con 134.000 transistores.
Caractersticas
Una de las caractersticas interesantes de este procesador es que fue el primer
procesador x86 con modo protegido, en el cual existan cuatro anillos de ejecucin y
divisin de memoria mediante tablas de segmentos. En este modo trabajaban las
versiones de 16 bits del sistema operativo OS/2. En este modo protegido se permita el
uso de toda la memoria directamente, habilitando que pudiera ser direccionada hasta 16
MB de memoria con la unidad de gestin de memoria (MMU) lineal del chip y con 1
GB de espacio de direccin lgica.
1.11.-INTEL 80386
El Intel 80386 (i386, 386) es un microprocesador CISC con arquitectura x86.
Durante su diseo se lo llam 'P3', debido a que era el prototipo de la tercera generacin
x86. El i386 fue empleado como la unidad central de proceso de muchos ordenadores
personales desde mediados de los aos 80 hasta principios de los 90.
Estas mejoras hacen que los i486 sean el doble de rpidos que un i386 e i387 a la misma
frecuencia de reloj. De todos modos, algunos i486 de gama baja son ms lentos que
los i386 ms rpidos.
con el exterior, es decir con componentes que estn situados fuera del propio
microprocesador. Existen tres tipos de buses distintos:
2.2.1.- Bus de direcciones
Se crea en los registros de direccionamiento de 16 bits y se comunica con el
exterior mediante un conjunto de 16 lneas (lneas de direcciones) normalmente
enumeradas de A0 hasta A15. Por este bus, las direcciones salen siempre hacia el
exterior.
2.2.2.- Bus de datos
Se genera en el interior del microprocesador y lo utiliza para intercambiar
informacin entre sus distintos bloques internos y para comunicarse con el exterior.
Son un conjunto de 8 bits que utilizan 8 lneas de conexin al exterior, normalmente
denominadas D0 a D7. Por este bus sale y entra informacin, por tanto se trata de un
bus bidireccional.
2.2.3.- Bus de control
Compuesto por una serie de lneas, variable en nmero segn el componente de
que se trate. Contiene las lneas de sincronizacin de funciones, pudiendo ser unas de
salida y otras de entrada al microprocesador. Algunas seales de control pueden ser por
ejemplo, las de lectura, escritura, reloj o clock, etc.
BUS DATOS INTERNO
ACUMULADOR
REGISTROS
INTERNOS DE 8
BITS
ALU
BUS DATOS
EXTERNO
CONTROL
REGISTROS
INTERNOS DE
16 BITS
BUS DE
DIRECCIONES
INTERNO
REGISTRO DE
FLAGS
BUS DE
CONTROL
FIG.12A
Los registros de propsito especial son: el Contador del Programa (CP), de 16 bits; el
Stack Pointer o puntero de pila (SP), 16 bits; los Registros Temporales, de 8 bits
cada uno, pero que pueden operar unidos; el Registro de direcciones, de 16 bits, cuyas
salidas son las patas del bus de direcciones del microprocesador, y el Registro de
Instruccin (RI), de 8 bits.
El Contador de Programa (CP) es un registro que memoriza la direccin de
la prxima instruccin a ejecutar o bien la direccin de parte de una instruccin formada
por ms de un byte. Las instrucciones del 8085 y de todos los microprocesadores de 8
bits pueden ser de 1, 2 3 bytes, ordenados de forma sucesiva en la memoria.
La unidad de control incrementa automticamente en uno al contenido del CP
cada vez que termina un ciclo de bsqueda, salvo cuando aparece la instruccin HALT
(paro). La seal de RESET, que es una de las entradas de la unidad de control, coloca al
CP a cero e inicializa la ejecucin del programa.
Fig.-Flags
S: (Signo)
Z: (Cero)
P: (Paridad )
Si el resultado es par P= 1
CY: (Carry)
Si hay carry Cy=1
Si no hay carry Cy=0
5. Tipos de instrucciones
El nmero de instrucciones que cada microprocesador puede interpretar y
ejecutar es distinto en cada caso. As el 8085 est diseado para admitir 74 instrucciones
bsicas, de tal forma que, si contemplamos las variantes de algunas de ellas, este
dispositivo est preparado par a realizar 246 operaciones distintas.
5.1 Lista de instruciones 8085
Las instrucciones del 8085 se pueden clasificar en cinco grupo:
5.1.1.- Transferencia de datos entre registros o entre posiciones de memoria y registros.
5.1.2.- Operaciones aritmticas.
5.1.3.-Operaciones lgicas
5.1.4.-Bifurcaciones (salto).
5.1.5.- Instrucciones de stack, /S y control de mquina.
Existe un gran cantidad de clasificaciones que sin lugar a dudas ayudaran a comprender mas
sus caractersticas. Pero su dominio no est en memorizarlas sin darle sentido, si no el buscar
herramientas que permitan solucionar requerimientos. En programacin siempre se empieza con
la estructura elemental, de all se arma la estructura total. Si no hay practica no hay maestra.
Instruccin
MOV
MVI
CMP
CPI
LXI
STAX
STA
LDAX
LDA
INR
DCR
INX
DCX
ADD
ADC
ADI
ACI
SUB
SUI
SBI
Nro
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Instruccin
ANA
ANI
XRA
XRI
ORA
ORI
CMC
STC
DAA
NOP
RLC
RRC
RAL
RAR
JMP
JC
JNC
JZ
JNZ
JM
Nro
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Instruccin
JP
JPE
CALL
CC
CNC
CZ
CNZ
CM
CP
CPE
CPO
RET
RC
RNC
RZ
RNZ
RM
RP
RPE
RPO
Nro
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Instruccin
RST
EI
DI
IN
OUT
HLT
PUSH
POP
DAD
XCHG
XTHL
SPHL
No
Nemonicos
0.
Directiva General
.ORG 0
.data 2000H
dB
dW
.define
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
MOV M, Reg
MVI R1, R2
Bits afectados:
El primer operando debe ser uno de los registros A, B, C, D, E, H o L, que ser cargado con el dato especificado en el
segundo operando (DATOS). El dato no debe exceder de un byte.
La instruccin:
MVI H, 33H
carga en el registro H el valor 33H, mientras que La instruccin
MVI L, 44H
carga en el registro L el valor 44H.
Direccionamiento:
Inmediato
MVI M, 2AH
carga en la posicin de memoria 3344H (direccin aportada por los registros H
y L) el valor 2AH.
CMP Reg
Registro
Complemento 1
Compemento 2
Dato complementado
05H:
C-1:
C-2:
FBH:
Acumulador
Dato complementado
Nuevo acumulador
0AH:
FBH:
05H:
0
1
0
1
0
1
0
1
0
1
1
0
0
1
1
0
1
1
0
1
0
0
1
0
0
1
0
0
1
0
1
1
0
0
0
1
1
1
0
0
1
1
CY=0 Z=0
El bit de cero se pondra a cero puesto que son desiguales. Z=0
CMP M
CPI dato
Flags afectados:
Z, S, P, CY, AC
Compara el valor del byte especificado con el contenido del acumulador y posiciona los bits de cero y acarreo para indicar
el resultado. El bit de cero indica igualdad. Un 0 en el acarreo indica que el contenido del acumulador es mayor que DATOS.
Un 1 en el acarreo indica que el acumulador es menor que DATOS. Sin embargo, el significado del bit de acarreo es contrario
cuando los valores tienen diferente signo o cuando uno de los valores est complementado. El valor de DATOS no debe
exceder de un byte.
Si tenemos la secuencia de instrucciones
(1).MVI A, 25H
(2).CPI 20H
La instruccin (1) carga en el acumulador el valor 25H.
La instruccin (2) realiza la siguiente operacin de suma (tomando el
complemento a dos del dato inmediato, es decir, E0H):
Direccionamiento:
Registro indirecto
DATO
Complemento 1
Compemento 2
Dato complementado
20H:
C-1:
C-2:
E0H:
Acumulador
Dato complementado
Nuevo acumulador
25H:
E0H:
05H:
0
1
0
1
1
0
0
1
0
1
0
1
0
1
0
1
1
0
0
1
0
0
1
0
1
1
0
0
0
0
0
0
0
1
0
1
0
0
0
1
0
1
Cy=1
Las banderas son afectas.
CPI
Z
Cy
X
X>Y
0
0
X
X=Y
1
0
P
X<Y
0
1
Cy
LXI Reg,dato
Bits afectados:
Direccionamiento:
LXI es una instruccin de 3 bytes; su segundo y tercer byte contienen el dato que ha de ser cargado en el par de
registros (PR). El primer operando debe especificar el par de registros a ser cargados, pueden ser los pares BC, DE, HL, o el
SP. El segundo operando especifica los dos bytes a ser cargados. LXI es la nica instruccin inmediata que acepta un valor de
Inmediato
STAX Reg
Bits afectados:
Direccionamiento:
Registro indirecto
STA Dir
Direccionamiento:
Directo
LDAX Reg
Cargar el acumulador
El contenido de la posicin de memoria especificada por los registros B y C, o los registros D y E, reemplaza el
contenido del acumulador.
Si el registro D contiene 3FH y el registro E contiene 16H, la instruccin
LDAX D
cargar en el acumulador el contenido de la posicin de memoria 3F16H.
LDA Dir
Bits afectados:
Direccionamiento:
Registro indirecto
10
INR Reg
Bits afectados:
Z, S, P, AC
Direccionamiento:
Registro indirecto
11
DCR Reg
Bits afectados:
Z, S, P, AC
Direccionamiento:
Registro indirecto
12
INX Reg
Direccionamiento:
Registro
LDA DIR carga el acumulador con el contenido de la memoria direccionada por DIR. La direccin puede ser puesta como un
nmero, una etiqueta previamente definida o una expresin.
A continuacin se introducen en el acumulador el contenido de la posicin de memoria 1000H:
LDA 1000H
13
DCX Reg
Direccionamiento:
Registro
ADD
Bits afectados:
Z, S, P,CY, AC
Direccionamiento:
Registro
14
Registro B
Acumulador
Nuevo acumulador
3AH:
6CH:
A6H:
0
0
1
0
1
0
1
1
1
1
0
0
1
1
0
0
1
1
1
0
1
0
0
0
2. La instruccin
ADD A
duplica el contenido del acumulador.
15
ADC Reg
Bits afectados:
Z, S, P,CY, AC
Direccionamiento:
Registro indirecto
El contenido del registro o posicin de memoria especificados ms el contenido del bit de acarreo, se suman al
contenido del acumulador.
Supongamos que el registro B contiene el valor 30H, el acumulador 76H, y el bit de
acarreo est puesto a cero. La instruccin 18 Simulador del microprocesador 8085
ADC C
realizar la siguiente suma:
Registro B
Acumulador
Bit de acarreo
Nuevo acumulador A6H
30H:
76H:
0
0
0
1
1
1
1
1
0
0
0
1
0
1
0
0
0
0
El nuevo contenido del acumulador ser A6H, mientras que todos los bits de condicin quedarn puestos a cero excepto
los de signo y paridad. Si el bit de acarreo hubiera sido 1 antes de realizar la operacin, hubiera tenido lugar la siguiente
suma:
Registro B
Acumulador
Bit de acarreo
Nuevo acumulador A7H
30H:
76H:
0
0
0
1
1
1
1
1
0
0
0
1
0
1
16
ADI
Bits afectados:
Z, S, P, CY, AC
0
0
1
1
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
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
22H:
14H:
0
0
0
0
1
0
0
1
0
0
0
1
1
0
+
37H:
SUB Reg
Bits afectados:
Z, S, P,CY, AC
Direccionamiento:
Registro indirecto
El contenido del registro o posicin de memoria especificados se resta al contenido del acumulador, usando
aritmtica de complemento a dos. El resultado se guarda en el acumulador.
Si no hay acarreo del bit de ms peso, el bit de acarreo se pone a uno, y viceversa, al contrario de lo que ocurre
con la operacin de suma.
Antes de entrar en los ejemplos recordamos que restar utilizando aritmtica de
complemento a dos equivale a complementar cada bit del segundo operando y sumar 1.
1. Si el acumulador contiene 60H y el registro E contiene 28H, la instruccin
SUB E
realizar la siguiente operacin de resta: (Registro B)+(-28H)
Acumulador
Dato inmediato
60H:
28H:
0
0
1
0
1
1
0
0
0
1
0
0
0
0
0
0
Registro E
Complemento 1
Compemento 2
Dato complementado
28H:
C-1:
C-2:
D8H:
Acumulador
Dato complementado
Nuevo acumulador
60H:
D8H:
38H
0
1
0
1
1
0
0
1
1
0
0
1
0
1
0
1
1
0
0
1
0
1
1
0
1
0
1
0
1
1
0
1
1
0
0
0
0
0
0
0
0
0
A=38H
El acumulador obtiene un nuevo valor A=38H.
19
SUI dato
Bits afectados
Z, S, P, CY, AC
B3H:
C-1:
C-2:
4DH:
Acumulador
Dato complementado
Nuevo acumulador
B3H:
4DH:
00H:
1
0
0
1
1
0
1
0
0
1
0
1
1
0
1
0
1
1
1
0
0
0
1
0
1
0
0
1
0
0
0
1
0
0
1
0
1
0
0
1
1
0
Como era de esperar el resultado final del acumulador es cero ya que le estamos restando su propio valor. El valor 6DH del
dato inmediato corresponde al complemento a dos del valor B3H que estamos restando.
Debido a que existe desbordamiento del sptimo bit se produce acarreo y se pone el bit de acarreo a cero.
El bit de paridad se pone a uno mientras que los dems permanecen inactivos.
20
SBI
00H:
FFH:
0
1
0
1
1
1
0
1
0
1
0
1
0
1
+
FFH:
Cy=1
Z=0
Ca=0
0
1
0
1
No hay acarreo, por lo que el bit de acarreo se pone a uno. Los bits de cero y
acarreo auxiliar estn a cero, mientras que los de signo y paridad se ponen a uno.
21
ANA Reg
Bits afectados:
Z, S, P,CY, AC
Direccionamiento:
Registro indirecto
B
0
1
0
1
f
0
0
0
1
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
23
XRA Reg
Bits afectados:
Z, S, P,CY, AC
Direccionamiento:
Registro
B
0
1
0
1
f
0
1
1
0
0
1
1
0
0
0
Nuevo acumulador
56H:
La funcin O-EXCLUSIVO de cualquier bit con uno da lugar al complemento del mismo. As, si el acumulador contiene todo
unos, la instruccin
XRA B
produce el complemento a uno del contenido del registro B, y lo guarda en el acumulador.
En algunas ocasiones, un byte se utiliza para reflejar los estados de ciertas condiciones dentro de un programa, donde cada
uno de los ocho bits puede responder a una determinada condicin de falso o verdadero, actuado o inhibido, etc.
Mediante la funcin O-EXCLUSIVO podemos determinar cuntos bits de la palabra han cambiado de estado en un
determinado lapsus de tiempo.
24
25
XRI Dato
Bits afectados:
Z, S, P, CY, AC
ORA Reg
Bits afectados:
Z, S, P,CY, AC
Direccionamiento:
Registro indirecto
Como sea que la funcin OR de cualquier bit con un uno da como resultado uno, y de
cualquier bit con cero, lo deja invariable, esta funcin se utiliza frecuentemente para
poner a uno grupos de bits.
Si el registro B contiene OFH y el acumulador almacena 33H, la instruccin
ORA B
realiza la siguiente operacin:
Acumulador
33H:
0 0 1 1 0 0 1 1
Registro B
0FH:
0 0 0 0 1 1 1 1
Nuevo acumulador
3FH:
0 0 1 1 1 1 1 1
Este ejemplo concreto garantiza que los cuatro bits de menos peso del
acumulador son unos, mientras que los dems permanecen invariables.
26
ORI datos
Bits Afectados: Z, S, P,
CY, AC
Como vemos la instruccin ORI de nuestro ejemplo activa los cuatro bits de menor peso, dejando invariables los restantes.
27
CMC
Bits Afectados Cy
28
STC
DAA
Bitsafectados
Z,S,P,CY,AC
Direccionamiento
Registro
Complementar acarreo
Si el bit de acarreo es 0, se pone a 1. Si es un 1, se pone a 0.
Activar acarreo
El bit de acarreo se pone a 1.
29
Esta instruccin se utiliza en las operaciones de suma de nmeros decimales. Es la nica instruccin cuya operacin depende
del bit de acarreo auxiliar.
Supongamos que queremos realizar una suma decimal de dos nmeros (40 + 80).
Ambos bits de acarreo estn a cero.
La secuencia de instrucciones podra ser:
(1).MVI B,80H
(2).MVI A,40H ; Acumulador = 40H
(3).ADD B
; Acumulador = 40H + 80H = C0H
(4).DAA
; Acumulador = 20H
; Bit de acarreo = 1
0
0
0
0
0
0
Cy=0
Cy=0
Cy=1
30
NOP
31
RLC
Bits Afectado Cy
Az
Acc
Ao
...
32
RRC
Bits Afectado Cy
Cy
Az
Acc
Ao
...
33
RAL
Desplazar el acumulador hacia la izquierda a travs del bit de acarreo Rotate Arraund Left
RAL hace girar el contenido del acumulador y el bit de acarreo un espacio de un bit hacia la salida (izquierda). El bit de
acarreo que es tratado como si fuera del acumulador, se transfiere el bit de menor orden del acumulador. El bit de mayor
orden del acumulador se transfiere al bit de acarreo. No tiene operandos.
Cy
Az
Acc
Ao
...
RAR
34
Cy
Az
Acc
Ao
...
JMP dir
35
Salto incondicional
La instruccin JMP DIR altera la ejecucin del programa cargando el valor especificado
por DIR en el contador de programa.
JC dir
36
JZ dir
JNZ dir
JM dir
37
38
39
40
JP dir
JPE dir
41
42
CALL dir
43
Llamada incondicional
CALL guarda el contenido del contador de programa (la direccin de la prxima instruccin secuencial) dentro del stack y a
continuacin salta a la direccin especificada por DIR.
Cada instruccin CALL o alguna de sus variantes implica una instruccin RET (retorno), de lo contrario el programa podra
"perderse" con consecuencias impredecibles. La direccin debe ser especificada como un nmero, una etiqueta, o una
expresin. La etiqueta es lo ms normal (El ensamblador invierte los bytes alto y bajo de direccin durante el proceso de
ensamblado). Las instrucciones CALL se emplean para llamadas a subrutinas y debemos tener presente que siempre emplean
el stack.
44
CC dir
CNC dir
CZ dir
CNZ dir
CM dir
45
46
47
48
CP dir
49
CPE dir
50
CPO dir
51
RET
52
Retorno incodicional
Se realiza una operacin de retorno incondicional.
La instruccin RET echa fuera dos bytes de datos del stack y los mete en el
registro contador de programa. El programa contina entonces en la nueva direccin.
Normalmente RET se emplea conjuntamente con CALL.
RC
RNC
53
54
La instruccin RNC comprueba el bit de acarreo. Si est a 0 indicando que no hay
acarreo, la instruccin echa fuera del stack dos bytes y los carga en el contador de
programa. Si el bit est a 1 contina el ciclo normal.
RZ
RNZ
RM
RP
RPE
RPO
RST
Es una instruccin CALL para usar con interrupciones. RST carga el contenido del
contador de programa en el stack, para proveerse de una direccin de retorno y salta a
una de las "ocho" direcciones determinadas previamente.
Un cdigo de tres bits incluido en el cdigo de operacin de la instruccin RST
especifica la direccin de salto. Esta instruccin es empleada por los perifricos cuando
intentan una interrupcin.
Para volver a la instruccin en que ha tenido lugar la interrupcin, se debe
utilizar una instruccin de RETORNO.
Activar interrupciones
La instruccin EI pone en servicio el sistema de interrupciones a partir de la siguiente
instruccin secuencial del programa. Esta instruccin activa el flip-flop INTE.
Se puede desconectar el sistema de interrupciones poniendo una instruccin DI
al principio de una secuencia, puesto que no se puede predecir la llegada de una
interrupcin.
Al final de la secuencia se incluye la instruccin EI que vuelve a habilitar el
sistema de interrupciones. (RESET tambin pone fuera de servicio el sistema de
interrupciones adems de poner el contador de programa a cero).
Desactivar interrupciones
Esta instruccin desactiva el flip-flop INTE. Despus de la ejecucin de una instruccin DI, el sistema de "interrupciones"
esta sin posibilidad de ponerse en marcha. En aplicaciones que empleen las interrupciones, la instruccin DI se emplea
solamente cuando una determinada secuencia no debe ser interrumpida. Por ejemplo, se puede poner fuera de servicio el
sistema de interrupciones incluyendo una instruccin DI el principio del cdigo de secuencia.
La interrupcin TRAP del 8085 no puede ser puesta fuera de servicio. Esta interrupcin especial esta prevista para serios
problemas que pueden presentarse independientemente del bit de interrupcin (fallo de alimentacin, etc.).
Entrada
La instruccin IN PORT lee los 8 bits de datos que hay en el "PORT" especificado y los
carga en el acumulador. El operando debe ser un nmero o una expresin que produzca
un valor comprendido entre 00H y FFH.
55
56
57
58
59
60
61
EI
62
DI
63
IN port
64
1. La instruccin
IN 2
deposita en el acumulador los datos de entrada del puerto 2.
OUT port
Salida
65
OUT PORT pone el contenido del acumulador en el bus de datos de 8 bits del puerto
seleccionado. El nmero de puertos oscila de 0 a 255 y es duplicado en el bus de
direcciones. Es la lgica externa la encargada de seleccionar el puerto y aceptar el dato
de salida. El operando (PORT) debe especificar el nmero del puerto de salida
seleccionado.
HLT
PUSH pr
S
Cy
Sea cual sea el par de registros especificado, una vez que los datos se han
guardado, el puntero de pila se decrementa en dos unidades.
Despus de PUSH
Registro C
16
Puntero
Stack
2028
Registro B
3F
Registro C
16
MEMORIA
DIRECCION
MEMORIA
DIRECCION
00
2027
00
2027
00
2028
16
2028
00
2029
3F
2029
00
2030
00
2030
2. Supongamos ahora que el acumulador contiene 33H, el puntero de pila tiene 102AH, y los bits de condicin de cero,
acarreo y paridad estn a uno, mientras que los de signo y acarreo auxiliar estn a cero. La instruccin
PUSH PSW
Almacena el contenido del acumulador en la posicin de memoria 1028H, y coloca el valor 47H, correspondiente a los
citados estados de los bits de condicin, en la posicin 1029H, mientras que en el puntero de pila queda el valor 1028H.
POP pr
POP pr copia el contenido de la posicin de memoria direccionada por el stack pointer
en el registro de bajo orden del par de registros especificados. A continuacin se
incrementa el stack pointer en 1 y copia el contenido de la direccin resultante en el
registro de ms alto orden del par. Luego se incrementa el stack pointer otra vez de
modo que se apunta al siguiente dato del stack. El operando debe especificar el par de
registros BC, DE, HL o PSW.
POP PSW usa el contenido de la localizacin de memoria especificada por el
stack pointer para restablecer los bits de condiciones.
1. Supongamos que las posiciones de memoria 2028H y 2029H contienen respectivamente 16H y 3FH, mientras que el
puntero de pila contiene 2028H. La instruccin
POP B
Carga el registro C con el valor de 16H de la posicin de memoria 2028H, carga el registro B con el valor 3FH de la posicin
2029H, e incrementa dos unidades el puntero de stack, dejndolo en 2030H. Grficamente podemos ver este proceso:
Antes de POP
Despus de POP
Puntero
Stack
2028
Registro B
00
Registro C
16
MEMORIA
DIRECCION
00
2027
16
2028
3F
2029
00
2030
Puntero
Stack
2030
Registro B
3F
Registro C
16
MEMORIA
DIRECCION
00
2027
16
2028
3F
2029
00
2030
Z
0
X
0
A
0
X
1
P
1
X
1
Cy
1
=16H
69
DAD pr
Bits sfectados
Suma doble
DAD RP suma el valor de un dato de 16 bits contenido en un determinado par de registros (PR) al contenido del par de
registros HL. El resultado es almacenado en el par HL. Los operandos (PR) pueden ser B = BC, D = DE, H = HL, SP.
Tngase en cuenta que la letra H debe ser empleada para especificar que el par de registros HL debe ser doblado. DAD pone
el bit de acarreo a 1 si hay una salida de acarreo de los registros HL. Y adems no afecta a ningn otro bit.
2. Al ejecutar la instruccin
DAD H
se duplica el valor del nmero de 16 bits contenido en H L (equivale a desplazar los 16 bits una posicin hacia la izquierda).
70
XCHG
71
XTHL
03
04
01
02
01
02
03
04
XTHL cambia los dos bytes de la posicin ms alta del stack con los dos bytes almacenados en los registros H y L. As
XTHL salva el contenido actual del par HL y carga nuevos valores en HL.
XTHL cambia el contenido del L con la posicin de memoria especificada por el stack pointer y el registro H es
intercambiado con el contenido del SP+1.
Si el puntero de pila contiene 40B4H, los registros H y L contienen AAH y BBH respectivamente, y las posiciones de
memoria 40B4H y 40B5H contienen CCH y DDH respectivamente, la instruccin
Despus de XTHL
Antes de XTHL
72
SPHL
Puntero
Stack
40B4
Registro H
DD
Registro L
CC
Puntero
Stack
40B4
Registro H
AA
Registro L
BB
MEMORIA
DIRECCION
MEMORIA
DIRECCION
00
40B3
00
40B3
BB
40B4
CC
40B4
AA
40B5
DD
40B5
00
40B6
00
40B6
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.
NEMONICO
EXP. GRAF.
FLAGS
INSTRUCCIONES DE TRANSFERENCIA
MOV r1,r2
MOV r,M
MOV M,r
MVI r,byte
MVI M,byte
LXI rp,doble
LDA addr
STA addr
LHLD addr
SHLD addr
LDAX rp
STAX rp
XCHG
(r1)(r2)
(r)[(HL)]
[(HL)] (r)
(r)byte
[(HL)] byte
(rpl)1 byte
(rph)2 byte
(A)[addr]
[addr](A)
(L)[addr]
(H)[addr+1]
[addr](L)
[addr+1](H)
(A)[(rp)]
[(rp)](A)
(H)(D) (L)(E)
NINGUNO
NINGUNO
NINGUNO
NINGUNO
NINGUNO
NINGUNO
NINGUNO
NINGUNO
NINGUNO
NINGUNO
NINGUNO
NINGUNO
NINGUNO
INSTRUCCIONES ARITMTICAS
ADD r
ADD M
ADI byte
ADC r
ADC M
ACI byte
SUB r
SUB M
SUI byte
SBB r
SBB M
SBI byte
INR r
INR M
DCR r
DCR M
INX rp
DCX rp
DAD rp
DAA
(A)(A)+(r)
(A)(A)+[(HL)]
(A)(A)+byte
(A)(A)+(r)+CY
(A)(A)+[(HL)]+CY
(A)(A)+byte+CY
(A)(A)-(r)
(A)(A)-[(HL)]
(A)(A)-byte
(A)(A)-(r)-CY
(A)(A)-[(HL)]-CY
(A)(A)-byte-CY
(r)(r)+1
[(HL)][(HL)]+1
(r)(r)-1
[(HL)][(HL)]-1
(rp)(rp)+1
(rp)(rp)-1
(HL)(HL)+(rp)
Ajuste BCD de (A)
TODOS
TODOS
TODOS
TODOS
TODOS
TODOS
TODOS
TODOS
TODOS
TODOS
TODOS
TODOS
Z, S, P, AC
Z, S, P, AC
Z, S, P, AC
Z, S, P, AC
NINGUNO
NINGUNO
CY
NINGUNO
INSTRUCCIONES LGICAS.
ANA r
ANA M
ANI byte
XRA r
TODOS
TODOS
TODOS
TODOS
XRA M
XRI byte
ORA r
ORA M
ORI byte
CMP r
CMP M
CPI byte
TODOS
TODOS
TODOS
TODOS
TODOS
TODOS
TODOS
TODOS
NEMONICO
EXP. GRAF.
FLAGS
INSTRUCCIONES DE ROTACIN Y FLAGS
RLC
RRC
RAL
RAR
CMA
CMC
STC
Rotacion izqda
Rotacin dcha
Rot. izqda. con CY
Rot. dcha. con CY
Comp. A1 de (A)
Invierte (CY)
(CY)1
CY
CY
CY
CY
NINGUNO
CY
CY
INSTRUCCIONES DE BIFURCACIN
ccc=NZ salto si no cero (Z=0), ccc=Z salto si cero (Z=0),
ccc=NC salto si no acarreo (CY=0), ccc=C salto si acarreo
(CY=1) , ccc=PO salto si paridad impar (P=0), ccc=PE
salto si paridad par (P=1), ccc=P salto si positivo (S=0),
ccc=M salto si negativo ( S=1 )
JMP addr
Jccc addr
(PC)addr
Si ccc=1, (PC)addr;
Si ccc=0, (PC)(PC)+3
CALL addr
Guarda PC en la pila
(PC)addr
Cccc addr Si ccc=1, guarda PC en
la pila, (PC)addr;
Si ccc=0, (PC)(PC)+3
RET
Recupera PC de la pila
Rccc
Si ccc=1, recupera PC
de la pila;
Si ccc=0 (PC)(PC)+1
RSTn
(PC)n x 8
PCHL
(PC)(HL)
NINGUNO
NINGUNO
NINGUNO
NINGUNO
NINGUNO
NINGUNO
NINGUNO
NINGUNO
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
IN puerta
OUT puerta
(A)[puerta]
[puerta](A)
NINGUNO
NINGUNO
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
LXI
STAX
LDAX
DCX
INX
STA
LDA
DCR
INR
MVI
MOV
.ORG 0
MVI A,10H
STA 4200H
HLT
Analisis: El counter es una herramienta de ciclo finito, de gran utilidad se usa para recorrer
determianda cantidad de posiciones en el registro, complementado con un condicionante para
el fin de su ejecucin. En general se usa en conjunto a la instreuccion JNZ, JZ, CMP etc.
Elementos condicionantes para efectuar un salto, comparar o logicos. Fluxograma:
Inicializar -> Origen 0, Counter en 10 ->Decrementar Counter-> Si: es igual a 0 FIN, No:
Regresar a decrementar.
3.- Permite sumar valores en el acucmulado
.ORG 0
MVI A,00H ;inicializo Acumulador
MVI C,10H ; dato2 o ounter
MVI B,02H ; dato 1 o tabla
LOOP: ADD B
DCR C
; contador
JNZ LOOP
HLT
4.- Ingresa los valores de forma regresiva de una tabla dada (Laboratorio 2)
El programa debe realizar lo siguiente:
Se tiene una tabla de 10 datos numericos almacenados en formaascendentes a partir de
la direccion de memoria 1000h. Se desea construir una segunda tabla a partir de estos datos y
almacenarlos a partir de la posicion de memoria 1010h, pero en forma inversa, es decir, estos
datos deberan quedar en forma descendente
Desarrollo:
data 1000H
dB 1h,2h,3h,4h,5h,6h,7h,8h,9h,10h
.ORG 0
MVI A,0
MVI L,9
;COUNTER
LXI B,1009H ;POSICIONAMIENTO
LXI D,1010H ;POSICIONAMIENTO
XX: LDAX B
STAX D
DCX B
INX D
DCR L
JNZ XX
HLT
Descripcin: Existen muchas maneras de crear lo que se nos pide. Visualicemos 2 tablas
llamadas BC y DE. En BC ya se han ingresado datos y en DE esos datos se almacenarn de
forma inversa. Ambos con el mismo tamao N. La manera que abord este problema fue
empezar a recorrer en forma decreciente la tabla BC y su informacin se almacenaba en el
acumulador a mismo tiempo que se transfera este dato a la tabla DE.
MOV A,M
CPI 1
JNZ XX
INR C
XX:
DCR B
JZ FIN
INX H
JMP OTRO
HLT
LARGEST
Los ciclos de la mquina son las operaciones bsicas realizadas por el procesador,
mientras que las instrucciones se ejecutan. El tiempo necesario para realizar cada ciclo de la
mquina se expresa en trminos de Tstates. Un T-estado es el perodo de tiempo de un ciclo
de reloj del microprocesador.The various machine cycles are (los diferentes ciclos de la
mquina son):
MVI B,104
4T
LXI H,1000
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
T=
Programa de retardo
Ejemplo 1 de tiempo de retardo
xx:
MVI A,03
; 7T Aqui N=03
DCR A
; 4T
JNZ XX
next inst.
; ......
HLT
; 4T
7T
4T
4T
4T
10T
10T
7T
N-1
4T
N=2
N=1
N=0
START
NO
N1
SI
N2
N1=N2
NO
N2=0
SI
N1=0
NO
SI
TT= 4T+ N1* 7T +N1X + N1*4T +(N1-1)10T+ 7T+4T
X=N2*4T+(N2-1)*10T+7T
1.
2.
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
3.
Mostrar los contenidos de cada registro cuando las instrucciones son ejecutadas.
Inicialmente todos los registros estn en 0.
a. MVI A, 56H
MVI B, 28H
MOV A, B
MOV C, A
MOV H, C
HLT
b. MVI B, 28H
ORI 45H
SUB B
MOV C, A
MOV E, C
HLT
c. MVI B, 28H
CMA
XRA B
MOV L, B
ADD L
HLT
4.
Especificar los contenidos de cada registro en un uP 8085, cuando se ejecutan las siguientes
instrucciones. Asuma que todos los registros inicialmente estn en 0.
a. MVI B, A9H
MVI C, 34H
ADD B
SUB C
MOV D, A
MVI A, 7DH
ORA D
MOV H, A
CMA
XRA H
MOV C, H
MOV A, D
HLT
b. MVI A, 03H
RLC
RAR
MVI E, 76H
CMP E
MOV B, A
MOV H, B
MOV L, H
SUI 21H
ANA L
MOV C, L
INR C
HLT
c.
MVI C, D1H
INR A
ANA C
MOV D, C
ANA D
ADI 4CH
MOV L, A
DCR L
XRI 24H
ORA L
DCR L
MOV L, A
HLT
5.
Especificar los contenidos de registros y banderas afectados, cuando las siguientes
instrucciones se ejecutan. Asuma registros inicialmente en 0
a. MVI L, 04H
ADI 2BH
SUB L
MOV B, A
RAL B
CMP B
HLT
b. CMA
XRI 56H
MOV B, A
MOV D, B
ADD D
ORA D
HLT
c. MVI C, 71H
MVI D, 29H
MOV A, D
SUB D
ADD C
ANA D
HLT
d. MVI H, 8AH
DCR H
DCR H
ORI 9DH
ANI 36H
SUB H
HLT
6.
Especificar los contenidos del acumulador y bit status CY para las siguientes instrucciones.
Explicar el significado del carry flag, si est en 1.
a
MVI A, B7H
RLC
RLC
RLC
RLC
HLT
MVI A, B7H
RAL
RAL
RAL
RAL
HLT
c. MVI A, B7H
RRC
RRC
RRC
RRC
HLT
d. MVI A, B7H
RAR
RAR
RAR
RAR
HLT
8.
Escribir un programa 8085 para; a) limpiar Acc. b) sumar 47H c) restar 92h d) XOR 64H d)
OR 38H e) AND 2BH f) mostrar resultado final
9.
Write 8085 assembly language to a) load 00h in accumulator b) decrement the accumulator by
1 four times c) transfer the answer to others register available in 8085 microprocessor.
10.
Escriba 8085 en lenguaje ensamblador para a) cargar 00h en el acumulador b) disminuir el
acumulador 1 cuatro veces c) transferir la respuesta a otros registran disponible en 8085
microprocesador.
11.
Escribir instrucciones para cargar el 65H nmero hexadecimal en el registro C y 92H en el
acumulador. Muestra el nmero de 65H en el puerto 07H y 92H a 08H.
12.
13.
Mostrar los contenidos de registros y localizaciones de memorias, que son afectados por la
ejecucin de las siguientes instrucciones (Seguimiento de programa ejecutndose paso a paso).
A
Memory
MVI C, FFH
LXI H, 2070H
MOV M, C
LXI D, 2070H
LDAX D
LDA 2070H
HLT
14.
Identificar los contenidos de los registros, localizacin de memoria 2355H y las banderas,
cuando se ejecutan las siguintes instrucciones.
A
AC
LXI H, 2355H
MVI M, 8AH
MVI A, 76H
ADD M
STA 2355H
INR M
ORA M
HLT
15.
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
CY
2355H
16.
Tres bytes de datos AAH, BBH, CCH se almacenan en posiciones de memoria 2000H a
2002h. Transfiera todo el bloque de datos a nuevas ubicaciones a partir de 3000H.
17.
Datos byte 22H, A5H, B2H, 99H, 7FH y 37H se almacenan en una ubicacin de memoria a
partir de 2000H ubicacin. La transferencia de los datos a la ubicacin 3000H a 3005H en orden
inverso. (22H a 37H 3005H y 3000H a).
18.
Escriba un programa para agregar datos byte 1AH, 32H, 4FH, 12H, 27H almacenados en
2000H ubicacin. Muestra la suma en 3000H ubicacin. Utilice el registro pares HL y DE como
puntero de memoria para transferir un byte desde y hacia la memoria de registro.
19.
Escribir un programa para restar dos bytes a la vez y almacenar el resultado en un orden
secuencial en la posicin de memoria a partir de 3000H. Suponga que el F9H datos, 38H, A7H, 56H,
A2H, F4H se almacenan a partir 2000H direcciones. Utilice el registro par BC y HL como puntero de
memoria para transferir un byte de la memoria en el registro.
20.
Identificar el contenido de los registros, localizacin de memoria 2070H y flag Z cuando las
siguientes instrucciones son ejecutadas
A
HL
2070H
MVI A, 7FH
ORA A
CPI 12H
LXI H, 2070H
MVI M, 7FH
CMP M
21.
Definir el mnemonic, cdigo de mquina, tamao de la palabra y operacin de las siguientes
instrucciones:
a.
b.
c.
d.
e.
f.
g.
22.
MVI B, 95H
MVI D, 1FH
MOV A, L
ADD B
ANI 0FH
STA 2070H
HLT
Ensamblar el siguiente programa, partiendo de la direccin E000h
.org
E000H
MVI B, 4FH
MVI C, 78H
MOV A, C
ADD B
OUT 07H
INR B
ANA B
CMA
RAL
Clases de Microprocesadores Prof. B.Barraza.
HLT
23.
24.- Especificar los contenidos de los registros, localizaciones de memoria y registro de banderas de las siguientes
instrucciones, cuando son ejecutadas. Asuma que los contenidos estan en 0 antes de la ejecucin de las instrucciones
1. (a)
A
MVI A,81H
MVI B,29H
MOV C,A
INR B
LXI 300AH
DCR L
RLC
STAX B
HLT
M location
2A81H
CY
(b)
LXI B,D912
D9
12
LXI D,2145H
D9
LXI H,BA2CH
MVI A,82H
12
12
45
D9
12
12
45
BA
2C
CY
82
ADI 96H
18H
RAR
8C
DAD B
93
45
XCHG
21
45
BA
26
HLT
LXI B, 0010H
LOOP :
DCX B
MOV A,B
ORA
JNZ LOOP
HLT
26.- Especificar los contenidos de las posiciones de memoria 2040H a 2044H, despus de la ejecucin de las siguientes
instrucciones
LXI H,2040H
MVI B,05H
MVI A,0AH
STORE: MOV M,A
INR A
INH
DCR B
JNZ STORE
HLT
GUIA 2 DE EJERCCIOS
4.
Escribir las instrucciones para cargar el nmero ABCDH en el registro par BC usando las
opciones de las instrucciones LXI y MVI. Explicar brevemente la diferencia entre las 2 instrucciones.
5.
La localizacin de memoria 3070H tiene el dato 14H. Escribir las instrucciones para transferir
el byte de datos al acumulador usando 3 tipos de diferentes instrucciones: MOV,LDAX y LDA.
Explicar brevemente el uso de las 3 ionstrucciones
6.
El siguiente block de datos esta cargado en localizaciones de memoria desde 1055H a 105AH.
Escribir un programa para transferir los datos anteriores a partir de la localizacin 2080H
DATOS (H): 31, 23, 78, 1A, 2D, 69
7.
Considerando la informacin del programa 6, ahora escribir un programa para transferir los
datos en forma inversa (Ej: el dato de la localizacin 1055H es copiado a la posicin 2085H, el dato de
la localizacin 1056H es copiado a la posicin 2084H y as sucesivamente.
Cuales son los contenidos de la posicin 2080H a 2085H, despus de la ejecucin del programa?
LABORATORIO
1.-
,DEFINE
TAMAO
VALOR
100H
430H
.ORG 0
LXI
MOV
INX
MOV
DCR
H,TAMAO
B,M
H
A,M
B
LOOP: INX
CMP
JNC
MOV
AHE: DCR
JNZ
STA
HLT
.DATA 100H
DB
1.
H
M
AHE
A,M
B
LOOP
VALOR
10,3,12,23H,18H,15,6,34H,9,22H,18H
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
INFORME FINAL
1.Elaborar informe final. De conclusiones de la experiencia realizada
Instruccin
MVI C,10h
DCR C
Comentario
Carga el registro C con el valor 10 h
Decrementa contenido del registro C
fim:
JZ fim
MOV A,B
JMP volta
HLT
volta:
Instruccin
MVI A,07h
MVI B,00h
INC B
CMP B
JNC volta
HLT
Comentario
Carga registro A con el valor 07 h
Carga registro B con el valor 00 h.
Incrementa en "1" el contenido del registro B
Compara contenido de B con el contenido de A, sin alterar valor de
A.
Desva para "volta", si el flag CY = 0. CY =0 si A > B o A = B
Para el procesamiento cuando CY = 1, o sea, cuando B=8 (A < B).
Label
volta:
fim:
Instruccin
MVI C,10h
DCR C
MOV A,B
JNZ volta
HLT
Comentario
Carga el registro C con el valor 10 h
Decrementa contenido del registro C
Copia contenido de B en A. No afecta ningn flag.
Si el resultado de DCR C no fue ZERO, desva para "volta"
Esta instruccin para el procesamiento del programa
4. Ejemplo similar al anterior, pero usando la instruccin JC direccin a diferencia de JNC direccin.
Label
volta:
fim:
.
Instruccin
MVI A,07h
Comentario
MVI B,00h
INC B
CMP B
JC fim
JMP volta
HLT
6. Otra versin de programa que hace la multiplicacin de 4 por 3. La instruccin ADI dato8
substituida por la instruccin ADD B. El acumulador va a asumir los valores 00 h, 04 h, 08 h e,
finalmente, 0C h, esto es 12 decimal
Obs.:
En este programa el acumulador se inicia con el valor 00h y se termina cuando el acumulador vuelve
al valor 00h, despus de pasar por todos os valores de 00 a FFh
GUIA 3 DE MICROPROCESADOR
1. Cite todas las instrucciones posibles a partir de la instruccin genrica MOV A, r.
2. Si los registros H e L contienen respectivamente, los valores 40 h e 50 h, cual es el significado de
la instruccin MVI M, 08h?
3. A qu grupo de instrucciones pertenece la instruccin MVI M, 08h?
4. Explique en pocas palabras como funciona a pila en el 8085. Muestre a travs de un mapa de
memoria, a evolucin de la pila cuando se ejecutan las siguientes instrucciones, en la secuencia
mostrada:
PUSH B, PUSH D, ADD B, PUSH PSW, ADD D, POP PSW, OUT 90, POP D, POP B
Valores iniciales: SP = 20C0 h, A = 33 h, B = 1C h, C = 4B h, D = 10 h, E = FE h e F = 3D h
5. Muestre a travs de un mapa de memoria, la evolucin de la pila cuando se ejecutan las siguientes
instrucciones en la secuencia mostrada:
PUSH PSW, PUSH B, CALL SUMA, (RET), MOV B, A, POP B, POP PSW
Valores iniciales: SP = 2090 h, A = 53 h, B = 0F h, C = 05 h, D = 12 h, E = 01 h e F = 55 h
Direccin de la llamada de subrutina CALL SUMA: 2020 h
6. Muestre la evolucin de la pila en la ejecucin de la instruccin a seguir:
a) PUSH B, PUSH D, PUSH H, LDA 00FF h, POP H, POP D e POP B, sabiendo que o valor inicial
de SP es 38FC h y que los registros B, C, D, E, H e L contienen los valores 08 h, 1C h, 2A h, 06 h, FE
h e 3Dh.
b) CALL 033CH, ADD B e RET (ADD B e RET estn dentro de la sub-rutina que se inicia en la
posicin 033CH), en las mismas condiciones del ejercicio anterior, suponiendo de que la direccin de
la instruccin CALL 033C h es 0038 h.
7. Considere o programa abajo en mnemnico, y responda las preguntas siguientes, sabiendo que a
subrutina en la direccin 0200 h provoca un retardo de 1ms e afecta el registro B.
(b) Disea una tabla mostrando las direcciones y contenido de la pila despus de la ejecucin de la
instruccin CALL 0200h.
(c) Cuales son los valores enviados por la puerta de salida 01?
(d) Muestre lo que debe ser realizado si el registro B, fuese usado en lugar del registro C
8. Escriba un programa que produzca un retardo de 1 s, sabiendo que el uP 8085 es accionado por un
cristal de 6 MHz.
9. Escriba a partir de la direccin 4050 h, una sub-rutina que produzca un retardo de 0.5 ms,
aproximadamente. Suponga que la frecuencia del cristal del 8085 sea de 4,096 MHz.
10. Escriba un programa (usando bytes inmediatos para los datos) que sume los decimales 500 e 650.
11. Describa las etapas de los ciclos (FETCH EXECUTE) de las instrucciones a seguir y explicar lo
que ocurre con las seales de control involucradas, los buses de direccin y datos
a) MOV B, M
b) LXI D, 4050 h
c) MOV E, B.
12. Haga comentarios de cada lnea del programa siguiente: Explique cul es la finalidad del programa
Complete las direcciones.
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.
6. Realice un programa que selecciona y muestra en el display los nmeros impares contenidos en una
Tabla inserta en la memoria. La tabla contiene nmeros aleatorios y tiene inicio en la direccin 2050h
e termina en la direccin 205Fh. Use una subrutina de atraso con D = 02 h entre los valores que se
mostraran en el display.
7. Realice un programa que haga la ordenacin en orden creciente de una tabla conteniendo 16
Nmeros de 8 bits. Los nmeros ya estn en la memoria a partir de la direccin 2050h y deben ser
mantenidos en la misma tabla, pero ordenados.
8. Adapte el programa del problema 7 para ordenar los nmeros en orden decreciente.
9. Realice un programa que selecciona y muestra en el display los nmeros mayores o iguales a 20h y
menores que 50h, de una tabla con 16 nmeros, comenzando en la direccin 2050 h.
Sugestin de tabla: 05h, 15h, 65h, 95h, 35h, 20h, 50h, 42h, 72h, 10h, 60h, 45h, 33h, 25h, 48h, 49h
10. Repita o problema 9, mostrando os nmeros fuera del intervalo.
11. Ejecute las instrucciones dadas a continuacin, indicando la direccin de cada instruccin y
contenido de los registros registradores pedidos e de las banderas de carry e de zero, despus de la
ejecucin de la instruccin indicada
5.- PUSH/POP/PSW/CALL
75
PUSH
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
PUSH PSW
Flag
12
F3
FFFBH
FFFCH
FFFDH
FFFEH
FFFFH
F3
12
SP
Flag
12
F3
FFFBH
FFFCH
FFFDH
FFFEH
FFFFH
F3
12
SP
Cy
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.
PC
2003
FFFBH
FFFCH
FFFDH
FFFEH
FFFFH
03
20
SP
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.
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:
B,12H
C,F3H
SP, FFFFH
B
DISPLAY
0
1
2
3
4
5
6
7
8
9
Valor HEXADECIMAL
Xgfe dcba
3FH
0011 1111
06H
0000 0110
5BH
0101 1011
4FH
0100 1111
66H
0110 0110
6DH
0110 1101
5FH
0101 1111
07H
0000 0111
7FH
0111 1111
6FH
0110 1111
Tabla GENERAL Ctodo comn
En el nivel ms bsico podemos trabajar con un display de 7 segmentos del simulador 8085 y
empezar a crear una rutina sencilla de puertas de entrada y salida (IN/OUT). Ntese que la
configuracin de los valores abcdefgX del display pueden diferir dependiendo del fabricante.
Ej: Muestra 0 en el display usndo la puerta 00H.
.ORG 0
MVI A, 77H
OUT 00H
HLT
Ejercicio que inicializa un contador, mostrnado en las puesrtas de salida los valores en forma
creciente del 0 al 9 No corregido.
.DATA 1000H
DB 77H,44H,3EH,6EH,4DH,6BH,7BH,46H,7FH,6FH
.ORG 0
INICIO:
MVI D,0H
LXI H,1000H
XX:
CALL MOSTRAR
; LLAMA SUBRUTINA
CALL DELAY
OTRO:
INR
CALL MOSTRAR
CALL DELAY
MOV A,D
CPI 9
JNZ OTRO
JMP OTRO
HLT
MOSTRAR:
MOV L,D
MOV A,M
OUT
07H
RET
DCR C
JNZ YY
YYY:
DCR B
JNZ DELAY2
RET
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
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
Se desea disear un programa para el microcomputador 8085 de la figura, que permita leer u teclado
numerico del 0 al 9, e que codifica su informacin en ASCII (0=30h, 1=31,..... 9=39h) conectado al
puerto PB, tal como muestra la siguiente figura. Se entiende que slo es posible mostrar del 0 al 9 y por
tanto se supone que solo existen esas teclas.
En la puerta C, hay conectado un led que se activa cuando se presiona una tecla.
Si se presiona la tecla 5, deber generarse una onda cuadrada de 5000 hz.
La Puerta A, esta conectada a un display de siete segmentos: PA0 a segmento a, PB1 a segmento b y as
sucesivamente, por lo cual deber mostrarse en el display la informacin correcta. Puede generarse una
tabla donde este almacenada la informacin de cada digito asociada al display.
Crystal=6,144Mz
Teclado numrico
AD0
PB3
AD7
f
p
b
g
c
d
LEDs
Port A
A0 IO/M
A7
A5
A6
A3
GROUND
A4
A1
RD
A2
WR3
PC
Cs
2.-
E1
Usando decodificadores 3/8, puertas NAND, disear un direccionamiento de puertas con las siguientes
caractersticas:
E2
8 DISPOSITIVOS DEE3ENTRADA,
8 DISPOSITIVOS DE SALIDA
3. -
DIRECCOION INICIAL
DIRECCIN DE INICIO
A0
E8.
a) Explique el proceso de dilogo, modo 1, cuando una puerta B del 8155, est recibiendo informacin
de un conversor anlogo digital. Tome como referencia al micro usado en laboratorio (8085)
b) Indique las ventajas y desventajas de I/O aislada y I/O memoria mapeada.
Puntaje:
Problema 1, 20 puntos
Problema 2, 10 puntos
Problema 3, 10 puntos
Total
: 45 puntos
19 de junio de 2007
MICROPROCESADORES
TECLADO
C/S
COH
PB
IN
MICROPROCESADOR
8085
timer
A7
Menos significativo
0
1
A5
A6
Mas significativo
TH
TL
C5H
C4H
001
010
011
3/8
100
Selecciona la puerta de
salida 5
101
OUT
PC
OUT
500Hz
000
DECODIFICADOR
PA
TIMER
INTERR
PC
00: timer
no opera
01: Stop
timer
10:Stop timer despus
de completar una cuesta
11:Stop
Timer
5
110
111
00:IN
11:OUT
PA
PB
0:IN
1:OUT
0
0
1
A7
A6
A5
A4
A3
A2
A1
A0
C0H
C1H
PA
C2H
PB
C3H
PC
C4H
TL
C5H
TH
Io/M
Tabla de direccionamiento
Modo
TH
4A
TL 20
0
Tabla de Timer
N=
FLUXOGRAMA
INICIALIZACIONES
NO
PRESIONA TECLA
SI
MOSTRAR TECLA
DISPLAY
NO
NO
#5
#6
SI
PARTIR TIMER
DETENER
TIMER
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
.
INICIO: MVI A,ODH
OUT COH
MVI A, 20H ;
OUT C4H
;TL
MVI A,4AH
OUT C5
;TH
LXI H,1030H
IN PB
MOV L,A
MOV A,M
OUT PA
CPI 35
JZ PARTE TIME
CPI 39
JZ DETENER TIME
JMP INICIO
;.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:
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
mostrar2:inr e
dad d
mov a,m
stax b
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
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
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:
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
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
A5
Apndice A5
Programas de ejemplo
Se han escrito varios programas en ensamblador que muestran el funcionamiento de los
componentes que incorpora el simulador. Realizar el negativo de una imagen de niveles de
gris cargada en memoria o implementar el juego de la serpiente (snake en ingls) son algunos
ejemplos que pasamos a comentar en las secciones siguientes.
Demostracin:
Nombre:
Procesador:
Dispositivos:
Lneas:
negativo.asm
8085
Pantalla Grafica (256)
28
Descripcin:
Programa de muestra que invierte la imagen actual en pantalla.
.org 100H
mvi H, 10H
mvi L, 00H
; en HL la posicion de memoria
otro:
mvi a, FFh
SUB M
mov M, a
INX H
;comprueba parte alta
mvi a, 4EH
cmp H
JZ comprueba_LO
jmp otro
comprueba_LO:
mvi a, 80h
cmp L
JZ fin
jmp otro
fin:
hlt
Demostracin:
Nombre:
leds.asm
Procesador: 8085
Dispositivos: Panel de Leds (1 linea)
Generador de Interrupciones
Lneas:
47
Descripcin:
Programa que genera un movimiento ordenado y oscilante de una luz mediante
un vector de leds.
;LUZ COCHE FANTASTICO
;
; requiere led en puerto 0
;
interrupcion rst 7.5 cada 1 segundo
.org 1000h
mvi c,128
mov d,0
salto:
mov a,c
out 0h
jmp salto
.org 003ch
;Subrutina cada 1 segundo
sub:
mov a,d
cpi 0
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
;cargamos origen
;cargamos fin
;borrar punto de memoria
;incrementar direccion
.org 1000h
; ------------------------------; PROGRAMA PRINCIPAL
; ------------------------------mvi B, 00h
mvi C, DDh
mvi D, 00h
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
ldax B
out 4d
mov H, C
mov C, D
mov D, 00h
ret
.org 500H
;
call clear_all
LXI H, comienzo
call pon_comida
repite:
IN teclado
jmp repite
comparador:
A=1 si igual
MOV A,E
CMP L
JNZ no_igual
MOV A,D
CMP H
JNZ no_igual
MVI A, 1
ret
no_igual:
MVI A,0
ret
compar_inf:
A=1 si menor DE
MOV A,D
CMP H
JM menor
JZ comp_menor
MVI A, 0
ret
menor:
MVI A,1
ret
comp_menor:
MOV A,E
CMP L
JM menor
MVI A, 0
ret
compar_sup:
A=1 si mayor DE
MOV A,H
CMP D
JM menor
JZ comp_menor2
MVI A, 0
ret
menor2:
MVI A,1
ret
comp_menor2:
MOV A,L
CMP E
JM menor2
MVI A, 0
ret
clear_all:
LXI H, memVideo
LXI D, memVideo+sizeVideo
repite_c:
MVI A,0
MOV M,A
INX H
call comparador
cpi 1
jz fin_clear
jmp repite_c
fin_clear:
ret
moverse:
CPI tecla_up
cz haz_arriba
CPI tecla_down
cz haz_abajo
CPI tecla_left
cz haz_izqda
CPI tecla_right
cz haz_decha
ret
comprobador:
de video
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:
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
; 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
pon_comida:
push psw
push d
LDA cuanto
adi 10h
STA cuanto
LDA
rlc
Mov
rrc
Mvi
INR
ANI
STA
pos
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
fin:
hlt
.org 3Ch
;Interrupcion del timer (RST 7.5)
call moverse
EI
Ret
CONCLUSION:
Este trabajo lo he llevado o cabo debido a la necesidad
de contar con un texto del que se pueda aprender sobre el
lenguaje assembler. Espero haber sido de algn aporte en el
camino de la enseanza, rescatando ejemplo de mis compaeros
de curso, notas del profesor, la WEB, y ejercicios propios.
Espero actualizar este material por que tiene demasiados
errores, sin embargo insto que el mejor maestro es uno mismo,
lo importante es la idea general Uds saben....
Como futuro ingenieros debemos tener en cuenta que el
lmite del conocimiento nos lo ponemos nosotros...
paul.terrazas.lazaro@gmail.com