Está en la página 1de 115

UNIVERSIDAD DE TARAPAC

Escuela Universitaria de Ingeniera Elctrica Electrnica

APUNTES DEL MICROPROCESADOR


8085
Programacin en lenguaje Assembler

ED 17

AUTOR:
PAUL TERRAZAS L.
ARICA-CHILE
2016
INTRODUCCION

En este texto se dar una breve descripcin de los componentes y funciones


del microprocesador, posteriormente se aprender las instrucciones del lenguaje
Assembler, y finalmente se realizar una serie de programas que se
implementarn en el laboratorio.

Cuenta con un breve resumen de la materia y las bases fundamentales en


programacin .

He querido dejar los ltimos programas planteados para que uds, puedan
modificarlos, he transcrito guas de anteriores semestres y material que me han
entregado algunos compaeros, mi objetivo en ningn caso es reemplazar las
clases del Profesor y por ende deben asistir a todas las clases porque all se
tratarn temas puntuales y materias para las evaluaciones.

El aporte que dejo es para tener material especfico del ramo,


MICROPROCESADORES de la EIEE, para su consulta en ramos futuros.

He creado un libro, llamado apuntes del microprocesador el que uso como base para
esta nueva edicin.
I ARQUITECTURA DEL MICROPROCESADOR

1.-El computador

2.-Arquitectura de Von Newmann

3.-Arquitectura del microprocesador 8085

4.-Tri-state

5.- Bit
1. EL COMPUTADOR

En trminos bsicos un computador es una mquina de calculo que funciona a


base de un programa almacenado compuesto fundamentalmente por una unidad
de entrada, una unidad de salida, y una unidad llamada CPU. Un programa es un
conjunto de instrucciones que se escriben en forma secuencial. Estas instrucciones
se almacenan en memoria para que luego se ejecuten dependiendo del tipo de
instruccin.

Fig.1.-Ejemplo esquemtico de un computador.

1.1.-IN: Esta unidad permite leer (READ) informacin por unidades de entrada,
como teclados, mouse, USB (Modo lectura), lector de disco, micrfono. Etc.

Tiene 2^8=256 puertas de entrada.

1.2.-CPU: La informacin es procesadada por esta unidad y almacenada en la


memoria principal.

1.3.-Memoria Principal: La CPU tiene una memoria principal que contiene, los
programas, datos, Stacks (Pila). Antes de ejecutar cualquier instruccin deber
ser almacenada en la memoria principal. = 65536 direcciones.

1.4.-OUT: Luego de ser procesado la informacin se escribe (WRITE) por medio de


unidades de salida, como son el monitor, el parlante, la impresora, USB( modo
escritura), LED, motores, bombas, etc.
Tiene 2^8=256 puertas salida

1.5.- CRISTAL: Si el cristal posee una frecuencia de 6MHz su frecuencia de


operacin ser de 3MHz ya que tiene un divisor por 2.

Para encontrar el tiempo que tendr en la ejecucin de cualquier instruccin la


obtenemos de la relacin entre la frecuencia y el tiempo.

Nuestro tiempo de respuesta es 0.33 para 6MHz.

2.-Arquitectura de Von Newmann

La mayora de los sistemas informticos actuales siguen al pie de la letra la


arquitectura propuesta por Von Newmann. Esta arquitectura se caracteriza porque
el programa que ejecuta el sistema est almacenado internamente en el propio
sistema.

La arquitectura de Von Newmann define los siguientes elementos:

(1) Unidad Central de Proceso (CPU - Central Processing Unit)


(2) Memoria principal
(3) Controlador de entrada salida
(4) Buses del sistema

-Bus de datos
-Bus de direcciones
-Bus de control
2.-Arquitectura Von Newmann

2.1.-Unidad Central de Proceso (CPU)

La CPU es el lugar en el que se procesa la informacin de acuerdo a las


instrucciones del programa. La CPU de un sistema informtico repite una serie de
pasos en los que continuamente accede a memoria para leer la prxima instruccin
a ejecutar, realiza lo que ordena la instruccin y vuelve a empezar.

Cuando la CPU est implementada en un nico circuito integrado se


llama microprocesador (P).

En una CPU podemos distinguir:

2.1.1.-Unidad aritmtico lgica (ALU Arithmetic and logical unit)

Se encarga de realizar las operaciones aritmticas (sumas, restas,


multiplicaciones, etc..) y lgicas (AND, OR, rotaciones, desplazamientos, etc...) con
los datos. Normalmente los datos con los que opera, as como los resultados de la
operacin se encuentran en registros de la CPU.
Las operaciones que es capaz de realizar estn definidas por el juego de
instrucciones de la CPU. Es posible encontrar ALUs con capacidades orientadas
hacia la operacin con valores enteros, coma flotante o nmeros imaginarios (por
ejemplo en las DSP.)

2.1.2.-Banco de registros

Proporciona un espacio de almacenamiento para los datos con los que trabaja la
CPU. Los registros se deben cargar con informacin que proviene de la memoria
principal antes de comenzar a operar, cuando se necesita dejar espacio libre en el
banco de registros para operar con nuevos datos su valor debe escribirse en la
memoria principal.
Operar con datos en el banco de registros es mucho ms rpido que operar con
datos que se encuentran en la memoria principal, por eso, cuanto mayor sea el
banco de registros se requerirn menos trasvases con la memoria principal y la
tarea se realizar antes.

Es posible que no todos los registros tengan las mismas caractersticas.


Normalmente se distingue entre:

(1)Registros de datos: Guardan la informacin con la que se trabaja.


(2)Registros de direcciones: Guardan direcciones de memoria (en las que puede
haber datos).
(3)Registros de control: Controlan el estado de la CPU (flags: zero, overflow,
underflow, positivo/negativo...)

2.1.3-Unidad de control

Se encarga de leer las instrucciones mquina almacenadas en la memoria


principal y de generar las seales de control necesarias para controlar y coordinar
el resto de las unidades funcionales de un computador, con el fin de ejecutar las
instrucciones ledas.

2.1.3.1.- Partes fundamentales

(1)Contador de programa: Registro que apunta a la direccin de memoria de la


prxima instruccin a ejecutar. Se incrementa automticamente despus de
ejecutar cada instruccin.

(2)Registro de instruccin: Guarda la instruccin que se est ejecutando.


(3)Decodificador: Interpreta la instruccin a ejecutar.
(4)Reloj: Genera una seal de sincrona.
(5)Secuenciador: Activa en el orden adecuado las diferentes unidades funcionales
para ejecutar la instruccin.

2.1.3.2.-Los dos tipos ms frecuentes de unidades de control son:

(1)Cableada: La lgica de las operaciones est implementada mediante hardware.


(2)Microprogramada: Se trata de una pequea CPU en miniatura que puede
programarse para realizar diferentes tareas.
2.2.-Memoria principal

La memoria principal tiene por objeto guardar informacin que es accesible a


la CPU. La CPU puede leer y/o escribir datos en las diferentes posiciones de
memoria que componen la memoria principal.

La memoria principal tiene menor capacidad que la memoria secundaria (que


virtualmente es ilimitada), pero es mucho ms rpida. Actualmente la memoria
principal se implementa mediante circuitos integrados. La memoria principal de
los sistemas informticos suele estar formada por dos reas diferenciadas:

2.2.1.-Memoria RAM (Random Access Memory): Memoria de acceso aleatorio (no


tiene porqu ser utilizada de manera secuencial) que permite tanto la lectura como
la escritura. Habitualmente en los sistemas informticos se trata de un medio de
almacenamiento voltil, de manera que se pierde su contenido al cesar la
alimentacin.

2.2.2.-Memoria ROM (Read Only Memory): Memoria de acceso aleatorio que slo
permite la lectura de los datos que almacena. Se trata de un medio de
almacenamiento persistente, pues no pierde su contenido cuando cesa la
alimentacin.

2.3.-Controlador de Entrada/Salida (I/O)

En la medida en la que el sistema informtico precisa comunicarse con el


mundo exterior (utilizando diferentes perifricos), es necesario un elemento que
controle el flujo de informacin que entra y/o sale del sistema informtico.

Los perifricos del sistema informtico se pueden clasificar en:

2.3.1.-Perifricos de entrada: Si sirven para introducir informacin en el sistema


informtico (ej. teclado, ratn...)

2.3.2.-Perifricos de salida: Si representan informacin que sale del sistema


informtico (ej. monitor, impresora...)

2.4.-Buses del sistema

Transportan la informacin entre los diferentes elementos de la CPU. Se


distingue entre el bus de datos (que transporta la informacin que se est
procesando) y el bus de control (que proporciona toda la sealizacin necesaria
para realizar el trabajo de forma ordenada).
Desde el punto de vista electrnico un bus es una serie de pistas que
transportan informacin entre diferentes elementos. El nmero de lneas que tiene
el bus determina el nmero de bits que se pueden transportar en paralelo. Los
buses suelen ser elementos sncronos que funcionan gobernados por un reloj.

Normalmente en cada ciclo de reloj se transporta un dato (de 8, 16 o 32 bits


segn la anchura del bus), tambin existen buses que realizan dos operaciones en
cada ciclo de reloj (utilizan tanto el flanco de bajada como el flanco de subida).

Ejemplo:
El bus PCI cuenta con la siguiente especificacin:
Ancho del bus: 32 bits

Reloj: 33 Mhz
Fcilmente podemos calcular la cantidad mxima de informacin que puede
transportar en un segundo. Simplemente necesitamos multiplicar la informacin
que mueve en cada ciclo (32 bits = 4 Bytes) por el nmero de ciclos que tienen
lugar en un segundo (33*106).

Informacin por segundo: 4 Bytes * 33*106 = 132000000Bytes/s = 125.88MB/s

Si el bus fuese capaz de utilizar tanto el flanco de subida como el de bajada para
transmitir informacin, se doblaria la capacidad til.

2.4.1.-Bus de datos:

Como su nombre indica transporta datos. Estos datos pueden ser la


informacin que se est procesando o las instrucciones del programa que se
ejecuta. Hay que recordar que en la arquitectura Von Newmann el
programa est guardado en el interior del sistema informtico codificado
como informacin.
El ancho en bits del bus de datos define el tamao de la palabra del sistema
informtico, habitualmente es 8bits, 16bits, 32bits o 64bits.

2.4.2.-Bus de direcciones:

El bus de direcciones se utiliza para indicar el origen y/o el destino de


los datos. En el bus de direcciones se indica la posicin de memoria a la que
se est accediendo en cada momento. Puede tratarse de una direccin de la
memoria principal o puede tratarse de una direccin de memoria en la que
est mapeado un perifrico.
El ancho en bits del bus de direcciones determina el tamao del espacio de
memoria direccionable.
2.4.3.-Bus de control:

El bus de control proporciona seales para coordinar las diferentes


tareas que se realizan en el sistema informtico.
Algunas de las seales que podemos encontrar:
CLK: Frecuencia de reloj
CS (Chip select): Activa el chip a utilizar
READY: Est disponible el o no el dispositivo
R/W: Se trata de una operacin de lectura o escritura

3.-Arquitectura del microprocesador 8085

El microprocesador 8085 esta construida en base a la Arquitectura Von Newmann


y debido a eso, est constituido bsicamente por tres grandes bloques:

(1)Unidad de control (CU)

(2) Registros internos del microprocesador (RI),

(3)Unidad aritmtico-lgica ALU.


3.1-Unidad de control o Control Unit (CU).

La unidad de control es un bloque de lgica cableada dentro del circuito


integrado (CI). Esta parte del sistema controla y sincroniza las transferencias de
datos y las operaciones que se realizan con ellos.
Regula la funcin bsica del microprocesador consistente en la bsqueda y
posterior ejecucin de instrucciones.

Esta operacin es cclica mientras no se interrumpa mediante una instruccin


de paro (HALT).

En el estado de bsqueda se transfiere una instruccin desde la memoria


hasta el microprocesador y en el estado de ejecucin se realiza esta operacin.

3.2.- Registros internos del microprocesador.

El 8085 tiene una serie de registros de propsito general denominados B, C, D,


E, H y L, de 8 bits, se trata de una serie de registros que emplea la ALU para
manipular datos. y en ocasiones pueden ser utilizados como registros pares de dos
en dos, BC, DE, HL, almacenando as palabras o informaciones de 16 bits.

3.2.1-Registros de direccionamiento.

Hay tambin un bloque de Registros Internos de 16 bits que tambin son


llamados registros de direccionamiento. Estn conectados al bus de direcciones y
suele haber dos registros de este tipo que son:

Contador del Programa o Program Counter(PC), de 16 bits el Stack Pointer o


puntero de pila (SP) de 16 bits.

(1) El Contador de Programa o Program Counter (PC).


El Contador de Programa, es un registro denominado abreviadamente PC, es
imprescindible en todos los microprocesadores. Contiene la direccin de la siguiente
instruccin que deba ejecutarse.

Su contenido se va incrementando a medida que las instrucciones van siendo


ejecutadas y puede alterarse cuando aparece la instruccin HALT (paro) o La seal
de RESET, que coloca al PC a cero e inicializa la ejecucin del programa.

(2) El Puntero de Pila, o STACK POINTER (SP)

El Puntero de Pila, denominado abreviadamente SP, es indispensable


durante el desarrollo de programas tanto para trabajar con interrupciones como
para el tratamiento de subrutinas. El contenido del SP sealar en todo momento a
la cima de la pila. (La pila estar constituida por un bloque de memoria RAM,
donde se almacenarn de forma temporal los datos.
La Pila que usamos es de tipo L.I.F.O, Lost In First Out, es decir lo ltimo que
ponemos es lo ltimo que usamos, a diferencia del F.I.F.O, First In First Out, este
ltimo lo primero que ponemos es lo primero que usamos.

3.3.- ALU- Unidad Aritmtica Lgica en el microprocesador


El bloque fundamental del microprocesador es el llamado ALU, representa la
parte del microprocesador que realiza las operaciones aritmticas y lgicas. Para
llevar a cabo este proceso emplean normalmente un registro especial denominado
Acumulador (Acc) donde almacenan el resultado de las operaciones realizadas.

Para completar las indicaciones necesarias tras la ejecucin de las


instrucciones, el microprocesador emplea adems un registro especial de 8 bits
denominado Registro de Estado o Registro de Flags que marcarn distintas
caractersticas de las operaciones desarrolladas.

3.3.1.- FLAGS
La denominacin y situacin de cada flag se muestra en el siguiente esquema.

S Z X AC X P X CY

S: (Signo)
S es el flag de signo. Si el resultado es negativo S=1y si el resultado del flag es
positivo S=0. Considerando que el bit ms significativo es el que se toma como bit
de signo.

Ejemplo: Ejemplo:

0000 0101 0000 0101

+0000 0011 + 1000 0011

0000 1000 S=0 1000 1000 S=1

Z: (Cero)

Z es el sealizador de cero. Si el resultado es cero, Z=1 y si el resultado es


diferente de cero, Z=0.

Ejemplo: Ejemplo:

0000 0101 0000 0000

+0000 0011 + 0000 0000

0000 1000 z=0 0000 0000 z=1

P: (Paridad )

P es el flag de paridad. Si el resultado es par, P= 1, y si el resultado es impar,


P=0. Aqu es importante recalcar que se refiere a la cantidad de s que hay en un
resultado de una operacin. Por ejemplo 1011 es impar porque hay 3 unos, y 0101
es par porque hay 2 unos, independiente del valor binario que pueda tener.
Ejemplo: Ejemplo:

0000 0101 0000 1001

+0000 0011 + 1100 0000

0 000 1000 P=0 1 100 1001 P=1

AC: (Carry auxiliar)

CY es el sealizador de arrastre. Si hay carry auxiliar AC=1 y si no hay carry


auxiliar AC=0. El carry auxiliar est en la 5ta posicin.

Ejemplo: Ejemplo:

1 []

0000 1111 0100 0100

+0000 0001 + 0000 1000

0001 0000 AC=1 0000 1100 AC=0

X: Dont care

CY: (Carry)

CY es el sealizador de arrastre. Si hay carry Cy=1. Si no hay carry Cy=0


Ejemplo: Ejemplo:

1000 0000 0100 0100

+1000 1000 + 0000 1000

1 0000 1000 Cy=1 0000 1100 Cy=0

3.4.-Buses del microprocesador


(1) Bus de direccin: El microprocesador posee un bus de direccin. Este bus es un
conjunto de lneas unidireccionales que sirven para identificar una direccin, se cuenta
con 16 bits, es decir = 65536 direcciones. Nota: Si consideramos el cero como posicin
serian 65535 posiciones k

(2) Bus de datos: Posee un Bus de datos de 8 bits que intercambian informacin
entre sus distintos bloques internos y para comunicarse con el exterior.

(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, las de lectura, escritura, reloj o clock, etc.

READ Toda informacin de lectura se encuentra en la puerta de entrada


(IN).

WRITE Toda informacin de escritura se encuentra en la puerta de salida


(OUT).

Io/ = Identifica si se refiere a la puerta (IN/OUT) o a la memoria. Se seala 1 si


la operacin es en la puerta o 0 si la operacin es en la memoria.
Fig.-Figura de ejemplo bus de control.

Ejemplo: Se desea leer una informacin en la puerta.

( Estamos leyendo informacin RD=1 )

(No estamos escribiendo informacin por lo tanto

WR=0 )

(Como estamos leyendo informacin en la puerta y no en la memoria,


este ser 1. Si estuviramos leyendo informacin en la memoria este sera 0)

Ejercicios resueltos

Si se desea escribir en la puerta , ,

Si se desea leer en la memoria , ,

Si se desea escribir en la memoria , ,


4.-TRI-STATE : Dispositivo lgico que posee tres estados, 1, 0 y alta impedancia. Se
usa cuando se toma dos o ms salidas conectadas en forma paralela.

C A X

0 0 1

0 1 0

1 X

5.- bit
Un es la unidad mnima de informacin empleada en informtica, en cualquier
dispositivo digital, o en la teora de la informacin, es una seal electrnica que
puede estar encendida (1) o apagada (0).

5.1.-Byte

Byte, trmino creado por Werner Buchholz como una unidad de informacin
digital equivalente a ocho bits. La palabra byte proviene de bite, que significa
mordisco, como la cantidad ms pequea de datos que un ordenador poda
"morder" a la vez. El smbolo de byte es un B mayscula, para distinguir de bit,
cuyo smbolo es b minscula.

Cada Byte representa un solo carcter de texto en un ordenador. Pueden ser


letras, smbolos, nmeros, signos de puntuacin, caracteres especiales, etc. y
codifica diferentes informaciones en un mismo equipo, dependiendo de la
cantidad.

1 Bytes > 8 bits

2 Bytes -> 16 bits

4 Bytes -> 32 bits


Ejemplo:

1 byte -> 1111 1111 = FF H ( 8bits )

2 bytes -> 1111 11111 1111 1111 = FFFF H (16 bits)

Recapitulando

Los registros son posiciones de memoria que almacenan informacin, los


datos son operandos en donde acta los programas y los programas son un
conjunto de instrucciones. Cada registro tiene 8 bits, que al ser operados como
paridad par tendrn 16 bits.

A : Acumulador
F : Flags
B,C,D,E,H,L: Registros generales
PC : Program Counter
SP : Stack Pointer
HL : Apuntador datos de memoria.

*Nota: Cuando nos referimos a un numero acompaado de una H estamos


hablando de un valor HEXADECIMAL. Ej: 10H se refiere al numero 0001 0000 b

EL Lenguaje Assembler, son un conjunto de nemnicos que nos indican las


instrucciones que se van a ejecutar. Estas instrucciones son llevadas a un
ensamblador que convierte los nemnicos a un nivel binario, de tal forma que la
maquina pueda entender las instrucciones dadas.
II PROGRAMACION EN LENGUAJE ASSEMBLER

2.1.- Set de instrucciones del microprocesador 8085

2.2.-Set op.code

2.3.-Tamao de instrucciones

2.4.-Diagrama de flujo y programacin

2.5.- Ejercicios resueltos y compilados

2.6.-Ejercicios de tiempo de retardo

2.7.- Metodo de columnas.

2.8.-Mtodo del flujograma.


SET DE INSTRUCCIONES DEL MICROPROCESADOR 8085

1 MOV 21 ANA 41 JP 61 RST

2 MVI 22 ANI 42 JPE 62 EI

3 CMP 23 XRA 43 CALL 63 DI

4 CPI 24 XRI 44 CC 64 IN

5 LXI 25 ORA 45 CNC 65 OUT

6 STAX 26 ORI 46 CZ 66 HLT

7 STA 27 CMC 47 CNZ 67 PUSH

8 LDAX 28 STC 48 CM 68 POP

9 LDA 29 DAA 49 CP 69 DAD

10 INR 30 NOP 50 CPE 70 XCHG

11 INX 31 RLC 51 CPO 71 XTHL

12 DCR 32 RRC 52 RET 72 SPHL

13 DCX 33 RAL 53 RC 73 SHLD

14 ADD 34 RAR 54 RNC 74 LHLD

15 ADC 35 JMP 55 RZ 75 SBB

16 ADI 36 JC 56 RNZ 76 DAD

17 ACI 37 JNC 57 RM 77 ,ORG, data, Db, BW

18 SUB 38 JZ 58 RP

19 SUI 39 JNZ 59 RPE

20 SBI 40 JM 60 RPO

Fuente: https://es.scribd.com/document/337573426/SET-de-Instrucciones-Del-8085

Nota del autor: Para programar en Lenguaje Assembler se necesita


dominar las instrucciones de memoria, y requiere muchas horas de
programacin y prcticas.
SET INSTRUCCIONES DEL MICROPROCESADOR 8085
1 MOV R1, R2 Movimiento Direccionamiento registro.

Bits afectados: MOV es una instruccin de 1 byte, El contenido del registro R2 es transferido al registro R1.
Direccionamiento: R1 y R2 pueden ser los registros B, C, D, E, H, L o el acumulador A.
Registro indirecto
Supongamos que el registro B contiene 00H y el egistro C contiene 30H
MOV B,C

almacenar 30H en el registro B.

Ejemplo anexo: Si A=15H, B=12H entonces:

MOV A,B ;Mueve el contenido del registro B al

Acumulador

Resultado: A=12H, B=12H, debido a que es una operacin de lectura, en B no se destruye la


informacin y queda con 12H, al contrario que en A, se destruye la informacin porque una
operacin de escritura.

MOV Reg, M Direccionamiento registro indirecto.

El contenido de la direccin de memoria, cuya direccin est en los registros H-L, es


transferido al registro R. R puede ser cualquiera de los registros A, B, C, D, E, H o L.

Ejemplo: Si H=18H, L=AAH

Entonces MOV A,M mueve el contenido de la posicin de memoria indicado por el registro
HL=18AAH al acumulador.

Posicin de memoria .

HL= 18 AA H 55H

Resultado: A=55H

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

almacenar el contenido del acumulador en la posicin de memoria 0030H.

Ejemplo anexo: Si C=4AH y considerando que HL=18AAH y el contenido en esa posicin


de memoria es 55H. Resultado: M=4AH

..
Posicin de memoria

HL= 18 AA H 55H 4AH


.
2. MVI Reg, dato Cargar un registro con un dato Inmediato
MVI es una instruccin de 2 bytes, el primer operando debe ser uno de los registros A, B,
Bits afectados: C, D, E, H o L, que ser cargado con el dato especificado en el segundo operando (DATO). El
Direccionamiento: dato no debe exceder de un byte.
Inmediato 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.

MVI M, dato
Cargar en la posicin de memoria contenida por el registro H-L un dato inmediato

Supuestos los dos ejemplos anteriores, la instruccin

MVI M, 2AH

carga en la posicin de memoria 3344H (direccin aportada por los registros H y L) el valor
2AH.

3 CMP Reg Comparar registro o memoria con acumulador.


El contenido del registro o posicin de memoria especificados se compara con el
contenido del acumulador. Esta comparacin se realiza restando internamente el contenido del
registro al del acumulador, permaneciendo ste invariable, y colocando los bits de condicin en
funcin del resultado. Concretamente, el bit de cero se pone a uno si las cantidades comparadas
son iguales, y se pone a cero si son desiguales.

Si el acumulador almacena 0AH y el registro B contiene 05H


CMP B
Compara B con el acumulador efectuando una resta interna.
El registro B contiene 05H, se complementa a 2.

Registro 05H 0 0 0 0 0 1 0 1
Comp. 1 C-1: 1 1 1 1 1 0 1 0
Comp. 2 C-2: + 1
Dato comp. FBH 1 1 1 1 1 0 1 1

Acc 0AH: 0 0 0 0 1 0 1 0
Dato comp. FBH: 1 1 1 1 1 0 1 1
+
Nuevo Acc 05H 0 0 0 0 0 1 0 1

Z=0 Cy=0

CMP X>Y X=Y X<Y


*Nota: Acc=acumulador Comp=complemento

Z 0 1 0

Cy 0 0 1
4. CPI dato Comparar el contenido del acumulador con un dato Inmediato.

Flags afectados: Z, S, Compara el valor del byte especificado con el contenido del acumulador y posiciona los bits
P, CY, AC de cero y acarreo para indicar el resultado. El bit de cero indica igualdad.
Direccionamiento: Un 0 en el acarreo indica que el contenido del acumulador es mayor que DATOS.
Registro indirecto. Un 1 en el acarreo indica que el acumulador es menor que DATOS. Sin embargo, el
significado del bit de acarreo es contrario cuando los valores tienen diferente signo o cuando
uno de los valores est complementado.
El valor de DATOS no debe exceder de un byte.
Si tenemos la secuencia de instrucciones

(1).MVI A, 25H
(2).CPI 20H

La instruccin (1) carga en el acumulador el valor 25H.


La instruccin (2) realiza la siguiente operacin de suma (tomando el complemento a dos del
dato inmediato, es decir, E0H):

Dato 20H 0 0 1 0 0 0 0 0
Comp. 1 C-1: 1 1 0 1 1 1 1 1
Comp. 2 C-2: + 1
Dato comp. E0H 1 1 1 0 0 0 0 0

Acc 25H: 0 0 1 0 0 1 0 1
Dato comp E0H: + 1 1 1 0 0 0 0 0
Nuevo Acc 05H 0 0 0 0 0 1 0 1

Cy=1

CPI X>Y X=Y X<Y

Z 0 1 0

Cy 0 0 1

5. LXI Reg, Dato LXI(Load Extended inmediate) es una instruccin de 3 bytes;

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 16 bits. El resto trabajan con datos
de 8 bits.
Si el par de registros especificados es SP, el segundo byte de la instruccin sustituye a los 8
bits menos significativos del puntero de pila, mientras que el tercer byte de la instruccin
reemplaza a los 8 bits ms significativos del puntero de pila. Ejemplo:

1. La instruccin carga en el registro B el valor 00H y en el registro C el valor FFH.

LXI B, 00FFH

2. La siguiente instruccin carga en el puntero de pila el valor 1000H

LXI SP, 1000H


6. STAX Reg Almacena el contenido del acumulador
STAX es una instruccin de 1 bytes; El contenido del acumulador se almacena en la
posicin de memoria especificada por los registros B y C, o los registros D y E.
Si el registro B contiene 3FH, el registro C contiene 16H, y el acumulador tiene 1FH, la
instruccin

STAX B

almacenar el contenido del acumulador en la posicin de memoria del registro 3F16H.

Posicin de memoria

BC= 3F16 H 1FH

7. STA DIR Almacenamiento directo desde el Acumulador

STA es una instruccin de bytes; STA DIR almacena una copia del contenido actual del
acumulador en la posicin de memoria especificada por DIR.

Si A=1FH, La instruccin que se muestra introduce el contenido del acumulador en la posicin


de memoria 0080H:

STA 0080H

Posicin de memoria .
.
0080 H 1FH
.

Podemos concluir que tanto STAX como STA almacenan el contenido del acumulador en la
posicin de memoria, y lo realizaran por medio de un registro o por medio de una direccin
respectivamente.

8. LDAX Reg Cargar el acumulador.


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

cargar en el acumulador el contenido de la posicin de memoria 3F16H.

Posicin de memoria .
.
3F16 H 10H
.

Resultado A=10H
9. LDA DIR Carga directa en el acumulador

LDA DIR carga el acumulador con el contenido de la memoria direccionada por DIR. La
direccin puede ser puesta como un nmero, una etiqueta previamente definida o una
expresin.

A continuacin se introducen en el acumulador el contenido de la posicin de memoria 1000H:

LDA 1000H

Posicin de memoria .
.
1000 H 12H
.

Resultado A=12H

Podemos concluir que tanto LDAX como LDA cargan el acumulador con el contenido de la
posicin de memoria. Lo realizaran por medio de un registro o por medio una direccin
respectivamente.

INR Reg Incrementar registro o memoria.


10. Bits afectados: Z, S, P, El contenido del registro o posicin de memoria especificados se incrementa en una
AC unidad.
Si el registro A contiene 98H, la instruccin
Direccionamiento:
Registro indirecto INR A

har que este registro contenga la cantidad 99H.

Incrementar par de registros o direccin


11. INX Reg El nmero de 16 bits contenido en el par de registros especificado se incrementa en una
unidad.
1. Suponiendo que los registros H y L contienen respectivamente 30H y 00H, la
instruccin
INX H
hace que el registro H contenga 30H y el registro L el valor 01H.

2. Si el puntero de pila contiene FFFFH, la instruccin


INX SP

hace que ste contenga 0000H.

Decrementa registro o memoria.


12. DCR Reg El contenido del registro o posicin de memoria especificados se decrementa en una
unidad.
Si el registro A contiene 99H, la instruccin

DCR A

har que este registro contenga la cantidad 98H.


Decrementar par de registros
13. DCX Reg El nmero de 16 bits contenido en el par de registros especificado se decrementa en una
unidad.
Suponiendo que los registros H y L contienen respectivamente 30H y 00H, la instruccin

DCX H

hace que el registro H contenga 2FH y el registro L el valor FFH.

14. ADD Reg Sumar registro o memoria al acumulador (Suma Aritmtica)


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

Reg. B 3AH: 0 0 1 1 1 0 1 0
Acc 6CH: + 0 1 1 0 1 1 0 0
Nuevo Acc A6H 1 0 1 0 0 1 1 0

2. La instruccin
ADD A

duplica el contenido del acumulador.

ADC Reg Sumar registro o memoria al acumulador con acarreo.


15. Bits afectados:Z, S, El contenido del registro o posicin de memoria especificados ms el contenido del bit de
P,CY, AC acarreo, se suman al contenido del acumulador.
Supongamos que el registro B contiene el valor 30H, el acumulador 76H, y el bit de acarreo
Direccionamiento: est puesto a cero (Cy=0). La instruccin del microprocesador
Registro indirecto ADC C

realizar la siguiente suma:

Registro B 30H 0 0 1 1 0 0 0 0
Acc 76H: 0 1 1 1 0 1 1 0
Bit de acarreo :+ 0
Nuevo Acc A6H 1 0 1 0 0 1 1 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
(Cy=1) antes de realizar la operacin, hubiera tenido lugar la siguiente suma

Registro B 30H 0 0 1 1 0 0 0 0
Acc 76H: 0 1 1 1 0 1 1 0
Bit de acarreo :+ 1
Nuevo Acc A7H 1 0 1 0 0 1 1 1

El acumulador contiene A7H y todos los bits de condicin excepto el de signo, estara puesto a
cero.

Sumar al acumulador un dato Inmediato.


16. ADI Dato
Bits afectados:Z, S, P, Suma el valor del byte especificado en la instruccin (DATOS), al contenido del
CY, AC acumulador y deja el resultado en el acumulador. El dato debe ser expresado en forma de
nmero, un ASCII constante, la etiqueta de un valor previamente definido o una expresin. El
dato no debe exceder de un byte.
Se utiliza aritmtica de complemento a dos.

Ejemplo
A continuacin presentamos un ejemplo con 3 instrucciones:

(1).MVI A, 34
(2).ADI 20
(3).ADI -20

En todas las instrucciones se utilizan datos en base decimal. As, por ejemplo, en la
instruccin (2) el valor 20 es 14H.
La instruccin (1) carga en el acumulador el valor 22H.La instruccin (2) realiza la siguiente
suma

Acc 22H: 0 0 1 0 0 0 1 0
Dat. Inmediat. 14H: + 0 0 0 1 0 1 0 0
Nuevo Acc 36H 0 0 1 1 0 1 1 0

El bit de paridad se pone a uno y el resto se quedan a cero. La instruccin (3) restaura el valor
del acumulador realizando la siguiente suma:

Acc 36H: 0 0 1 1 0 1 1 0
Dat. Inmediat. ECH: + 1 1 1 0 1 1 0 0

Nuevo Acc 22H 0 0 1 0 0 0 1 0

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

ACI Dato Sumar al acumulador un dato Inmediato con arrrastre


17. Bits afectados: Suma el contenido del byte especificado (DATOS) en la instruccin, al contenido del
acumulador, aadiendo adems el bit del acarreo. El resultado se almacena en el acumulador
(perdindose as el anterior contenido del Acumulador).
Z, S, P, CY, AC
El dato (DATOS) debe estar especificado en forma de nmero, en ASCII
constante, como etiqueta de un valor previamente definido o una Expresin. El dato no debe
exceder de un byte.

Tenemos las siguientes instrucciones:


(1).MVI A, 34 ; 22H Convierte en en 22 Hexadcimal
(2).ACI 20 ;20 En hexadecimal es 14H

y suponemos el bit de acarreo puesto a uno.


La instruccin (1) carga en el acumulador el valor 22H.
La instruccin (2) realiza la siguiente suma:
Acc 22H 0 0 1 0 0 0 1 0
20d 14H: 0 0 0 1 0 1 0 0
Bit de acarreo :+ 1
Nuevo Acc 37H 0 0 1 1 0 1 1 1
Todos los bits se ponen a cero.

18. SUB Reg


Bits afectados: Z, S, Direccionamiento:Registro indirecto
P,CY, AC 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.

Si el acumulador contiene 60H y el registro E contiene 28H, la instruccin

SUB E
realizar la siguiente operacin de resta: (Registro B)+(-28H)

Registro 28H 0 0 1 0 1 0 0 0
Comp. 1 C-1: 1 1 0 1 0 1 1 1
Comp. 2 C-2: + 1
Dato comp. D8H 1 1 0 1 1 0 0 0

Acumulador 60H: 0 1 1 0 0 0 0 0
Dato comp. D8H: 1 1 0 1 1 0 0 0
+
Nuevo Acc 38H 0 0 1 1 1 0 0 0

A=38H

El acumulador obtiene un nuevo valor A=38H.

19. SUI Reg Restar del acumulador un dato Inmediato


Bits afectados: Z, S, El byte de datos inmediato se resta del contenido del acumulador usando aritmtica de
P,CY, AC complemento a dos. El resultado se deja en el acumulador.
Ya que se trata de una operacin de resta, el bit de acarreo se pone a uno cuando no hay
acarreo del bit de ms peso, y se pone a cero si tiene dicho acarreo.
A continuacin presentamos un ejemplo con 2 instrucciones:
(1).MVI A, B3H
(2).SUI B3H
La instruccin (1) carga en el acumulador el valor B3H.
La instruccin (2) realiza la siguiente suma (usando el complemento a dos del dato inmediato):

Registro B3H 1 0 1 1 0 0 1 1
Comp. 1 C-1: 0 1 0 0 1 1 0 0
Comp. 2 C-2: + 1
4DH 0 1 0 0 1 1 0 1

Dato comp.
Acumulador B3H: 1 0 1 1 0 0 1 1

Dato comp. 4DH: + 0 1 0 0 1 1 0 1

Nuevo Acc 00H 0 0 0 0 0 0 0 0

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

20. SBI
Restar del acumulador un dato Inmediato con arrastre

El bit de acarreo se suma internamente al byte de datos inmediato. El valor obtenido se


resta del contenido del acumulador usando aritmtica de complemento a dos. El resultado se
deja en el acumulador.
Esta instruccin, al igual que SBB, se usa preferentemente para realizar restas multi-byte. Al
igual que en el apartado anterior, el bit de acarreo se pone a uno si no hay acarreo del bit de
ms peso, ponindose a cero si lo hay.
Tenemos las siguientes instrucciones:
(1).MVI A, 00H
(2).SBI 01H
y suponemos el bit de acarreo puesto a cero.
La instruccin (1) carga en el acumulador el valor 00H.
La instruccin (2) realiza la siguiente suma (usando el complemento a dos del dato inmediato):

Acumulador 00H 0 0 0 0 0 0 0 0
Dato inmed. FFH: 1 1 1 1 1 1 1 1
Bit acarreo :+ 0
Nuevo Acc. FFH 1 1 1 1 1 1 1 1

Cy=1
Z=0

Ca=0

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 Direccionamiento:Registro indirecto


Bits afectados: Z, S,
P,CY, AC Funcin lgica AND entre registro o Memoria con acumulador
Se realiza la funcin lgica AND bit a bit entre el contenido del registro o posicin de
memoria especificados y el contenido del acumulador. El bit de acarreo se pone a cero.

La tabla de verdad de la funcin lgica AND es:

A B F

0 0 0

0 1 0

1 0 0

1 1 1

Si el registro B contiene 6CH y el acumulador almacena 3AH, la instruccin


ANA B
realiza la siguiente operacin:Si el registro B contiene 6CH y el acumulador almacena 3AH, la
instruccin ANA B realiza la siguiente operacin:

Acumulador 3AH: 0 0 1 1 1 0 1 0
Dato comp. 6CH: 0 1 1 0 1 1 0 0
Nuevo Acc 28H 0 0 1 0 1 0 0 0

A=28H

22. ANI Dato


Bits afectados: Z, S, Funcin lgica AND entre el acumulador y un Dato Inmediato.
P, CY, AC Realiza una operacin Y lgica entre el dato (DATOS) especificado en la instruccin y el
contenido del acumulador, el resultado queda en el acumulador. Se pone a cero el bit de
acarreo. El dato, que no debe exceder de un byte, puede ser expresado en forma de nmero, un
ASCII constante, la etiqueta de algn valor previamente definido o una
Expresin.
Disponemos de las siguientes instrucciones:

(1).MVI A, A0H
(2).ANI 0FH

La instruccin (1) carga en el acumulador el valor A0H.


La instruccin (2) realiza la siguiente operacin AND bit a bit entre el
acumulador y el dato inmediato 0FH:

Acumulador A0H: 1 0 1 0 0 0 0 0
Dato inmediato 0FH: 0 0 0 0 1 1 1 1
Nuevo Acc 00H 0 0 0 0 0 0 0 0

La instruccin ANI del ejemplo pone a cero los cuatro bits de mayor peso, dejando invariables
los cuatro menores. Ya que los cuatro bits de menor peso del acumulador eran cero, el
resultado final es 00H con lo que el bit de cero se pondr a cero.

23. XRA Dato


Bits afectados: Z, S, Funcin lgica O-EXCLUSIVO entre registro o memoria con acumulador.
P, CY, AC Se realiza la funcin lgica O-EXCLUSIVO bit a bit entre el contenido del registro o posicin de
memoria especificados y el contenido del acumulador, guardndose el resultado en este ltimo.

La tabla de verdad de la funcin lgica O-EXCLUSIVO es:

A B F
0 0 0
0 1 1
1 0 1
1 1 0

1. Si el registro B contiene 6CH y el acumulador almacena 3AH, la instruccin


XRA B

realiza la siguiente operacin:

Acumulador 3AH: 0 0 1 1 1 0 1 0
Registro B 6CH: 0 1 1 0 1 1 0 0

Nuevo Acc 56H 0 1 0 1 0 1 1 0

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

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

24. XRI Dato Bits 1.-Instruccin Funcin lgica O-EXCLUSIVO entre el acumulador y un dato Inmediato
afectados: Z, S, P, CY,
AC Se realiza la funcin lgica O-EXCLUSIVO bit a bit entre un byte de datos inmediatos y el
contenido del acumulador. El resultado se guarda en el acumulador. El bit de acarreo se pone a
cero.

Ejemplo
Esta instruccin se suele utilizar para complementar bits especficos del acumulador dejando
los restantes en su estado original. De este modo y suponiendo que el acumulador contiene
ABH, la instruccin
XRI 80H

complementa el bit de ms peso del acumulador, tal y como se muestra en la siguiente figura:

Acumulador ABH: 1 0 1 0 1 0 1 1
Dato 80H: 1 0 0 0 0 0 0 0
inmediato
Nuevo Acc 2BH 0 0 1 0 1 0 1 1

25. ORA Reg Funcin lgica OR entre registro o memoria con acumulador
Bits afectados: Se realiza la funcin lgica AND bit a bit entre el contenido del registro o posicin de
Z, S, P, CY, AC memoria especificados y el contenido del acumulador, quedando en este ltimo el resultado. El
bit de acarreo se pone a cero. La tabla de verdad de la funcin lgica OR es:
Direccionamiento: A B F
Registro indirecto 0 0 0
0 1 1
1 0 1
1 1 1

Como sea que la funcin OR de cualquier bit con un uno da como resultado uno, y de cualquier
bit con cero, lo deja invariable, esta funcin se utiliza frecuentemente para poner a uno grupos
de bits.
Si el registro B contiene OFH y el acumulador almacena 33H, la instruccin
ORA B
realiza la siguiente operacin:
Acumulador 33H: 0 0 1 1 0 0 1 1
Dato inmediato 0FH: 0 0 0 0 1 1 1 1
Nuevo Acc 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 dato Bits Funcin lgica OR entre el acumulador y un dato Inmediato.
afectados: Z, S, P, CY, ORI desarrolla una operacin lgica OR entre el contenido especificado por DATOS y el
AC contenido del acumulador. El resultado se deja en el acumulador. Los bits de acarreo y acarreo
auxiliar se ponen a cero.
Ejemplo
Si el acumulador inicialmente contiene 3CH, la instruccin
ORI F0H

realiza la siguiente operacin OR bit a bit:

Acumulador 3CH: 0 0 1 1 1 1 0 0
Dato inmediato F0H: 1 1 1 1 0 0 0 0
Nuevo Acc FCH 1 1 1 1 1 1 0 0
Como vemos la instruccin ORI de nuestro ejemplo activa los cuatro bits de menor peso,
dejando invariables los restantes.

Instruccin CMC dato


27. Bits afectados: CY
Complementar acarreo
Si el bit de acarreo es 0, se pone a 1. Si es un 1, se pone a 0.

28. Instruccin STC dato


Activar acarreo
El bit de acarreo se pone a 1.

29. DAA dato


Bits afectados: Z, S, Ajuste decimal del acumulador
P, CY, AC
El nmero hexadecimal de 8 bits contenido en el acumulador se ajusta como dos dgitos de 4
Direccionamiento: bits codificados en binario decimal, segn el proceso siguiente:
Registro indirecto
(1).Si los cuatro bits menos significativos del acumulador representan un nmero mayor que 9,
o si el bit de acarreo auxiliar es igual a uno, el acumulador se incrementa en seis unidades. Si no
se presentan tales condiciones, el contenido
del acumulador no vara.

(2).Si los cuatro bits ms significativos del acumulador representan ahora un nmero mayor
que 9, o si el bit de acarreo es uno, los cuatro bits ms significativos se incrementan en seis
unidades. Asimismo, si no tienen lugar las
circunstancias expuestas, el contenido del acumulador no se incrementa. Si hay acarreo de los
cuatro bits menos significativos durante el paso (1), el bit de acarreo auxiliar se pone a 1; si no
lo hay, se pone a 0. Por otra parte, si hay acarreo de los cuatro bits ms significativos durante el
paso (2), se activar el bit de acarreo, ponindose a cero si no se produce acarreo.
Esta instruccin se utiliza en las operaciones de suma de nmeros decimales. Es la nica
instruccin cuya operacin depende del bit de acarreo auxiliar.
Supongamos que queremos realizar una suma decimal de dos nmeros (40 + 80).
Ambos bits de acarreo estn a cero.

La secuencia de instrucciones podra ser:


(1).MVI B,80H
(2).MVI A,40H ; Acumulador = 40H
(3).ADD B ; Acumulador = 40H + 80H = C0H

(4).DAA ; Acumulador = 20H

; Bit de acarreo = 1

La instruccin DAA opera de la siguiente forma:

1. Como el contenido de los bits [0 3] del acumulador es menor que 9 y el bit de acarreo
auxiliar es cero, el contenido del acumulador no vara.
2. Como los 4 bits ms significativos del acumulador representan un nmero mayor que 9,
estos 4 bits se incrementan en 6 unidades, poniendo a uno el bit de acarreo.

Acumulador C0H: 1 1 0 0 0 0 0 0 Cy=0


+6 60H: 0 1 1 0 0 0 0 0 Cy=0
Nuevo Acc 20H 0 0 1 0 0 0 0 0 Cy=1

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


HEXADECIMAL
30. NOP
No se realiza ninguna operacin.

31. RLC
Bits afectados: CY
Desplazar el acumulador a la izquierda Rotate Left Carry
RLC rota un bit hacia la izquierda todo el contenido del acumulador, transfiriendo el bit de
ms alto orden al bit de acarreo y al mismo tiempo a la posicin de menor orden del
acumulador.

Ejemplo

Supongamos que el acumulador contiene F2H.

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

33. RAL
Bits afectados: CY (Rotate Arraund Left)
Desplazar el acumulador hacia la izquierda a travs del bit de acarreo
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.

Supongamos que el acumulador contiene B5H. La instruccin RAL efectuar las siguientes
modificaciones en el registro acumulador y en el bit de acarreo:
34. RAR
Rotate Arround the Rigth

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

Ejemplo

En este caso el acumulador contendr el valor 6AH. La instruccin RAL efectuar las siguientes
modificaciones en el registro acumulador y en el bit de acarreo:

35. JMP Dir


Salto incondicional La instruccin JMP DIR altera la ejecucin del programa cargando el
valor especificado por DIR en el contador de programa.

36. JC dir La instruccin JC DIR comprueba el valor del bit de acarreo. Si es un 1 la ejecucin del
programa contina en la direccin especificada por DIR. Si es un 0 el programa contina su
ejecucin normal de forma secuencial.

37. JNC dir


Saltar si no hay acarreo
La instruccin JNC DIR comprueba el estado del bit acarreo. Si esta a 0 el programa cambia a la
direccin especificada por DIR. Si esta a 1 la ejecucin del programa contina normalmente.

38. JZ dir
Saltar si hay cero
La instruccin JZ DIR comprueba el bit de cero. Si est a 1 el programa contina en la
direccin expresada por DIR. Si est a 0 contina con la ejecucin secuencial normal.

39. JNZ dir


Saltar si no hay cero
La instruccin JNZ DIR comprueba el valor del bit de cero. Si el contenido del acumulador no es
cero (Bit de cero = 0) el programa contina en la direccin especificada por DIR. Si el
contenido del acumulador es cero (Bit de cero = 1) el
programa contina su ciclo normal.

40. JM dir
Saltar si hay signo negativo
La instruccin JM DIR comprueba el estado del bit de signo. Si el contenido del acumulador es
negativo (bit de signo = 1) la ejecucin del programa contina en la direccin especificada por
DIR. Si el contenido del acumulador es positivo (bit de signo = 0) contina la ejecucin de la
secuencia normal.

41. JP dir
Salta si hay signo positivo
La instruccin JP DIR comprueba el estado de bit del signo. Si el contenido del acumulador es
positivo (bit de signo = 0) la ejecucin del programa contina con la direccin especificada por
DIR. Si el contenido del acumulador es negativo (bit de
signo = 1) contina el programa con su ejecucin normal.

42. JPE dir


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

43. CALL dir 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 Llamada si hay acarrero


CC comprueba el estado del bit de acarreo. Si el bit est a 1, CC carga el contenido del contador
de programa en el stack y a continuacin salta a la direccin especificada por DIR. Si el bit esta
a 0, la ejecucin del programa contina con la prxima instruccin de su secuencia normal.
Aunque el uso de una etiqueta es lo ms normal, la direccin puede ser especificada tambin
como un nmero o una expresin.

45 CNC dir
Llamar si no hay acarreo.

CNC chequea el valor del bit de acarreo. Si est en cero CNC carga el contenido de contador de
programa en el stack y a continuacin salta a la direccin especificada por la instruccin en
DIR. Si el bit est a 1, el programa contina con su secuencia normal.
Aunque el uso de una etiqueta es lo ms comn, la direccin puede tambin estar indicada por
un nmero o por una expresin.

46 CZ dir
Llamar si hay cero
CZ chequea el bit de cero. Si el bit esta a 1 (indicando que el contenido del acumulador es cero),
CZ carga el contenido del contador de programa en el stack y salta a la direccin especificada
en DIR. Si el bit est a 0 (indicando que el contenido del
acumulador es distinto de cero) el programa contina su desarrollo normal.
47 CNZ dir
Llamar si no hay cero
CNZ chequea el bit de Cero. Si est en 0 (indicando que el contenido del acumulador no
es cero), CNZ manda el contenido del contador de programa al stack y salta a la
direccin especificada por DIR. Si el bit est a 1 el programa contina su desarrollo
normal.
48 CM dir
Llamar si hay signo negativo
CM comprueba el estado del bit del signo. Si el bit esta a 1 (indicando que el contenido del
acumulador es negativo) CM manda el contenido del contador de programa al stack y salta a la
direccin especificada por DIR. Si el bit es 0 la ejecucin del programa contina con su
secuencia normal. El uso de la etiqueta es lo ms corriente, pero la direccin puede
especificarse tambin por un nmero o una expresin.

49 CP dir
Llamar si hay signo positivo
CP chequea el valor del bit de signo. Si est a 0 (indicando que el contenido del
acumulador es positivo), CP enva el contenido del contador de programa al stack y
salta a la direccin especificada por DIR. Si el bit tiene un 1, contina el programa
normalmente con la instruccin siguiente.

50 CPE dir
Llamar si la paridad es par.
Existe paridad en un byte si el nmero de unos que tiene es par. El bit de paridad se
pone a 1 para indicar esta condicin. CPE chequea el valor del bit de paridad. Si tiene
un 1, CPE enva el contenido del contador de programa al stack y salta a la direccin
especificada por la instruccin en DIR. Si el bit tiene un cero, el programa contina
normalmente.

51 CPO dir
Llamar si la paridad es impar
CPO chequea el bit de paridad. Si el bit esta a 0, CPO carga el contenido del contador
de programa en el stack y salta a la direccin especificada en DIR. Si el bit est a 1 el
programa contina su desarrollo normal.

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

53 RC Retorno si hay acarreo


La instruccin RC comprueba el estado del bit de acarreo. Si tiene un 1 (indicando
que
hay acarreo) la instruccin saca dos bytes del stack y los mete en el contador de
programa. El programa contina en la nueva direccin suministrada. Si el bit es 0, el
programa contina en la siguiente instruccin de la secuencia normal
54 RNC Retorno si no hay acarreo
La instruccin RNC comprueba el bit de acarreo. Si est a 0 indicando que no hay
acarreo, la instruccin echa fuera del stack dos bytes y los carga en el contador de
programa. Si el bit est a 1 contina el ciclo normal.
55 RZ Retorno si hay cero
La instruccin RZ comprueba el bit de cero. Si est a 1, indicando que el contenido del
acumulador es cero, la instruccin echa fuera del stack dos bytes y los carga en el
contador de programa. Si el bit est a 0, contina el ciclo normal.
56 RNZ Retorno si no hay cero
La instruccin RNZ comprueba el bit cero. Si est a 0, indicando que el contenido del
acumulador no es cero, la instruccin echa fuera del stack dos bytes y los carga en el
contador de programa. Si el bit est a 1, contina el ciclo normal.
57 RM Retorno si hay signo negativo
La instruccin RM comprueba el bit de signo. Si tiene un 1, indicando dato negativo en
el acumulador, la instruccin echa dos bytes fuera del stack y los mete en el contador
de programa. Si el bit tiene 0, contina el programa normal con la siguiente
instruccin.
58 RP Retorno si hay signo positivo
La instruccin RP comprueba el bit signo. Si est a 0, indicando que el contenido del
acumulador es positivo, la instruccin echa fuera del stack dos bytes y los carga en el
contador de programa. Si el bit est a 1 contina el ciclo normal.
59
RPE
Retorno
59 RPE Retorno si la paridad es par
La instruccin RPE comprueba el bit de paridad. Si est a 1, indicando que existe
paridad, la instruccin echa fuera del stack dos bytes y los carga en el contador de
programa. Si el bit est a 0 contina el ciclo normal. (Existe paridad si el byte que est
en el acumulador tiene un nmero par de bits, colocndose el bit de paridad a 1 en
este caso).
60 RPO
Retorno si la paridad es impar
La instruccin RPO comprueba el bit de paridad. Si est a 0, indicando que no hay
paridad, la instruccin echa fuera del stack dos bytes y los carga en el contador de
programa. Si el bit est a 1, contina el ciclo normal.

61 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.
62 EI 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).
63 DI
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.).

64 IN port Entrada
La instruccin IN PORT lee los 8 bits de datos que hay en el "PORT" especificado y los
carga en el acumulador. El operando debe ser un nmero o una expresin que
produzca
un valor comprendido entre 00H y FFH.
1. La instruccin
IN 2
deposita en el acumulador los datos de entrada del puerto 2.
65 OUT port Salida
OUT PORT pone el contenido del acumulador en el bus de datos de 8 bits del puerto
seleccionado. El nmero de puertos oscila de 0 a 255 y es duplicado en el bus de
direcciones. Es la lgica externa la encargada de seleccionar el puerto y aceptar el
dato
de salida. El operando (PORT) debe especificar el nmero del puerto de salida
seleccionado.
1. La instruccin OUT 2 enva el contenido del acumulador al puerto de salida nmero
2.
66 HLT
La instruccin HLT detiene el procesador.
El contador de programa contiene la direccin de la prxima instruccin secuencial.
Por otro lado los bits y registros permanecen inactivos. Una vez en estado de parada
el procesador puede volver a ser arrancado solamente por un acontecimiento
externo, es decir una interrupcin. Por tanto debemos asegurarnos que las
interrupciones estn en disposicin de ser activadas antes de ejecutar la instruccin
HLT.
Si se ejecuta HLT estando las interrupciones fuera de servicio, la nica manera de
volver arrancar el procesador ser mediante un RESET o a travs de la interrupcin
TRAP.
El procesador puede salir temporalmente del estado de parada para servir un acceso
directo a memoria, sin embargo terminado el acceso directo vuelve al estado de
parada.
Un propsito bsico de la instruccin HLT es permitir una pausa al procesador
mientras espera por la interrupcin de un perifrico.

Colocar datos en stack


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

S Z 0 Ca 0 1 0 1
Sea cual sea el par de registros especificado, una vez que los datos se han
guardado, el puntero de pila se decrementa en dos unidades.
1. Supongamos que el registro B contiene 3FH, el registro C contiene 16H y el
puntero de pila vale 2030H. La instruccin
PUSH B
almacenar el contenido del registro B en posicin de memoria 2029H, el contenido del registro C en la
direccin de memoria 2028H, y decrementa dos unidades el puntero de stack, dejndolo en 2028H.

Grficamente podemos ver el proceso anterior:

Antes de PUSH
Despues de PUSH
Puntero Puntero
Stack Stack
2030 2030
Registro B Registro C Registro B Registro C
3F 16 3F 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.
68 POP pr Sacar datos del stack

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.

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 Despues de POP


Puntero Puntero
Stack Stack
2028 2030
Registro B Registro C Registro B Registro C
00 16 3F 16

MEMORIA DIRECCION MEMORIA DIRECCION


00 2027 00 2027

16 2028 16 2028

3F 2029 3f 2029

00 2030 00 2030

2. Si las posiciones de memoria 1008H y 1009H poseen respectivamente 00H y


16H, y el puntero de pila vale 1008H, la instruccin

POP PSW
carga 00H en el acumulador y pone los bits de estado de la siguiente forma:

S Z X Ca X P X Cy
0 0 0 1 1 1 1 0

=16H
69 DAD pr Suma doble
DAD RP suma el valor de un dato de 16 bits contenido en un determinado par de registros (PR) al
contenido del par de registros HL. El resultado es almacenado en el par HL. Los operandos (PR) pueden ser
B = BC, D = DE, H = HL, SP. Tngase en cuenta que la letra H debe ser empleada para especificar que el par
de registros HL debe ser doblado. DAD pone el bit de acarreo a 1 si hay una salida de acarreo de los
registros HL. Y adems no afecta a ningn otro bit.
1. Supuesto que los registros D, E, H y L contienen 33H, 9FH, A1H y 7BH
respectivamente, la instruccin
Realiza la siguiente suma:
BC: 339FH
HL: + A17BH
__________________________

HL 051AH

2. Al ejecutar la instruccin DAD H


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

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

Antes de ejecutar XCHG


Antes de ejecutar XCHG
D E H L
D E H L
03 04 01 02
03 04 01 02
71

XTHL Intercambiar datos con el stack

XTHL cambia los dos bytes de la posicin ms alta del stack con los dos bytes almacenados en los registros
H y L.
As XTHL salva el contenido actual del par HL y carga nuevos valores en HL.
XTHL cambia el contenido del L con la posicin de memoria especificada por el stack pointer y el registro H
es intercambiado con el contenido del SP+1.

Si el puntero de pila contiene 40B4H, los registros H y L contienen AAH y BBH respectivamente, y las
posiciones de memoria 40B4H y 40B5H contienen CCH y DDH respectivamente, la instruccin

Antes de XTHL Antes de XTHL


Puntero Puntero
Stack Stack
40B4 40B4
Registro B Registro L Registro B Registro L
AA BB AA BB

MEMORIA DIRECCION MEMORIA DIRECCION


00 40B3 00 40B3

CC 40B4 CC 40B4

DD 40B5 DD 40B5

00 40B6 00 40B6

72 SPHL Cargar el puntero de stack desde los registros H y L


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

carga el puntero de stack con el valor 506CH.


73 SHLD Carga directamente con H y L

Almacena una copia del registro L en la posicin de memoria especificada por DIR, a
continuacin almacena una copia del registro H en la siguiente posicin de memoria (DIR+1).
Suponiendo que los registros H y L contienen respectivamente los valores 3CH y 54H, la
instruccin
SHLD 34B3
efectuar las siguientes modificaciones en memoria:

Memoria antes de ejecutar Memoria despues de ejecutar


SHLD SHLD

MEMORIA DIRECCION MEMORIA DIRECCION


FF 34B2 FF 34B2

FF 34B3 54 34B3

FF 34B4 3C 34B4

FF 34B5 54 34B5

74
LSHD

75
SBB

76
DAD

77
ORG 0 ; Posicion de programa en la DIRECTIVA
ORG 0 .data DIR ; Direccion donde empiezo a colocar mis datos, Ej: 2000H
.DATA
dB ; Directiva asociada a adatos
DB
DW
dW ; Directiva asociada a datos exadecimales.

.define ; 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
.
2.2.-TABLA SET OP.CODE
2.3.-Tamao de instrucciones [Bytes ]
Ejercicio de ensamble.

MVI A,55H ;Mueve inmediatamente 55H al acumulador A, A=55


MVI B,15H ;Mueve inmediatamente 15H al registro B, B=15H
MVI C,22H ;Mueve inmediatamente 22H al Registro C, C=22H
MOV H,C ;Mueve el contenido del registro C a H, H=22H
MOV L,B ;Mueve el contenido del registro B a L, L=15
MOV M,A
;Mueve el contenido del acumulador A
;y lo lleva a la
;posicin de memoria
;Contenido por el registro H,L

Posicin de memoria .

HL= 2215 H 55H

.
.

Trabajando con la tabla de datos OP.CODE


Para poder identificar la operacin se debe identificar el cdigo de la
instruccin, as por ejemplo el cdigo 78H corresponde a MOV A,B. De esta forma
identificando el cdigo de instruccin sabremos qu tipo de cual se trata,

La tabla Repertorio de instrucciones de la columna Bytes seala el tamao de cada


instruccin asi por ejemplo la instruccin

MVI Reg,dato ; Ocupa 2 Bytes


Instruccin Codigo nemnico Tamao instruccin
HEX

MOV A,B 1 Byte


78 Op. Code

MVI A,55H 2 Bytes


3E Op code

55 dato

LXI 1234H 3 Bytes


21 Op. Code

34 Dato

12 dato
Ejercicio de DES-ensamble. Dado los siguientes nemnicos
desensamblar.
3E5506150E22616877
Solucin: Con la tabla SET OP CODE podemos identificar la instruccin. Deducir la
posicin de la siguiente instruccin a partir del nmero total de Bytes que ocupa
cada instruccin.

PC Cod. Dat Instruccin Tamao Bytes

0 3E 55H MVI A,55H 2


2 06 15H MVI B,15H 2
4 0E 22H MVI C,22H 2
6 61 MOV H,C 1
7 68 MOV L,B 1
PC 8 77 MOV M,A 1
Apunta siguiente inst. por Total 9 Bytes
tamao Bytes.
LA PROGRAMACIN.

Despus de haber tratado y examinado el repertorio de instrucciones del


microprocesador, vamos a introducir algunas cuestiones bsicas y primordiales
sobre la metodologa de la programacin. El proceso de programacin debe
desarrollarse partiendo de unas ideas que deben ser perfectamente asimiladas,
comprendidas y organizadas por la persona o personas que vayan a construir el
programa en cuestin. Esto lleva implcita la disminucin de errores durante el
proceso programador, por lo que se facilita enormemente la tarea. El objetivo final
de la programacin es de conseguir programas que funcionen correctamente y sean
eficientes, proporcionar sobre ellos toda la documentacin necesaria. Debe tenerse
en cuenta que un programa indebidamente documentado sera muy difcil de
modificar en un futuro, o al menos podra resultar tan costoso que nos hara
renunciar a tal propsito.

2.4.-DIAGRAMA DE FLUJO Y PROGRAMACIN:

Cuando se est aprendiendo programar en cualquier lenguaje, es evidente que


no se cuenta con la capacidad ni la maestra para hacerlo. Es por ello que es
necesario primeramente saber crear un Flujograma, tambin denominado
diagrama de flujo, este nos ayudar a guiarnos en el desarrollo de los pasos,
acciones, situaciones, hechos, movimientos y relaciones de todo tipo a partir de
smbolos.

Fig.10.-Formas y nombres del Flujograma.


Trabajando con el simulador

Antes de programar lo primero realizaremos es descargar el software. Se trata de


un programa que ensambla las instrucciones que usa el microprocesador 8085.

https://www.4shared.com/rar/ZvqlPSQPba/8085.html

Una vez descargado e instalado, ya contamos con la herramienta para poder


comprender esta materia.
1.- Abrimos el editor ASM/archivo/nuevo
2.- Escribimos nuestro programa y ensamblamos

3-Analizamos paso a paso las instrucciones


4.- Los registros se muestran en forma binaria y hexadecimal

5.-RESUMEN: Para programar es necesario tener claro que estamos


programando sobre una pila LIFO, para cualquier operacin debemos especificar
una direccion, all podemos quitar, transferir ,copiar, es decir realizar una
operacin, y para ello existe las instrucciones de: transferencia, salto,
comparacin, etc. Un programa pueden tener muchas formas de llegar a la misma
solucin. De momento vamos a considerar los recursos como ilimitados y no se
considerar la optimizacin de la programacin, sin embargo en la realidad
tendremos que optimizar la cantidad de Bytes disponibles.

Dir Pila
.
.
PC> dato
.
.
.
SP> FFFF
2.- SALTO DENTRO DE LA INSTRUCCIN
Un salto dentro de un programa, pueden estar condicionadas o no. Generalmente
el programador designa algn label, o etiquetado para sealar a la direccin al que
quiere saltar. Ej:
XX: MVI A,B
JUMP XX ; Salto incondicional al label o etiquetado XX
HLT

2.5.- EJERCICIOS RESUELTOS Y ENSAMBLADO

Copia y pega en el editor ASM del simulador 8085 para el anlisis ms detallado de
cada ejemplo. Enssamblar.

1.- Mi primer contador o counter.

.ORG 0
MVI C,10; El compilador transforma el 10 decimal a 0A H de
;forma interna
LOOP:DCR C
JNZ LOOP ;Si no se cumple la condicin de cero salta a LOOP
HLT
;Ensamblado correctamente EIEE
2.- Recorrido de tabla desde 0000H hasta 000AH con counter
;---------------------------------------------------------------
;Programa de tabla desde 0000H hasta 000AH con counter
;---------------------------------------------------------------

.ORG 0
MVI C,10 ; El compilador transforma el 10 decimal a 0A H de
; forma interna
LXI H,0000H ;Se posiciona el PC en 0000H para recorrer la tabla
LOOP: INX H ; Se empieza recorriendo la direccin de memoria
; incrementndose en una posicin.

DCR C ;El ciclo del contador depende de la condicion de zero


JNZ LOOP ;Si no se cumple la condicion de cero retorna a LOOP
;
HLT

;Ensamblado correctamente EIEE

3.- Ingresa los valores de forma progresiva en una tabla dada y es almacenado en otra direccin.
Se tiene una tabla de 10 datos numericos almacenados a partir de la direccion de memoria 1000h. Se
desea construir una segunda tabla con estos datos y almacenarlos desde la posicion de memoria 100AH.

;-------------------------------------------------------
; Ingresa los valores en una tabla dada
;--------------------------------------------------------

.data 1000H
dB 1h,2h,3h,4h,5h,6h,7h,8h,9h,Ah
.ORG 0
MVI A,00H
MVI L,10 ;COUNTER
LXI B,1000H ;POSICIONAMIENTO
LXI D,100AH ;POSICIONAMIENTO
XX: LDAX B
STAX D
INX B
INX D
DCR L
JNZ XX
HLT

;Ensamblado correctamente EIEE

Resultado. A partir de la posicin 1004:1H,2H,3H,4H,5H,6H,7H,8H,9H,AH

4.-Suma en el contador la cantidad de unos que hay en una tabla usando CPI.

.data 2000H
dB 1h,0h,1h,1h, 1h,0h,1h,0h,1h,0h
.ORG 0

LXI H,2000H ;Me ubico en la posicin de memoria


MVI C,0 ;Inicializo contador
MVI B,10 ;tamao de la tabla
OTRO:MOV A,M
CPI 1
JNZ XX
INR C
XX: DCR B
JZ FIN
INX H
JMP OTRO
FIN: HLT

;Ensamblado correctamente EIEE

Resultado B=0, C=06H, Es decir existen s en la tabla.

5.-Desensamblar el siguiente cdigo de un programa para el procesador 8085


0E 00 3A 36 10 47 3A 37 10 80 D2 0E 00 0C 32 38 10 79 32 39 10 76

;De la tabla SET OP CODE (Ver arriba)

MVI A,00H ; 0E 00
LDA 3610H ; 3A3610
MOV B,A ; 47
LDA 3710H ; 3A37 10
ADD 80H ; 80
JNC 0E00H ; D2 0E 00
INR C ; 0C
STA 3810H ; 323810
MOV A,C ; 79
STA 3910H ; 323910
HLT ; 76

6.- Crear un contador que busque los numero s que posea en un tabla de tamao
10.

(A) Lo primero que necesitamos saber es sumar con un contador la cantidad de


unos que hay

en una tabla. Para ello usaremos un CPI, que es un comparador.


;---------------------------------------------------------
; PROGRAMA QUE CUENTA SI EXISTE
; EL VALOR 01H EN LA TABLA
;---------------------------------------------------------

.data 2000H
dB 01h,00h,01h,01h, 01h,00h,01h,00h,01h,00h
.ORG 0

LXI H,2000H ;Me ubico en la posicin de memoria


MVI C,0 ;Inicializo contador
MVI B,10 ;tamao tabla
OTRO:MOV A,M
CPI 1
JNZ XX
INR C
XX: DCR B
JZ FIN
INX H
JMP OTRO
FIN: HLT
;Ensamblado correctamente PTRRZA
(B).- Necesitamos rotar un dato, para poder analizarlo bit a bit.
;--------------------------------------------------
;PROGRAMA QUE ROTA BIT A BIT
;--------------------------------------------------------

.ORG 0 ;ingreso de datos


MVI A,7FH ; ingresamos 0111 1111 al acumulador (7FH)

MVI B, 8 ; Definimos el tamao del dato en 2 bytes ( 8 bits)


XX : RLC ; Se empieza rotando el Acumulador
DCR B ; disminuye el numero de rotaciones
JNZ XX ; si no hay ceros (z=0), salto para continuar rotando
HLT

;Ensamblado correctamente PTRRZA

(C) Encontrar el numero de 1 que hay en un dato usando RLC y ANI

;-----------------------------------------------------------------------------
; PROGRAMA QUE CUENTA LOS 1S EN UN REGISTRO
;-----------------------------------------------------------------------------

.ORG 0
;INGRESO DE DATOS
MVI C,0 ; inicializamos el counter en cero
MVI B,8 ; Contador de tamao de bits del dato (en exadecimal 08H)
MVI A,7FH ; Almacenamos el dato en registro A

LOOP:RLC ;Genera un movimiento bit a bit hacia la izquierda


MOV D,A ;Movemos el contenido del acumulador a D para no destruirlo
ANI 01H ;ANI destruye el contenido de A y reescribe en un nuevo Acc

JZ XX ; Si no es cero saltamos a la direccin xx


INR C ; El counter de 1s se incrementa

XX: MOV A,D ; Restauramos el contenido del acumulador antes ANI


DCR B ; Disminuye el tamao de palabra

JNZ LOOP ; La posicin 00H del registro C es usado para Fin de ciclo
HLT ; Resultado: C=7H Hay 7 unos
;Ensamblado correctamente PTRRZA
5.-Ya estamos preparados para HACER el programa del ejercicio 5. Contar Todos
los s de cada registro en la tabla.
;------------------------------------------------------------------------------
; DIRECTIVAS Y ORIGENES DEL ENSAMBLADOR sin XCHG Versin 1.0
;------------------------------------------------------------------------------
.data 1000H
dB 01h,01h,01h,01h, 01h,01h,01h,01h,01h,01h
.ORG 0

;--------------------------------------------------------------------------
; INICIO DEL PROGRAMA
;--------------------------------------------------------------------------
MVI C,00H ;Counter total de 1's
MVI E,AH ;tamao de tabla
MVI A,00H ;Limpio el acumulador

LXI H,1000H ;Nos posicionamos en 1000H

;----------------------------------------------------------------------------
; RECORRIDO DEL DATO EN LA DIRECCION HL
;----------------------------------------------------------------------------

HEAD :MOV A,M


MVI B,08H ;Counter de 1s en la direccin HL***
XX: RLC ; El contenido lo dejamos en el acumulador

MOV D,A ; Almacenamos el contenido del acumulador


ANI 01H ; comparamos para saber si el ultimo bit es 0 o 1
JZ LOOP ;
INR C ; Este counter almacenara si hay 1's, son numero de elementos
LOOP:MOV A,D ; Devolvemos el valor antes de que ANI haya borrado la informacin
DCR B ;Decrementamos el registro B
;--------------------------------------------------------------------------------
; RECORRIDO DE LA SIGUIENTE DIRECCION DE LA TABLA
;--------------------------------------------------------------------------------
JNZ XX
INX H ; Se incrementa la tabla en la siguiente posicin ***
DCR E
JNZ HEAD
HLT

;Ensamblado correctamente EIEE

Resultado C=A
3.- TIEMPO DEL PROGRAMA
3.1 Ejecucin de un Programa. Hasta ahora se estudiaron la arquitectura de una CPU, el
formato de las instrucciones y los distintos tipos de instrucciones. Veremos ahora cmo se
ejecuta un programa almacenado en memoria. Un programa almacenado en memoria est
listo para ser ejecutado por el microprocesador. Para ser ejecutado, es necesario cargar el PC
con la direccin de la primera instruccin a ser ejecutada. Luego, el PC se incrementa
automticamente recorriendo secuencialmente los sucesivos lugares de memoria donde se
halla el programa.

3.2 Ciclos de operacin.


Hay dos operaciones fundamentales que realiza un procesador:
- Bsqueda de la instruccin: en la cual el procesador busca el cdigo de operacin(FETCH).
- Ejecucin de la instruccin: En la cual el procesador ejecuta la operacin determinada por la
instruccin. Un procesador se encuentra siempre haciendo una de las dos operaciones
anteriores.

3.2.1.-Ciclo de instruccin
Es el tiempo total, medido en nmeros de perodos de reloj, de duracin de un ciclo de
bsqueda ms uno de ejecucin de la instruccin teniendo en cuenta los sucesivos accesos a
memoria en el caso de ser una instruccin de ms de un byte.

3.2.2.-Ciclo de mquina
Es el tiempo, medido en nmeros de perodos de reloj de duracin de una operacin de
lectura, de escritura o de bsqueda (Fetch) de una instruccin. Un ciclo de instruccin est
compuesto por uno o varios ciclos de mquina (M1, M2, M3,M4), dependiendo del tipo de
instruccin. Se denomina M1 al ciclo de bsqueda, pues siempre es el primero de cada ciclo
de instruccin. Los ciclos de mquina ms comunes son: Fetch, Memory Read, Memory Write,
I/O Read, I/O Write, INA, etc.

TIMING DIAGRAM for various machine cycles 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):

. Opcode fetch .......... T


. Memory Read .... T
. Memory Write ... T
. I O Read T
5. I O Write.. T
. Interrupt Acknowledge 6 / 12 T
7. Bus Idle. T
Ejemplo. N es un valor arbitrario que se usaremos para calcular la cantidad de veces que se
ejecuta una instruccin, generalmente este valor depender de la cantidad que se le asigne a
un contador o ciclo. Debido a que existen ciclos dentro de otros ciclos pueden haber dos o
mas valores N los que designaremos como N N Nn. Este trmino deber ser considerado
como DECIMAL cuando se calcule el TT, si nos entregan un valor hexadecimal se deber
transformar a decimal.
Tomando en cuenta que cada instruccin tienen T tiempos de ejecucin . Cuando hay un
salto de retorno condicionado, el valor del counter decrece en 1, y por tanto repite la
instruccin queda en (N-1) veces. Para el caso del JNZ vemos que necesita de 10T para
saltar una instruccion, y 7T para continuar con el programa sin efectuar ningun salto, el
valor 10T(N-1) nos seala que hubo un salto de retorno y se ejecuta N-1 veces.

Label Mnemnico Comentario


DELAY: MVI A,03H 7T
XX : DCR A 4T
JNZ XX 7/10T
HLT 4T

7T

4T 4T 4T *N

10T 10T 7T *N-1

4T

A=3 A=2,1 A=0

Cuando empieza a decrementar el registro A, DCR toma N veces la , mientras que al


efectuar un salto JNZ solo lo realiza (N-1) veces. Cuando A=0H, JNZ no salta y ejecuta la
siguiente instruccin (7T). Sumamos:

TT= 7T+ 4TN +10T(N-1) +7T +4T

TT = 7T+ 4TN +10TN -10T+7T+4T

TT=8T+14TN

N=03H N=3 (Decimal)

TT=8T+14*3*T

TT=8T+42T R: TT=50T
2.7.- Metodo de Columnas (DETALLES).

N: Se multiplica por N, si se repite 3 veces en las filas


| | | |

N-1: Se multiplica N-1, si se repite 2 veces en las filas.


| | | |
Si solo repite 1 vez, simplemente sumar. Sin multiplicar por nada!. Ej: b
Ejemplo
c - c

a a a N a*N

a a b N-1 a*(N-1)+b

a a a N a*N

b b a N b*(N-1)+a

b a c b+a+c

Inicio Bucle Fin +__________________

TT: c+ a*N+ a*(N-1)+b+ a*N+ b*(N-1)+a+ b+a+c

Tipos de columnas: Como te habrs dado cuenta, al efectuar este tipo de operaciones habra un inicio,
luego un salto condicional que lleva a un ciclo recursivo, que se repite constantemente sin variar y
solo cuando se cumple una condicin se continua hasta el fin del programa.

| | | |
Inicio: Corresponde a los tiempos T del primer recorrido de la instruccin.
Bucle: Es el ciclo T que se repite constantemente sin variar y en forma recursiva.
Fin: Cuanto se cumple la condicin para recorrer las ltimas instrucciones hasta HLT
1.-Calcular la duracin del programa, para un procesador 8085, que usa un cristal de 6 Mhz.

Label Mnemnico Comentario


DELAY: MVI B,02H 7T
REP1: MVI C,02H 7T
REP2: DCR C 4T
JNZ REP2 7/10T
DCR B 4T
JZ FIN 7/10T
JNZ REP1 7/10T
FIN: HLT 4T

DELAY: MVI B,02H 7T


REP1: MVI C,02H 7T
REP2: DCR C 4T
JNZ REP2 7/10T
DCR B 4T
JZ FIN 7/10T
JNZ REP1 7/10T
FIN: HLT 4T

--------------------------------------------------------------------------------------------------

DELAY: MVI B,02H ; N1 7T


REP1:
X

DCR B 4T
JZ FIN 7/10T
JNZ REP1 7/10T
FIN: HLT 4T

7T

X X X *N1

4T 4T 4T *N1

7T 7T 10T *N1-1

10T 10T 4T *N1-1

B=2 B=1 B=0


TT= 7T+XN1+4TN1+(N1-1)7T+ 10T+(N1-1)10T+4T

REP1: MVI C,02H ; N2 7T


REP2: DCR C 4T X
JNZ REP2 7/10T

7T

4T 4T 4T *N2

10T 10T 7T *N2-1

C=2 C=1 C=0

X=7T+4TN2+10T(N2-1)+7T
X=7T+4TN2+10TN2-10T+7T
X=14TN2+4T
TT= 7T+XN1+4TN1+(N1-1)7T+ 10T+(N1-1)10T+4T Reemplazando X:

TT= XN1+21TN1+4T

TT= (14TN2+4T)N1+21TN1+4T

TT= 14TN2N1+4TN1+21TN1+4T

TT=14TN2N1+25TN1+4T

N1=02H= N2=02H=

TT=14T*(2)*(2)+25T*(2)+4T

TT=110T

Mhz

.
2.-Calcular la duracin del programa, para un procesador 8085, que usa un cristal de 6 Mhz.

Label Mnemnico Comentario


DELAY: MVI B,0AH 7T
REP1: MVI C,47H 7T
REP2: DCR C 4T
JNZ REP2 7/10T
DCR B 4T
JZ FIN 7/10T
JNZ REP1 7/10T
FIN: HLT 4T

DELAY: MVI B,0AH 7T


REP1: MVI C,47H 7T
REP2: DCR C 4T
JNZ REP2 7/10T
DCR B 4T
JZ FIN 7/10T
JNZ REP1 7/10T
FIN: HLT 4T

DELAY: MVI B,0AH ; N1 7T


REP1:
X

DCR B 4T
JZ FIN 7/10T
JNZ REP1 7/10T
FIN: HLT 4T

7T

X X X *N1

4T 4T 4T *N1

7T 7T 10T *N1-1

10T 10T 4T *N1-1

Inicio Bucle Fin

TT= 7T+XN1+4TN1+(N1-1)7T+ 10T+(N1-1)10T+4T


REP1: MVI C,47H ; N2 7T
REP2: DCR C 4T X
JNZ REP2 7/10T

7T

4T 4T 4T *N2

10T 10T 7T *N2-1

Inicio Bucle Fin

X=7T+4TN2+10T(N2-1)+7T
Puesto que es el mismo ejercicio pero solo con los valores de N distintos se
procede a calcular N1,N2 como en el ejercicio anterior.

TT=14TN2N1+25TN1+4T

7 7
N1=0AH= 10 N2=47H=71
TT=14T*71*10+25T*10+4T
TT=10940T
TT 9 s
TT=0,0036 [s]
2.8.-Mtodo del Flujograma.
(1) Se procede a hacer un flujograma completo del programa
(2) Las rutinas se desglosan de tal forma que podamos hacer un recorrido mas simple del
programa.
(3) Habiendo hecho esto se procede a unificar en una ecuacin
El esquema debe representar correctamente el programa.

2.1-Calcular la duracin del programa, METODO FLUJOGRAMA.

Label Mnemnico Comentario


DELAY: MVI B,0AH 7T
REP1: MVI C,47H 7T
REP2: DCR C 4T
JNZ REP2 7/10T
DCR B 4T
JZ FIN 7/10T
JNZ REP1 7/10T
FIN: HLT 4T
No olvidar: N1 y N2 debern ser convertidos a decimal para calcular TT

Se recorre el programa sumando los tiempos T. Se multiplica por N cuando ingresa a un ciclo o N-1
si ha retornado en una direccin. Recordando que 7T/10T se refiere al tiempo que ocupa para
ejecutar un salto (10T) o para ejecutar la siguiente instruccin (7T).

Se simplifica el diagrama para recorrer las instrucciones con mayor simplicidad


TT= 7T+XN1+4TN1+(N1-1)7T+ 10T+(N1-1)10T+4T

X=7T+4TN2+10T(N2-1)+7T

TT=7T+XN1+4TN1+(N1-1)10T+7T+4T

TT=7T+(7T+4TN2+(N2-1)10T+7T)N1+4TN1+(N1-1)10T+7T+4T

TT =0,0036 [s]
3.-Se tiene un cristal de 6,1414Mhz determinar el tiempo de ejecucin del
programa.
Label Mnemnico Comentario

DELAY: MVI B,104 4T


LXI H,1000 10T
DEI: DCX H 4T
MOV A,B 4T

ORA H 4T
JZ FIN 7/10T
JNZ DEI 7/10T

FIN: HLT 4T

4T

10T

12T 12T 12T *N

7T 7T 10T *N-1

10T 10T 4T *N-1

Inicio Bucle Fin

TT= 4T + 10T + 12TN +7T(N-1) + 10T + 10T(N-1) + 4T

TT= TT=29NT-11T=(29N-11)T

. 7 7

N=1000

TT=(1000*29-1 5 s =9421,425 s

TT=0,00942
III PERIFERICOS, PUERTAS DE ENTRADA, PUERTAS DE
SALIDA, PROGRAMACION POR DIRECCIONAMIENTO

3.1.-puertas entrada y salida in- out

3.2.-interfaz

3.3.-led

3.4.-programando el control status y las puertas de salida del 8155.

3.5.- timer programable.

3.6.-programa con puertas

3.7-programa con entrada de interruptores


3.1.-PUERTAS ENTRADA Y SALIDA IN- OUT
El mircroprocesador no puede trabajar con todos los perifricos en forma simultnea. Para
por ello el dispositivo lgico TRISTATE discrimina mediante un cortocircuito de alta
impedancia.

C A X
0 0 1
0 1 0
1 X

Fig.-Tabla lgica del TRISTATE


Por medio del Bus de direccin seleccionamos alguna de las 256 puertas de entrada, si
deseamos leer o las 256 puertas de salida si deseamos escribir. El Bus de control se
encargara de sealar la operacin, RD, WR, o si trabajar en la memoria principal I0/M.

Operacin de lectura en la puerta de Operacin de escritura en la puerta de


entrada: salida:
Ejemplos ilustrativos
a) Perifrico de entrada
Se muestra una lectura en el PERIFERICO 1, esto implica que C1=0,
c2=1,c3=1,c4=1,c5=1,c6=1,c7=1. Para anular los perifricos simplemente se pone C=0,
activando una alta impedancia y crear un cortocircuito. El valor que toma X, no tiene
importancia porque su operacin esta anulada. El CPU solo lee al perifrico A1,

Ejemplo IN/OUT

IN 20H Acc (port 20)


OUT 4F Acc (port 4F)

2B Op.code D3 Op.code

20 Direc. 4F Direc.
b) Perifrico de entrada y salida.
Este esquema ilustra una lectura (RD), y una escritura (WR) en las puertas IN y
OUT. Debido a que el TRISTATE tiene un C=0 no hay alta impedancia y por
ende no existe un cortocircuito.

El problema de este diseo es que no se determina la direccin de las puertas,


solamente sealamos el tipo de operacin que se est realizando y el lugar
donde se lleva a cabo.
c) Perifrico de entrada con direccin de control simplificado
Aqu se ha aadido la direccin de control A A A A7 en la puerta logica

A7 A6 A5 A4 A3 A2 A1 A0 IN
0 0 0 0 0 0 0 1 0 1
0 0 0 0 0 0 1 0 0 2
0 0 0 0 0 1 0 0 0 4
0 0 0 0 1 0 0 0 0 8
0 0 0 1 0 0 0 0 1 0
0 0 1 0 0 0 0 0 2 0
0 1 0 0 0 0 0 0 4 0
1 0 0 0 0 0 0 0 8 0

d) Perifricos de entrada con otro tipo de lgica.

A7 A6 A5 A4 A3 A2 A1 A0 IN
1 1 1 1 1 1 1 0 F E
1 1 1 1 1 1 0 1 F D
1 1 1 1 1 0 1 1 F B
1 1 1 1 0 1 1 1 F 7
1 1 1 0 1 1 1 1 E F
1 1 0 1 1 1 1 1 D F
1 0 1 1 1 1 1 1 B F
0 1 1 1 1 1 1 1 7 F
e) Lgica de un selecctor.

Este ejemplo muestra que valores


tendr de salida el selector 74138, Seleccionador OUT
donde los valores A2,A1,A0 se irn
A2 A1 A0 I7 I6 I5 I4 I3 I2 I1 I0
incrementndo y generar una seal en
la puerta de salida correspondiente al 0 0 0 1 1 1 1 1 1 1 0
valor binario de dicho incremento. Asi
se tiene A2A1A0=000, gener una 0 0 1 1 1 1 1 1 1 0 1
seal en I0=0. A2A1A0=011
0 1 0 1 1 1 1 1 0 1 1
0 1 1 1 1 1 1 0 1 1 1
1 0 0 1 1 1 0 1 1 1 1
1 0 1 1 1 0 1 1 1 1 1
1 1 0 1 0 1 1 1 1 1 1
1 1 1 0 1 1 1 1 1 1 1
f) Lgica de un selector con direccin de control.
Se tiene un selector cuyo valor de A2A1A0=000, genera seal en I0=0 . xx=00.

A7 A6 A5 A4 A3 A2 A1 A0 I
1 1 1 x x 0 0 0 0
1 1 1 x x 0 0 1 1
1 1 1 x x 0 1 0 2
1 1 1 x x 0 1 1 3
1 1 1 x x 1 0 0 4
1 1 1 x x 1 0 1 5
1 1 1 x x 1 1 0 6
1 1 1 x x 1 1 1 7

Ejercicio 1.- Encontrar el correspondiente direccionamiento si se desea una seal de


lectura en la puerta I0.

Solucin: Como vemos en la figura, lo primero que realizaremos es asegurarnos es que la


seal en el TRI-STATE de alta impedancia sea 0, para eso dejamos I0=0 y el resto de las
puertas de salida I I I7 en 1, de esta forma realizamos un corto circuito por alta
impedancia en las otras puertas. Las seales de control A2=0,A1=0,A0=0, permitirn
seleccionar la puerta de salida I0. Los buses de control e =1 determinar que se
trata de una operacin de lectura en la puerta respectiva. Los valores A11,A12,A13,A14,A15
deberan ser 1, para que se genere una seal de 0 en .
Generamos el siguiente cuadro lgico

SALIDA Direccionamiento
I7 I6 I5 I4 I3 I2 I1 I0
A15 A14 A13 A12 A11 A10 A9 A8
1 1 1 1 1 1 1 0 IN
A7 A6 A5 A4 A3 A2 A1 A0
Nota: A A8 A A9A7 A 5
1 1 1 1 1 0 0 0 F8H

Ejercicio 2.- Se desea obtener una seal de salida en I5.


Para ello hacemos A2=1, A1=0, A0=1, 5 5 . Recordando que se considera
desde el bit ms significativo al bit menos significativo.

SALIDA
Direccionamiento
I7 I6 I5 I4 I3 I2 I1 I0
A15 A14 A13 A12 A11 A10 A9 A8
1 1 0 1 1 1 1 1
IN
A7 A6 A5 A4 A3 A2 A1 A0

0 0 1 0 1 1 0 1 2DH
Ejercicio 3.- Dado la siguiente direccin disear e implementar un circuito lgico.

A15 A14 A13 A12 A11 A10 A9 A8

A7 A6 A5 A4 A3 A2 A1 A0 IN
0 0 1 0 1 0 0 0 28H
0 0 1 0 1 0 0 1 29H
0 0 1 0 1 0 1 0 2
0 0 1 0 1 0 1 1 2B
0 0 1 0 1 1 0 0 2C
0 0 1 0 1 1 0 1 2D
0 0 1 0 1 1 1 0 2E
0 0 1 x 1 1 1 1 2F

Solucin.

Por medio de los direccionamientos podemos deducir el siguiente esquema:


3.2.-Interfaz
Un interfaz es un dispositivo electrnico que permite conectar, los perifricos con la CPU.

2.-Interfaz en paralelo.
Transferencia simultneas de 8 bits

Nota: La puerta C solo dispone de 6 bits, los otros restantes 2 bits son
considerado Dont Care.
3.-Interfaz en serie: Transferencia bit a bit
2.-Registro control C/S
Este registro ayuda a direccionar el control status, programando las funciones de las puertas
como entrada o salida, la operacin del timer y la Interrupcin.

Interfas 8155 [8 bits]

Timer Interrup. PC PB PA
Puerta C Puerta B Puerta A

00= Timer no opera 00= IN


01= Stop timer 0=IN 0=IN
01=Proceso
10= Stop timer
dilogo 1=OUT 1=OUT
despues de completar 1
cuesta 10=Proceso
11=STAR parte timer dilogo
11=OUT

2.2.1.- Puertas PA-PB-PC


Para programar las puertas de entrada y salidas del 8155, debemos saber que cuenta con 3
puertas, PA,PB,PC, los cuales asignaremos como entrada o salida, dependiendo del
programador. Si el valor de PA=0, entonces PA ser una puerta de entrada, en caso
contrario, ser una puerta de salida (PA=1). Lo mismo para PB. PC es una puerta especial ya
que considera otro estado, llamado Proceso de dilogo( PC=01,PC=10), si PC=00 sera una
puerta de entrada y si PC=11, ser una puerta de salida.

Ejemplo: PA=IN, PB=OUT, PC=IN

2.2.2.-Puerta Interrup
De momento vamos a considerar esta puerta Dont Care.

2.2.3.-Puerta Time
Esta puerta controla el tiempo y dependiendo del requerimiento se va configurar los valores
de cada estado lgico esta en recuadro de arriba.

3.-Programacin del TIMER


El interfaz posee un TIMER de 14 bits, que puede producir ondas cuadradas continuas,
pulsos continuo, una onda cuadrada y un pulso.

TH TL
4 9 C 4
0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0
Modo 14 bits
00= una onda cuadrada
01= onda cuadradas continuas
10= un pulso
11= pulsos continuo.
Ejercicio Dado el siguiente circuito implementar las direcciones del Ship Select, las puertas
PA,PB,PC, TH y TL, si se tiene la interface 8155 y una seal de salida en I3 del selector 74138.
Solucin:
Direccionamiento de las puertas del 8155 con el ship selector 74138

Direccionamiento en I3 [8 bits]

74138 8155

A7 A6 A5 A4 A3 A2 A1 A0 Direcc.
0 1 0 1 1 0 0 0 58H CS (Control
status)
0 1 0 1 1 0 0 1 59H PA (Puerta A)
0 1 0 1 1 0 1 0 5AH PB (Puerta B)
0 1 0 1 1 0 1 1 5BH PC (Puerta C)
0 1 0 1 1 1 0 0 5CH TL
0 1 0 1 1 1 0 1 5DH TH
Direccionamiento en I5

74138 8155

A7 A6 A5 A4 A3 A2 A1 A0 Direcc.
0 1 1 0 1 0 0 0 68H CS (Contro Status)
0 1 1 0 1 0 0 1 69H PA (Puerta A)
0 1 1 0 1 0 1 0 6AH PB (Puerta B)
0 1 1 0 1 0 1 1 6BH PC (Puerta C)
0 1 1 0 1 1 0 0 6CH TL
0 1 1 0 1 1 0 1 6DH TH
3.3.-Perifricos
3.3.1.-LED
Un led (LIGHT EMITER DIODE) es un un cuerpo semiconductor de gran resistencia que al
recibir una corriente elctrica de muy baja intensidad, emite luz de forma eficiente y con alto
rendimiento.

Anodo Catodo

En un circuito lgico los estados de encendido del led depender si hay un flujo de
corriente en polarizacin directa, en caso contrario estar apagado. De all que se
enciende un led cuando hay un cero lgico en el Ctodo y un 1 lgico en el nodo.

Ejemplo. Se tiene un set de 7 leds conectados a una seal de entrada. Si el estado lgico de
encendido (ON) es FOH, el esquema es el siguiente:

D7 D6 D5 D4 D3 D2 D1 D0
1 1 1 1 0 0 0 0

3.1.-Display de 7 segmentos
ANODO COMUN: Los leds se encienden con 0.
CATODO COMUN: Los leds se encienden con 1.

Tabla GENERAL Ctodo comn Tabla del simulador SIM 8085 Ctodo comn
Display Valor hexadecimal Xgfe dcba Display Valor hexadecimal Xcde gbaf
0 3FH 0011 1111 0 77H 0111 0111
1 06H 0000 0110 1 44H 0100 0100
2 5BH 0101 1011 2 3EH 0011 1100
3 6EH 0110 1110 3 6EH 0110 1110
4 66H 0110 0110 4 4DH 0100 1101
5 6DH 0110 1101 5 6BH 0101 1011
6 5FH 0101 1111 6 7BH 0111 1011
7 07H 0000 1111 7 46H 0 100 0110
8 7FH 0111 1111 8 7FH 0111 1111
9 6FH 0110 1111 9 6FH 0110 1111
a) Ejercicio con CONTROL STATUS

Programando el CONTROL STATUS y las puertas de salida del 8155.


Si deseamos que la puertas del 8155 tengan la siguiente caracterstica
PA=OUT , PB=OUT y PC=IN entrada.
Asignamos los valores:

REGISTRO CONTROL

Si X=0 PC PB PA

X X X X 0 0 1 1 03H

Programa:
MVI A, 03H
OUT 58H
Lo que realiza este pequeo programa es mover al acumulador el valor lgico
de las puertas PA, PB,PC (03H) para controlar las puertas del 8155. Se le
asigna 58H al Control Status (C/S), lgica ingresada por el direccionamiento del
uP74138 y el uP8155. De momentos hemos considerado el Time y el Interr.
como Dont care (X=0)
Direccionamiento de las puertas del 8155 con el ship selector 74138 en I3 [8 bits]

74138 8155

A7 A6 A5 A4 A3 A2 A1 A0 Direcc.
0 1 0 1 1 0 0 0 58H C/S (Control
Status)
0 1 0 1 1 0 0 1 59H PA (Puerta A)
0 1 0 1 1 0 1 0 5AH PB (Puerta B)
0 1 0 1 1 0 1 1 5BH PC (Puerta C)
0 1 0 1 1 1 0 0 5CH TL
0 1 0 1 1 1 0 1 5DH TH

;--------------------------------------------------------------

; Programa que direcciona las puertas del Interfaz PA,PB,PC

;-------------------------------------------------------------

INICIO: MVI A,03H ;Designa los valores de la puerta


time/intrr/PC/PB/PA=0000 0011

OUT 58H ;C/S Control Status designado por


los direccionamientos del
; 8155 y el 74138
XX :IN 5BH ;Lee en la puerta C el contenido y
lo enva al Acc (ver tabla arriba)
ANI 01H ; Aisla el bit menos significativo
JNZ XX
MVI A,00H
OUT 59H ; Escribe el contenido de la puerta
A, el valor contenido en el Acc
JMP INICIO
MVI A,FF
OUT 5A ;Escribe el contenido de la puerta
B, el valor del Acc=FF
b) Ejercicio con TIMER PROGRAMABLE.

El microprocesador posee un TIMER de 14 bits, que puede programar. Ademas


posee un selector de tipo de onda.

TH TL
4 9 C 4
0 1 0 0 1 0 0 1 1 1 0 0 0 1 0 0
Modo 14 bits

Modo :
2500 : 2

0 0 Solo una onda cuadrada 1250 0


625 0
0 1 Ondas cuadradas
312 1
continuas
156 0
1 0 Un solo pulso 78 0
39 0
1 1 Pulsos continuos
19 1
Ejemplo: Se tiene una onda de pulso continua y una frecuencia 9 1
de entrada y de salida : 4 1

5 2 0
1 0
1
Calcular el TH y el TL

Solucion: Se calcula N

5
5

El valor de N es un valor decimal y debe convertirse en hexadecimal

5 9 ( 5 5
El valor 9C4H se enva al Timer programable.

TIMER
TH TL
4 9 C 4
0 1 0 0 1 0 0 1 1 1 0 0 0 1 0 0
Modo 14 bits

Programa

MVI A, C4H ; Asigna el valor 49C4H a TH/TL

OUT TL

MVI A, 49H

OUT TH
;----------------------------------------------------------------------
; programa con puertas
;---------------------------------------------------------------------

MVI A,03H ; Direccionamiento de las puertas Time,Intrr,PC,PB,PA, = 0000 0011


OUT C/S ; C/S=58H Valor del direccionamiento de uP8081 y la interfaz.
; El timer no opera.
;-------------
MVI A,C4H ;Es el valor del TIMER =49C4H, asignado al interfaz por N=fin/fout
OUT TL ; TL=5CH
MVI A,49H
OUT TH ; TH=5DH
;-------------
MVI C3H ; Time,Intrr,PC,PB,PA=1100 0011
OUT C/S ;
;

Direccionamiento de las puertas del 8155 con el ship selector 74138 en I3 [8 bits]

74138 8155

A7 A6 A5 A4 A3 A2 A1 A0 Direcc.
0 1 0 1 1 0 0 0 58H C/S (Control Status)

0 1 0 1 1 0 0 1 59H PA (Puerta A)

0 1 0 1 1 0 1 0 5AH PB (Puerta B)

0 1 0 1 1 0 1 1 5BH PC (Puerta C)

0 1 0 1 1 1 0 0 5CH TL

0 1 0 1 1 1 0 1 5DH TH
3.3.1.1.-Mi primer display
Vamos a copiar el siguiente programa en el editor ASM, compilar y seleccionar el display de
7 segmentos y ejecutamos el programa ejecutamos en RUN>>:
;-------------------------------------------------------------------------
; Programa mi primer display de 7 segmentos
;-------------------------------------------------------------------------
.ORG 0
MVI A, 77H
OUT 00H

HLT

;Ensamblado correctamente PTRRZA

;-----------------------------------------------------------------------------
; Programa mi primer display de 7 segmentos de 0 a 9 con retardo (DELAY)
;-----------------------------------------------------------------------------

.DATA 1000H
DB 77H,44H,3EH,6EH,4DH,6BH,7BH,46H,7FH,6FH ;Definimos los nmeros de 0-9
.ORG 0

INICIO: MVI D,0H ;Es nuestro contador


LXI H,1000H

XX: CALL MOSTRAR ; LLAMA SUBRUTINA


CALL DELAY

OTRO: INR D
CALL MOSTRAR
CALL DELAY
MOV A,D
CPI 9
JNZ 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
;Ensamblado correctamente PTRRZA
Ejercicio Final
Se desea disear un programa para el microcomputador 8085 de la figura, que permita
leer un teclado numerico del 0 al 9, y 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 serie de onda cuadradas 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.
Solucin:
Se cuenta con el Up 8085, selector 74138, el interfaz 8155 y los perifricos, teclado,
display de 7 segmentos y un LED.

Antes programar debemos direccionar las puertas, definir el registro de control y


programar el timer. Para ello realizaremos los cuadros pasos :

1.- Direccionamiento.

2.- Registro control

3.- Timer

4.-Perifricos : Display de 7 segmentos - Teclado

5.-Programacin
1.-Direccionamiento
Permite direccionar el C/S,PA,PB,PC,TH, TL. Requieres del selector 74138 y la interfaz
8155.

El selector genera una seal en I3 con A6A5A7=011=3, y para se activen los ENABLES
requiere que de all que A4,A3=10. La seal del selector llega al
Chip Select del interfaz el que contiene los valores A2A1A0=XXX, que irn
incrementndose en forma binaria. Todos estos valores se trasladarn a una tabla, que nos
dar las direcciones de las puertas segn sea las condiciones iniciales. Es importante para
programar.

Direccionamiento de las puertas del 8155 con el ship selector 74138


en I3 [8 bits]

74138 8155

A7 A6 A5 A4 A3 A2 A1 A0 Direcc.
1 0 1 1 0 0 0 0 B0H C/S (Control Status)

1 0 1 1 0 0 0 1 B1H PA (Puerta A)
1 0 1 1 0 0 1 0 B2H PB (Puerta B)
1 0 1 1 0 0 1 1 B3H PC (Puerta C)
1 0 1 1 0 1 0 0 B4H TL
1 0 1 1 0 1 0 1 B5H TH

NOTA: El orden de las puertas mantenerlas como en el cuadro: C/S,PA,PB,PC,TL,TH.

No confundir Ship Select con el Contro Status


2.-Registro control
Este registro permite controlar las puertas de la interfaz PA,PB,PC, el INTERR y el TIME. Los
valores que asignaremos a las puertas sern de acuerdo al esquema.

PA=OUT=1, PB=IN=0, PC=OUT=11, INTERR=XX, TIMER=00 (no opera) y TIMER=11


para partir o START. Ingresamos los valores en la tabla

REGISTRO CONTROL

TIMER INTERR. PC PB PA

0 0 0 0 1 1 0 1 0DH

1 1 0 0 1 1 0 1 CDH
3.-Programacin del TIMER
Se define conforme a los requerimientos del problema, para ello se requiere saber cul es la
frecuencia del cristal, y cuanto nos pide generar.

Datos
614: 2
307 0

7 153 1
76 1 6
38 0
19 0
9 1
7
5 4 1 6
2 0

;___________PROGRAMACION TIMER________ 1 0
0 1
MVI A,66H
x 2
OUT TIMER_L
x
MVI A,42H

OUT TIMER_H

;____________________________________________

TIMER
TH TL
4 2 6 6
0 1 0 0 0 0 1 0 0 1 1 0 0 1 1 0
Modo 14 bits
*NOTA: Cuando se sobrepasa la capacidad de 14 bits es necesario otro TIMER

4.- Perifericos
4.1.-Display de 7 segmentos
ANODO COMUN: Los leds se encienden con 0.
CATODO COMUN: Los leds se encienden con 1.

Tabla del simulador SIM 8085 Ctodo


comn
Display Valor hexadecimal Xcde gbaf
0 77H 0111 0111
1 44H 0100 0100
2 3EH 0011 1100
3 6EH 0110 1110
4 4DH 0100 1101
5 6BH 0101 1011
6 7BH 0111 1011
7 46H 0100 0110
8 7FH 0111 1111
9 6FH 0110 1111

Ctodo comn 1 ON / nodo comn 0 ON


RESUMEN TABLA ANSII
4.2-TECLADO
Teclado ANSII Teclado ANSII
Para leer el teclado es necesario identificar el
cdigo que genera al presionar el teclado
numrico. Para ello recurrimos a la tabla de 0 30H 5 35H
cdigo ANSII.(5=35H).
1 31H 6 36H

2 32 7 37H
0 1 2

3 4 5 3 33H 8 38H

6 7 8 4 34H 9 39H
9
Tabla completa cdigo ANSII
5.- Programa Ejercicio Final
;PROGRAMA QUE LEE UN TECLADO Y GENERA UN PULSO CON LA TECLA 5
.data 1030
db C0H, F9H, A4H, B0H, 99H, 92H, 83H, F8H, 80H,98H
.define
CS B0H
TECLADO B1H
DISPLAY B2H
LED B3H
TIMERL B4H
TIMERH B5H
;_____________________
; INICIO PROGRAMA
.org 0
LXI SP,3000H ;Inicializamos el STACK
LXI H,1000H ;Nos posicionamos en la direccin
;____________________
;PROGRAMA TIMER
MVI A,0DH
OUT CS
MVI A,66H
OUT TIMERL
MVI A,42H
OUT TIMERH
;______________________
;LEER TECLADO
INICIO : IN TECLADO
MOV L,A
MOV A,M
OUT DISPLAY
MVI A,01
OUT LED
; ________________________
CALL Delay
MVI A,00H
OUT LED
;________________________ ;si se presiona la tecla 5=35H ESTE salta a la
MVI A,35H ;subrutina TIMER
CMP L
JZ TIMER
JMP INICIO
;________________________
TIMER: MVI A, CDH ;aqui se inicia un ciclo reloj de ondas cuadradas continuas
OUT CS ;se modifica CS
JMP INICIO
Delay: mvi C,00H
XX: DCR C
JNZ XX
RET
;____FIN PROGRAMA_____________
;Ensamblado correctamente EIEE
Nota del autor: El simulador no cuenta con un interfaz real por lo que el ejercicio anterior no se
podr verificar y slo ser posible realizarlo en el laboratorio, sin embargo los resultados tericos
no tendran que variar mucho con los reales.

5.1.-Mi primer programa con IN/OUT.

;---------------------------------------------------------------------------
;Programa que presionando 0 se muestra en el display de 7 segmentos
;---------------------------------------------------------------------------
.org 0
mvi b,00h
mov a,b ;inicializo
inicio:in 00h ;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 (out) es 77h para el display de 7 segmentos es 0
out 00h ; este valor es llevado a la puera

hlt ;Ensamblado correctamente EIEE

;---------------------------------------------------------------------------
;Programa que presionando 7 se muestra en el display de 7
;---------------------------------------------------------------------------
.org 0
mvi b, 00h
mov a,b ;inicializo
inicio: in 00h ;ingreso por teclado un numero
cpi 37h ;en ansi ii es 7 (ver tabla ANSI)
jnz inicio ; si es cero el contenido podremos salir del ciclo
mvi a,46h ; el valor que sale (out) es 46h=7b
out 00h ; este valor es llevado a la puerta
hlt ;Ensamblado correctamente EIEE

VER Tabla del simulador SIM 8085 Ctodo comn.


Anexamente quiero mostrarles un error importante cuando program los perifricos y direcciones
del interfaz.

;Este programa nos muestra un error del programador

.org 0

.Data 1000h
db 10h, f9h
.define
TECLADO 01H

LXI SP, 3000H ;Inicializamos el STACK


LXI H,1000H ;Nos posicionamos en la direccin
MVI A,0AH
OUT TECLADO
HLT

; error declaramos el origen antes de define!!!

.Data 1000h
db 10h, f9h
.define
TECLADO 01H

.org 0 ;declaramos el origen despus de define


LXI SP, 3000H ;Inicializamos el STACK
LXI H,1000H ;Nos posicionamos en la direccin
MVI A,0AH
OUT TECLADO
HLT
;Ensamblado correctamente EIEE
VI PROGRACION EN EL STACK SUBRUTINAS E
INTERRUPCIONES

6.1 PROGRACION EN EL STACK


La memoria de pila se puede describir como un conjunto de posiciones de memoria en
la memoria R/W que se utilizan para almacenar informacin binaria temporalmente durante
la ejecucin de un programa. La memoria de pila es utilizada tanto por P como por el
programador. Siempre que P se encuentre con cualquier interrupcin o subrutina la
secuencia de ejecucin del programa se altera, en tal situacin P coloca automticamente la
direccin de la ubicacin de memoria presente en el contador de programa en la pila y
despus de ejecutar la interrupcin o la subrutina el P devuelve al programa original
comprobando la direccin presente en la pila.

Del mismo modo, el contenido del registro puede ser almacenado en la pila y recuperado
por el programador. Durante la ejecucin de un programa a veces es necesario guardar el
contenido de ciertos registros y datos en la memoria para que los registros puedan ser
utilizados para otras operaciones. Despus de completar estas operaciones, los contenidos
guardados en la memoria se pueden transferir de nuevo a los registros. Las localizaciones de
la memoria para este propsito son reservadas por el programador en el principio.

El puntero de la pila se inicializa siempre al principio del programa utilizando la instruccin LXI
SP,dir. Esta instruccin carga el registro del puntero de pila con la direccin de memoria de 16 bits.
Cualquier rea de la memoria RAM se puede utilizar como pila pero para evitar que el programa sea
destruido por la informacin de la pila, es una prctica general que el comienzo de la pila se
encuentre en la ubicacin de memoria disponible ms alta (FFFFH). La memoria de la pila se basa en
el principio del ltimo en entrar es lo primero (LIFO). La entrada de datos en la pila se denomina
operacin 'PUSH' y la recuperacin de datos de la pila se denomina operacin 'POP'. El puntero de
pila siempre tiene la direccin de la pila superior.

LXI SP, 3075H ; Carga el registro de apuntador de pila (16 bits) con 3075H.

LXI D, 3075H ; Esta instruccin carga el registro D con 30H y el registro E con 75H.
;De manera similar, si escribimos:
6.1.1 INSTRUCCIN PUSH Rp

Empuja el par de registros en la pila: Es una instruccin de 1 byte que se usa para
copiar el contenido del par de registros en la pila. la direccin de ubicacin de memoria
presente en el registro del puntero de pila se decrementa 2 veces.

Ejemplo. Supongamos que el apuntador de pila contiene la direccin de memoria 2058H, el


registro D contiene 5AH y el registro E contiene 63H, es decir DE=5A63H la instruccin:

PUSH D
Ejecutan los siguientes pasos:

a) El puntero de la pila (SP) se decrementa en uno, es decir (SP-1), que aqu pasa a ser
2057H. El contenido del registro D (registro de orden alto), es decir, 5AH, se copian en
la posicin de memoria 2057H (MSP-1)
b) El puntero de la pila es nuevamente decrementado por uno, es decir (SP-1), que ahora se
convierte en 2056H. El contenido del registro E (registro de orden inferior) se copia en
el nuevo valor de la posicin de memoria 63H.

Antes de PUSH
Despues de PUSH

Puntero
Puntero
Stack
Stack
2058H
2056
Registro D Registro E
Registro D Registro E
5AH 63H
5AH 63H

DIRECCION SP MEMORIA
DIRECCION SP MEMORIA
2055 0
2055 0

2056 0
PC->2056 63H

2057 0
2057 5AH

PC->2058 0
2058 0

6.1.2.- INSTRUCCIN POP Rp

Es una instruccin de 1 byte que se usa para copiar el contenido de la memoria de la


pila al par de registros de la direccin de ubicacin de memoria presente en el PC, el registro
del puntero de pila se incrementa 2 veces cada vez que se ejecute esta instruccin.

Ejemplo Supongamos que el puntero de pila contiene la direccin del ejemplo anterior
2056H y contiene 63H. La posicin de memoria 2057H contiene 5AH y luego utilizando POP
D se ejecutan los pasos siguientes:

La instruccin: POP D
a) El contenido de la posicin de memoria 2056H, se transfiere 63H al registro E, y el
puntero de la pila se incrementa en uno para (SP + 1), es decir, 2057H
b) El contenido de la posicin de memoria 2057H, se transfiere 5AH al registro D y
ahora el contenido del par de registros BC =5A63H.
* El puntero de pila se incrementa de nuevo para obtener un nuevo valor (SP + 1), es decir,
2058H recuperando as los valores originales del registro par DE.
Antes de POP Despues de POP

Puntero Puntero
Stack Stack
2056 2058
Registro Registro C Registro B Registro C
X X 5AH 63H

DIRECCION SP MEMORIA DIRECCION SP MEMORIA


2055 0 2055 0

PC->2056 63H 2056 63H

2057 5AH 2057 5AH

2058 0 PC-> 2058 0

6.4.1 Resumen
Cada vez que usamos las instruccion PUSH debemos considerar el orden con su
respectivo POP, ya que estamos programando sobre una pila tipo LIFO en el STACK, es decir
lo ultimo que ingresamos es lo primero que colocamos.

;Programa del ejemplo anterior que borra y recupera su informacin


.org 1000H
LXI SP,2058 ; Ubicamos PC en la direccin del STACK POINTER
LXI D, 5A63H ; Inicializamos los valores del registro par DE
PUSH D ; Transferimos D=5AH en la direccin del STACK 2057
; Transferimos E= 63H en la direccin del STACK 2056
;modificamos el registro par con el valor DE=FFFFH
MVI D,FFH
MVI E,FFH

;recuperamos los datos del STACK


POP D ;El contenido de la direccin 2056 es transferido a E
;se incrementa el STACK
;El contenido de la direccin 2057 es transferido a D -> DE=5A63H
;Se incrementa el STACK quedando en la direccin 2058
HLT
;Ensamblado correctamente EIEE
Resumen: Cada PUSH viene asociado con un POP, y debe programarse en base a una pila tipo
LIFO.

PUSH PSW DIRECCION STACK


PUSH H SP-6 FFF9 (C)
PUSH B
FFFA (B)
.
. SP-4 FFFB (L)
POP B FFFC (H)
POP H SP-2 FFFD Flags
POP PSW SP FFFE (A)
. PC FFFF
.

*Nota del autor: No puedes colocar PUSH C, PUSH L o PUSH E ! ya que estamos trabajando
sobre los registros pares : HL, BC, DE, PSW.

No programar sin un orden LIFO ya que trabajanos en una pila.

EJ: Error Orden LIFO (correcto)

PUSH B PUSH B

PUSH H PUSH H

POP B POP H

POP H POP B

.
6.2.-PROGRAMACIN CON SUBRUTINAS
6.2.1.- INTRUCCION CALL dir

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.

EJEMPLOS

;Programa que llama a una subrutina sin usar el Stack Pointer (SP)
;y sufre perdidas de los valores en los registros originales
.ORG 0
MVI H,0AH
MVI L,10H
MVI C,0AH
CALL SUBRUTINA
XX: DCR C
JNZ XX
HLT ;Se pierde el valor original HL=0A10 con HL=00FF

SUBRUTINA:
MVI H,00H
MVI L,FFH
RET
;Ensamblado correctamente EIEE
;Para corregir este error ocuparemos el STACK y las instrucciones
PUSH y POP.
;Programa que guarda datos en el SP

.ORG 1000H ; Nos posicionamos con PC en la direccin 1000H


LXI SP,FFFFH ;Direccionamos el SP en la mas alta direccin
MVI H,0AH ;Inicializamos los valores con HL=0A10H
MVI L,10H
MVI C,0AH ;Inicializamos el counter

PUSH H ;PUSH guarda en el Stack el valor HL=0A10H


CALL SUBRUTINA ;En la subrutina HL=00FF y se pierde el valor original
POP H ;POP restaura el valor ORIGINAL HL=0A10H

XX :DCR C ;Programa principal del contador


JNZ XX
HLT

SUBRUTINA:
MVI H,00H ;valor
MVI L,FFH
RET ;retorna al programa principal

;Ensamblado correctamente EIEE

Conclusin PUSH: Salva los registros en el Stacks.


6.3.-Interrupciones
Una interrupcin puede ser definida como cualquier seal al P que altera la normal
secuencia de ejecucin de un programa. La interrupcin puede introducirse en el P a travs
de una instruccin escrita en el programa o incluso puede iniciarse mediante un dispositivo
externo. Siempre que el P recibe cualquier interrupcin su control se cambia a otra
ubicacin para ejecutar un conjunto de instrucciones llamadas rutinas de servicio que estn
escritas en esa ubicacin. El P reanuda su funcionamiento despus de completar la rutina
de servicio. La interrupcin en 8085 es controlado por el flip-flop Interrupt Enable, que es
interno al procesador y se puede configurar o restablecer mediante el uso de instrucciones
de software. Existen dos tipos de interrupciones:

A) Interrupciones de software

B) Interrupciones de hardware

6.3.1 Interrupciones de software

El conjunto de instrucciones de 8085 incluye ocho instrucciones de RST (reinicio)


denominadas interrupciones de software. Estas son instrucciones de un byte. Cada una de
estas instrucciones permite transferir la ejecucin del programa a una ubicacin especfica
en 00H. Por lo tanto, las instrucciones RST actan como un vector que apunta hacia
diferentes posiciones de memoria.

6.3.2 Interrupciones de hardware

Hay cinco interrupciones de hardware en 8085. Son:

Tabla direccin de llamadas a INTERRUPTS


Orden de prioridad Interrupts Call locations
1 TRAP 0024H
2 RST 7.5 003CH
3 RST 6.5 0034H Mascara individual
4 RST 5.5 002CH Mascara individual
5 INTR Non-vectored interrupt

Las interrupciones tambin se clasifican como:

a) Interrupciones vectorizadas: Las interrupciones vectorizadas son las que tienen


algunas ubicaciones de memoria especficas y el control se transfiere automticamente a
la ubicacin de memoria respectiva sin ningn hardware externo.

El ejemplo de interrupcin vectorizada es RST5.5, RST6.5, RST7.5 y TRAP.


b) Interrupciones no vectorizadas: Las interrupciones no vectorizadas son aquellas en
las que el usuario tiene que especificar la direccin junto con la interrupcin en la que se
va a transferir el control. El ejemplo de la interrupcin no vectorizada es INTR.

c) Interrupciones enmascaradas: Las interrupciones mascarables son las que P no


necesitan asistir inmediatamente y en lugar de ello el P puede pedirle que espere un
tiempo. El ejemplo de interrupcin enmascarable es RST5.5, RST6.5, RST7.5 e INTR.

d) Interrupciones no enmascaradas: Tambin se conoce como NMI. Es la interrupcin


que P tiene que asistir como y cuando viene, es decir, no se puede ignorar o pide que
espere. Ejemplo de interrupcin no enmascarable es TRAP.

a) EI- Enable interrupt


b) DI- Disable interrupt
c) SIM- Set Interrupt Mask
d) RIM- Read interrupt Mask
e)MSE-Mask Set Enable: Permite poner mascaras.|
6.4.-INTERRUP INTR

Esta interrupcin no es possible vectoriazarlas, debido a que possee 8 direcciones dentro del
hardware.

SID I7 I6 I5 IE
.
.
.

Serial If bit=1 Flip- If anyone of the three bits


Imput Then the interrupt are Flop is (D0,D1 and D2)=1 then it
Data pending set implies that the respective
interrupt is masked.
More than one interrupts can
also be masked
6.5.-SET INTERRUPT MASK SIM
Caractersticas del Set Interrupt Mask

Para poder acceder a las diferentes interrupciones debemos llamar a las instrucciones:
MVI Acc, dir, SIM (set Interrup Mask) y EI (Enable Interrup).

mvi Acc,dir ;dir puede activar las interrupciones /M7.5 /M6.5 /M5.5

sim ;Habilita las mscaras

ei ;Habilita las interrupciones

di ;Deshabilita las interrupciones

D7 D6 D5 D4 D3 D2 D1 D0

SOD SDE XXX RST 7.5 MSE


.
.
. SIM

0 0 0 1 1 0 0 0 18H

0 0 0 1 1 0 1 1 1BH

0 0 0 0 1 1 0 1 0DH

0 0 0 0 1 1 1 0 0EH

Vectorizable RST5.5, RST6.5, RST7.5 TRAP.

Enmascarable RST5.5, RST6.5, RST7.5 INTR.


SIM Operation Enable

SOD Serial Output data 1

SDE Serial data Enable if D6=1 Then serial output is enable 1

XXX Dont care 0/1

Reset RST 7.5 If D4=1 Additional control to reset RST7.5

MSE: Mask Set Enable If D3=1 then D0, D1 and D2 are enable 1

D2 0 RST7.5 is enabled / 1 RST7.5 is disabled 0

D1 0 RST6.5 is enabled / 1 RST6.5 is disabled 0

D0 0 RST5.5 is enabled / 1 RST5.5 is disabled 0

RST 7.5, RST 6.5, RST 5.5: All the three interrupts are vectored and maskable interrupts. In
order to enable these interrupts the P requires two instructions:

a) EI (Enable Interrupt)
b) SIM (Set Interrupt Mask)

Besides these three interrupts are sensitive to different types of triggering as explained
below:

RST 5.5 and RST 6.5: These are level sensitive interrupts which implies that the
triggering level should be on until the P completes the execution of current instruction. If
the P is not able to respond immediately to these interrupts then they should be stored by
external hardware.

RST 7.5: It is positive-edge sensitive and can be triggered with a short pulse. In this
case if the P is unable to respond immediately then the request is stored internally by D-
flip-flop.
TRAP: It is vectored, non-maskable interrupt. It is level-and edge-sensitive, which
implies that the input should go high and remain in that state until it is acknowledged by the
P. In case of TRAP the instructions like EI (Enable interrupt), DI (Disable interrupt) and
SIM (Set Interrupt Mask) are not required i.e. it need not be enabled, and it cannot be
disabled. The triggering of various interrupts can be
summarized in the form of diagram as shown below:

;------------------------------------------------------------------------
; Programa de retardo con interrupcion /M 7.5
;-----------------------------------------------------------------------

.org 0
jmp 40h ;Direccin del programa principal

.org 3ch ;Direccin designada internamente para /M 7.5 (ver tabla)


jmp 100h ;Por poco espacio se efectua un salto a esta direccin

.org 40h ;Direccin del programa principal


lxi sp,FFFFh

mvi a,0Bh; Enmascaramos sin resetear RST F/F /M75 = 0000 1011
;Para explicar en trminos visuales esta interrupcin
sim
ei ;De momento habilitaremos las interrupciones
mvi a,F0H ;Corresponde al contenido del programa principal
x1: out 0
call delay
rlc
jmp x1

delay: mvi c,FFh


x2: dcr c
jnz x2
ret

.org 100h
push psw
push b
mvi b,88h ; vamos a a rotar 10 veces los 8 bits
mvi a,80h ; El valor a rotar sera A= 1000 0000

x3: out 01
call delay ;Para poder visualizar se llama a un retardo
rrc ;Rotamos a derecha para diferenciarnos del programa
principal
dcr b ;
jnz x3
pop b
pop psw
ei
ret

;Ensamblado correctamente PTRRZA


Fig.- Programa se ejecuta y enciende y rota los leds en la puerta 00H.

Fig.-Se activa la Interrupcin en 7.5 y un led se encienden y rota en 01H.

Una interrupcin bsicamente es un programa que interrumpe una instruccin


dejndola en proceso (PAUSA). Una vez realizado esta operacin, regresa al programa
principal para que siga efectuando su operacin.

Nota: Se debe tener cuidado con las direcciones de retorno y salto, para no sobrescribir
las direcciones de las interrupciones. Sera nefasto perderse en el programa y por ende
debemos tener cuidado de usar las instruccin RET cuando sea necesario. Como se trabaja
con datos dentro de una pila, muchas veces es necesario almacenarlos en el STACK, y por
ello se usa las instrucciones PUSH y POP.
7.-Conclusiones finales.

He querido dejar este material a disposicion a cualquier alumno que desee aprender
sobre programacin en lenguaje assembler. Espero haber sido de algn aporte en el camino
de la enseanza, he rescatado ejemplos de mis compaeros de curso, notas del profesor, la
WEB, y ejercicios propios. He corregido y compilado los ejercicios para que puedan ser mas
fcil copiar y pegar en el simulador cada programa paso a paso.

Les deseo lo mejor de los xitos.


ANEXO

NumeRos Decimales, Binarios y Hexadecimal.

Dec Bin Hex

0 0000 0

1 0001 1

2 0010 2

3 0011 3

4 0100 4

5 0101 5

6 0110 6

7 0111 7

8 1000 8

9 1001 9

10 1010 A

11 1011 B

12 1100 C

13 1101 D

14 1110 E

15 1111 F