Documente Academic
Documente Profesional
Documente Cultură
ED 17
AUTOR:
PAUL TERRAZAS L.
ARICA-CHILE
2016
INTRODUCCION
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.
He creado un libro, llamado apuntes del microprocesador el que uso como base para
esta nueva edicin.
I ARQUITECTURA DEL MICROPROCESADOR
1.-El computador
4.-Tri-state
5.- Bit
1. EL 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.
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.
-Bus de datos
-Bus de direcciones
-Bus de control
2.-Arquitectura Von Newmann
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.
2.1.3-Unidad de control
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.
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).
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:
2.4.2.-Bus de direcciones:
3.2.1-Registros de direccionamiento.
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:
Z: (Cero)
Ejemplo: Ejemplo:
P: (Paridad )
Ejemplo: Ejemplo:
1 []
X: Dont care
CY: (Carry)
(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.
WR=0 )
Ejercicios resueltos
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.
Recapitulando
A : Acumulador
F : Flags
B,C,D,E,H,L: Registros generales
PC : Program Counter
SP : Stack Pointer
HL : Apuntador datos de memoria.
2.2.-Set op.code
2.3.-Tamao de instrucciones
4 CPI 24 XRI 44 CC 64 IN
18 SUB 38 JZ 58 RP
20 SBI 40 JM 60 RPO
Fuente: https://es.scribd.com/document/337573426/SET-de-Instrucciones-Del-8085
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
Acumulador
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
..
Posicin de memoria
MVI M, dato
Cargar en la posicin de memoria contenida por el registro H-L un dato inmediato
MVI M, 2AH
carga en la posicin de memoria 3344H (direccin aportada por los registros H y L) el valor
2AH.
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
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
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
Z 0 1 0
Cy 0 0 1
El primer operando debe especificar el par de registros a ser cargados, pueden ser los pares
BC, DE, HL, o el SP.
LXI B, 00FFH
STAX B
Posicin de memoria
STA es una instruccin de bytes; STA DIR almacena una copia del contenido actual del
acumulador en la posicin de memoria especificada por DIR.
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.
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.
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.
DCR A
DCX H
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
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.
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
Ahora los bits de paridad, acarreo y acarreo auxiliar se quedan a uno y el resto a cero.
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
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
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
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.
A B F
0 0 0
0 1 0
1 0 0
1 1 1
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
(1).MVI A, A0H
(2).ANI 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.
A B F
0 0 0
0 1 1
1 0 1
1 1 0
Acumulador 3AH: 0 0 1 1 1 0 1 0
Registro B 6CH: 0 1 1 0 1 1 0 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
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.
(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.
; Bit de acarreo = 1
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.
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
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:
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.
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.
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.
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.
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.
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.
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.
Antes de PUSH
Despues de PUSH
Puntero Puntero
Stack Stack
2030 2030
Registro B Registro C Registro B Registro C
3F 16 3F 16
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
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:
16 2028 16 2028
3F 2029 3f 2029
00 2030 00 2030
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
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
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
CC 40B4 CC 40B4
DD 40B5 DD 40B5
00 40B6 00 40B6
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:
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.
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.
Posicin de memoria .
.
.
55 dato
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.
https://www.4shared.com/rar/ZvqlPSQPba/8085.html
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.
.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.
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
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
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.
.data 2000H
dB 01h,00h,01h,01h, 01h,00h,01h,00h,01h,00h
.ORG 0
;-----------------------------------------------------------------------------
; 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
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
;----------------------------------------------------------------------------
; RECORRIDO DEL DATO EN LA DIRECCION HL
;----------------------------------------------------------------------------
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.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):
7T
4T 4T 4T *N
4T
TT=8T+14TN
TT=8T+14*3*T
TT=8T+42T R: TT=50T
2.7.- Metodo de Columnas (DETALLES).
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
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.
--------------------------------------------------------------------------------------------------
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
7T
4T 4T 4T *N2
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.
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
7T
4T 4T 4T *N2
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.
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).
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
ORA H 4T
JZ FIN 7/10T
JNZ DEI 7/10T
FIN: HLT 4T
4T
10T
7T 7T 10T *N-1
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.2.-interfaz
3.3.-led
C A X
0 0 1
0 1 0
1 X
Ejemplo IN/OUT
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.
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
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.
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
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
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.
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.
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.
Timer Interrup. PC PB PA
Puerta C Puerta B Puerta A
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.
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
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
;--------------------------------------------------------------
;-------------------------------------------------------------
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
5 2 0
1 0
1
Calcular el TH y el TL
Solucion: Se calcula N
5
5
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
OUT TL
MVI A, 49H
OUT TH
;----------------------------------------------------------------------
; programa con puertas
;---------------------------------------------------------------------
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
;-----------------------------------------------------------------------------
; 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
OTRO: INR D
CALL MOSTRAR
CALL DELAY
MOV A,D
CPI 9
JNZ OTRO
HLT
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.
1.- Direccionamiento.
3.- Timer
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.
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
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.
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.
;---------------------------------------------------------------------------
;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
;---------------------------------------------------------------------------
;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
.org 0
.Data 1000h
db 10h, f9h
.define
TECLADO 01H
.Data 1000h
db 10h, f9h
.define
TECLADO 01H
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.
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
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
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.
*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.
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
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).
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
SUBRUTINA:
MVI H,00H ;valor
MVI L,FFH
RET ;retorna al programa principal
A) Interrupciones de software
B) Interrupciones de hardware
Esta interrupcin no es possible vectoriazarlas, debido a que possee 8 direcciones dentro del
hardware.
SID I7 I6 I5 IE
.
.
.
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
D7 D6 D5 D4 D3 D2 D1 D0
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
MSE: Mask Set Enable If D3=1 then D0, D1 and D2 are enable 1
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
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
.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
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.
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