You are on page 1of 43

Microprocesador 8085 de INTEL

SOFTWARE

Las instrucciones
Los tipos de instrucciones.
Los modos de direccionamiento
Conjunto de instrucciones del 8085
Ejemplos de algunas instrucciones
Ejercicios
microprocesadores
microprocesador
electronica
instrucciones
set
direcciones
datos
bus
8085
intel
foto
macro
olympus
zuiko
potencia
direccionamiento
decodificador
salto
bucle
logicas
aritmeticas
condicionales
programa
ensamblador

http://micros.myblog.es/

http://issuu.com/microprocesadores/

© 2010 Celestino Benítez Vázquez

Todos los contenidos e imágenes publicados en la revista “microprocesadores” tienen los derechos
reservados quedando prohibida la reproducción total o parcial de esta publicación sin el consentimiento
expreso de su autor.
4. EL SOFTWARE: LAS INSTRUCCIONES.
Los sistemas construidos sobre la base de los microprocesadores, requieren para su puesta en
marcha, el desarrollo del software, es decir, el desarrollo de programas que una vez construidos, son
almacenados en las memorias permanentes (PROM, EPROM,...) del sistema, donde son buscados por el
microprocesador para desarrollar todas las funciones y tareas deseadas.

Un programa esta constituido por un conjunto ordenado de instrucciones, que constituyen el


cuerpo principal del programa y uno o más bloques de datos iniciales necesarios para una correcta
ejecución. El proceso básico de ejecución de un programa requiere por parte del microprocesador, la
repetición de los siguientes pasos:

• Leer de la memoria una instrucción del programa.


• Interpretar la instrucción leída.
• Ejecutar dicha instrucción.

Debemos considerar además que los microprocesadores trabajan solamente con lenguaje de bajo
nivel, es decir, trabajan con lenguaje máquina. Cada microprocesador o familia de microprocesadores,
posee su propio lenguaje máquina que determina las capacidades propias de cada familia. Las
instrucciones máquina son almacenadas en la memoria en forma de bytes, es decir, en forma de unos y
ceros empleando por tanto el sistema binario de numeración. Sin embargo este sistema es muy complejo
para trabajar directamente con él, por lo que se emplean otros sistemas como el hexadecimal, BCD, etc.
para la representación de datos.
Para construir los programas, normalmente se emplean lenguajes de alto nivel, y luego se
transforman los programas así escritos a lenguaje máquina asequible para el microprocesador. No
obstante en nuestro caso emplearemos un lenguaje de bajo nivel (ensamblador) que trabaja con
abreviaturas alfabéticas denominadas mnemónicos que constituyen las operaciones e instrucciones que
ejecutará el microprocesador.

Durante el desarrollo de este tema veremos las principales bases numéricas de representación, así
como los diferentes tipos de instrucciones, modos de direccionamiento y se realizará un estudio de todo el
repertorio de instrucciones propio del microprocesador 8085. Es conveniente leer todas y cada una de las
instrucciones para ir familiarizándose con ellas y entender su modo de funcionamiento. Todo lo tratado
aquí, son aspectos básicos de la programación que nos permitirán crear programas ejecutables en el
sistema electrónico presentado en este libro.

4.1 BASES NUMÉRICAS DE REPRESENTACIÓN.

Ya se ha comentado que es el lenguaje máquina el único que el microprocesador es capaz de


tratar, es decir, solamente trabaja con unos y ceros. Este lenguaje resulta inapropiado para las personas,
por lo que se desarrollan otros sistemas de representación más sencillos o más cómodos de manejar.
En primer lugar debemos fijarnos en que el microprocesador trabaja con bloques de información
normalizados. Podemos destacar en este terreno:

• El bit: Como unidad de información más elemental que adopta dos únicos estados, el uno o
el cero.
• El octeto o byte: Constituido por una cadena de ocho bits.
• La palabra: Es el tamaño de información que el microprocesador puede manejar en paralelo.
En función de la potencialidad del microprocesador tendremos palabras de 8 bits, 16 bits, 32
bits, etc.

Establecido ya el tipo de información con el que se va a trabajar, pasamos ahora a ver las bases
numéricas o de representación que emplearemos durante la programación. Las más comunes son:

Sistema decimal: Es el sistema que habitualmente empleamos en nuestra vida diaria, y por tanto
será el sistema que se empleará normalmente para introducir datos y sacar datos del sistema. Lógicamente
este sistema de representación numérico dispone de diez dígitos (0, 1, 2, 3, 4, 5, 6, 7, 8 y 9).

Sistema binario: Solo emplea dos unidades básicas de representación (0 y 1). Para encontrar la
expresión decimal de cualquier número binario, se procede de forma similar al sistema decimal, pero
empleando el 2 como base del sistema. Por ejemplo el número 10101(2 será:

10101(2 = 1*24+0*23 +1*22+0*21+1*20

Para realizar el proceso contrario, es decir para transformar un número decimal a binario,
puede emplearse un método muy sencillo que consiste en dividir sucesivamente dicho número por la base
binaria 2. El número binario se construye tomando el último cociente y poniendo a continuación de forma
consecutiva los restos obtenidos en todas las divisiones de la última a la primera.

Sistema decimal codificado en binario (BCD): Se trata de un caso particular del binario que
emplea cuatro bits para representar los números decimales del 0 al 9. Por tanto para transformar un
número decimal, no tendremos más que tomar cada una de sus cifras y transformarla a binario empleando
4 bits. Por ejemplo:

279 = 0010 0111 1001

Sistema exceso a tres: Toma como referencia el sistema BCD, sin más que añadir a cada dígito el
valor 3, es decir sumar 0011(2.

Sistema hexadecimal: Es uno de los más empleados en programación. Sus diez primeros dígitos
se corresponden con los del sistema decimal y los seis restantes son las seis primeras letras mayúsculas
del alfabeto (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F). La base de este sistema es el 16 y todas sus cifras
pueden ser expresadas con cuatro bits (ya que 16 = 24). Para convertir un número binario a hexadecimal,
agruparemos sus dígitos o bits de cuatro en cuatro y transformaremos cada uno de ellos de forma
individual, obteniendo así la representación en hexadecimal. Por ejemplo:

0011 1010 1111 0110 (2 = 3AF6(16 = 3AF6H

Sistema de representación ASCII: Se trata de un sistema de representación de datos empleado


para facilitar intercambios de información. Es uno de los sistemas más empleados en la actualidad (junto
al sistema EBCDIC) . La codificación se lleva a cabo empleando una palabra de 8 bits, es decir, un octeto
para cada carácter de información. Para encontrar el valor de un carácter numérico de una representación
ASCII, es suficiente con restar el valor 48 y al contrario para encontrar la representación ASCII de un
dígito decimal habrá que sumar 48 (48 = 0011 0000(2 = 30H).
4.2 LOS TIPOS DE INSTRUCCIONES.
Después de haber tratado de forma superficial los sistemas de representación, vamos a ver los
distintos tipos de instrucciones que utiliza un microprocesador.. Básicamente puede decirse que el bloque
de instrucciones debe ser completo y eficaz de modo que podamos realizar todos los cálculos necesarios
de la forma más rápida y precisa posible.

Una de las principales características de todo microprocesador es disponer de un buen conjunto


de instrucciones que le den la mayor versatilidad posible. Se establecen los siguientes grupos, tipos o
conjuntos de instrucciones:

1. Aritméticas: Son las instrucciones que realizan operaciones de tipo aritmético como sumas,
restas, incrementos, decrementos, etc. Todas las operaciones de este tipo afectan al registro
de estado, es decir a los flags.

2. Movimiento de datos: Este tipo de instrucciones de movimiento o transferencia de datos,


permiten realizar una copia del contenido de un registro o dirección de memoria (origen), en
otro registro o dirección de memoria (destino), sin alterar el contenido del origen.

3. Instrucciones lógicas: Realizan operaciones lógicas entre los operandos. Afectan a los flags
según sea el caso y las operaciones se realizan bit a bit entre los datos.

4. Instrucciones de comparación: Son operaciones de restar o operaciones XOR entre dos


operandos. Afectan a los flags pero no se almacena el resultado.

5. Instrucciones de salto: Son instrucciones de modificación de secuencia que alteran la


ejecución normal del programa, cargando el contador de programa con la nueva dirección en
la que deseamos continúe ejecutándose el programa. Los saltos o bifurcaciones pueden ser:

• Condicionales: Cuando son controlados por el estado de un indicador o flag, y


basándose en dicho estado se decide si se salta o no.
• Incondicionales: Cuando modifican el contador de programa sin condición previa.

Dentro de cada uno de estos tipos, podemos encontrar además la particularidad de que al
efectuar los saltos se realicen con posibilidad de retorno o no.

6. Instrucciones de entrada/salida: Son en realidad instrucciones de transferencia, pero no entre


registros o posiciones de memoria, sino con elementos periféricos que permiten la
comunicación del microprocesador con el exterior.

7. Instrucciones de control: Sirven para actuar internamente sobre el microprocesador,


provocando detenciones en la ejecución del programa, etc.

8. Instrucciones de bit: Trabajan o tratan bits independientes.

9. Instrucciones de desplazamiento: Desplazan o rotan hacia la izquierda o hacia la derecha los


bits de un registro (Acumulador).
4.3 LOS MODOS DE DIRECCIONAMIENTO.
Los modos de direccionamiento son aquellos procedimientos empleados por el microprocesador
para poder acceder a determinados operandos, instrucciones, posiciones de memoria, registros de
entrada/salida, etc. Por tanto el objeto del direccionamiento es un valor o dato que se encuentra en un
lugar de la memoria, en algún registro o en la propia instrucción. Los diferentes modos de
direccionamiento que pueda emplear un microprocesador le proporcionan un determinado nivel de
potencialidad, permitiéndole manejar datos y realizar operaciones con mayor facilidad.

En general podemos diferenciar los siguientes tipos o modos de direccionamiento:

1. Direccionamiento inmediato: En este caso el objeto (un operando) se encuentra incluido en la


instrucción, es decir, a continuación del código de la instrucción se añade el operando propiamente
dicho. Las instrucciones que emplean este direccionamiento pueden ser de dos o tres bytes y son
instrucciones de ejecución rápida y sencilla.

2. Direccionamiento implícito: Las instrucciones que emplean este modo de direccionamiento tienen un
solo byte y es la propia instrucción la que indica qué registro o dirección de memoria se va a utilizar
en la operación.

3. Direccionamiento absoluto: En este caso las instrucciones incluyen la dirección de memoria donde se
encuentra el dato con el que se va a operar. En este tipo de direccionamiento pueden darse tres
supuestos:
a. La instrucción apunta a un registro que contiene la información deseada (direccionamiento
también llamado de registro).

b. La instrucción contiene la dirección completa en la que se encuentra el dato, empleando para ello
tres bytes.

c. Cuando la instrucción se refiere solo a una parte de la memoria (página). En este caso el byte
más alto lo suministra el contador de programa y el byte más bajo se expresa a continuación del
código de instrucción, por tanto solo se emplean dos bytes (Este direccionamiento también se
llama de página base).

4. Direccionamiento directo relativo: La instrucción en este caso contiene un valor determinado al que
podemos llamar V. La dirección total se calcula sumando a V el valor que esté almacenado en un
registro al que haga referencia la instrucción. El valor de V puede ser tanto positivo como negativo.

5. Direccionamiento indirecto: La instrucción contiene una dirección a la que llamaremos D1. El


contenido de D1 no es el objeto directo de nuestra instrucción, sino que contiene otra dirección que
llamaremos D2. Esta nueva dirección D2 es la que contiene el dato que sí es objeto de la instrucción.

Expresados ya los modos de direccionamiento con carácter general, pasamos ahora a ver los
modos de direccionamiento que utiliza el microprocesador 8085 en particular, que son los cuatro
siguientes:

• Direccionamiento Directo Absoluto. La instrucción contiene la dirección exacta y completa


donde se encuentra el dato. Por ejemplo:

LHLD A716H

• Direccionamiento por Registro. La instrucción lleva el registro en el que está el dato que va a
ser tratado. Por ejemplo:

MOV A,B
MOV B,C

• Direccionamiento por Registro Indirecto. En la instrucción se especifica un registro cuyo


contenido apunta a una dirección de memoria en la que se encuentra el dato. Por ejemplo:

MOV A,M

M es una referencia simbólica a una dirección de memoria apuntada o señalada por el


par de registros HL.

• Direccionamiento Inmediato. La instrucción contiene el dato con el que se desea operar,


pudiendo ser el dato de uno o dos bytes.

LXI H,A0B7H
ADI 3AH
4.4 CONJUNTO DE INSTRUCCIONES DEL 8085.
Aunque el conjunto de instrucciones puede encontrarse en cualquier libro que trate este tema
específicamente, en este apartado se muestra un "diccionario" de las mismas. La descripción se relaciona
alfabéticamente para una localización más inmediata y todas están descritas de forma detallada.

La unidad básica de tiempo es el "estado", que es un ciclo de reloj (clock). Un "ciclo de


máquina" consta de 3 a 6 estados. Las operaciones más sencillas requieren sólo un ciclo de máquina. El
"ciclo de instrucción" es el tiempo requerido para ejecutar una instrucción completa y puede constar de 1
a 5 ciclos de máquina.

Las instrucciones constan básicamente de una "fase de búsqueda" y una "fase de ejecución".

En este caso se omiten los gráficos de ejecución de los estados, dado que la velocidad de las
operaciones básicas del procesador dependen de la frecuencia del clock usado en el sistema. Un estado
puede oscilar entre los 320 ns y los 2 ns. Sabiendo la duración de un estado, en un determinado sistema se
puede determinar el tiempo de ejecución de una instrucción cualquiera multiplicando el tiempo de cada
estado por el número de ellos que contiene cada instrucción.

En cada una de las instrucciones que se muestran a continuación se especificará:


• El formato de la instrucción.
• El código objeto de la misma.
• El número de bytes que emplea.
• Los ciclos necesarios para su ejecución.
• Los flags afectados al ejecutarse dicha instrucción.
• El modo de direccionamiento empleado en la misma.

INSTRUCCIO CODIGO OBJ BYT. CIC FLAGS AFECTADOS DIRECCIONAMIENTO


ACI DATA CE YY 2 7 Z,S,P,CY,AC Inmediato

Suma el contenido del byte especificado (DATA) en la instrucción, al contenido del acumulador,
añadiendo además el bit del acarreo. El resultado se almacena en el acumulador (perdiéndose así el
anterior contenido del Acumulador).

El dato (DATA) debe estar especificado en forma de número, en ASCII constante, como etiqueta
de un valor previamente definido o una expresión. El dato no debe exceder de un byte.

INSTRUCCIO CODIGOOBJ BYT. CIC FLAGS AFECTADOS DIRECCIONAMIENTO


ADC reg 1000 1XXX 1 4 Z,S,P,CY,AC Registro

Suma el contenido de un registro (reg) con el contenido del acumulador y el bit de acarreo. El
resultado queda en el acumulador. El operando (reg) debe especificar uno de los registros del A al E, el H
o el L.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTAD DIRECCIONAMIENTO


ADC M 8E 1 7 Z,S,P,CY,AC Registro índice

Esta instrucción suma el contenido del byte de memoria direccionado por el par de registros H y
L con el contenido del acumulador y el bit de acarreo; el resultado es almacenado en el acumulador. (M
es una referencia simbólica de los registros H y L).

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTAD DIRECCIONAMIENTO


ADD reg 1000 0XXX 1 4 Z,S,P,CY,AC Registro

Suma el byte de datos contenido en el registro especificado (reg debe ser uno de los registros del
A al E, el H o el L) al contenido del acumulador y deja el resultado en el acumulador. (Notar que ADD
excluye el flag de acarreo de la suma, pero lo utiliza para indicar el resultado de la operación).

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTAD DIRECCIONAMIENTO


ADD M 86 1 7 Z,S,P,CY,AC Regis indirect

Suma el contenido de la posición de memoria direccionada por los registros H y L con el


contenido del acumulador y deja el resultado en el acumulador. (No suma el acarreo, pero lo usa para
completar el resultado de la operación).
INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO
ADI DATA C6 YY 2 7 Z,S,P,CY,AC Inmediato

Suma el valor del byte especificado en la instrucción (DATA), al contenido del acumulador y
deja el resultado en el acumulador. El dato debe ser expresado en forma de número, un ASCII constante,
la etiqueta de un valor previamente definido o una expresión. El dato no debe exceder de un byte.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


ANA reg 1010 0XXX 1 4 Z,S,P,CY,AC Registro

El operando (reg) debe especificar uno de los registros del A al E, el H o el L. Esta instrucción
realiza una operación lógica Y entre el contenido del registro especificado y el contenido del acumulador,
dejando el resultado en el acumulador. El flag de acarreo es puesto a cero. (La operación Y produce un 1
solo cuando los dos bits implicados en la operación son 1).

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


ANA M A6 1 7 Z,S,P,CY,AC Registr indirec

Se realiza un producto lógico (operación Y) entre el contenido de la posición de memoria


especificada por H y L y el contenido del acumulador, dejando el resultado en el acumulador. El flag de
acarreo es puesto a cero.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


ANI DATA E6 YY 2 7 Z,S,P,CY,AC Inmediato

Realiza una operación Y lógica entre el dato (DATA) especificado en la instrucción y el


contenido del acumulador, el resultado queda en el acumulador. Se pone a cero el flag de acarreo. El dato,
que no debe exceder de un byte, puede ser expresado en forma de número, un ASCII constante, la
etiqueta de algún valor previamente definido o una expresión.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


CALL LABEL CD PPQQ 3 18 Inmed/Reg Indir

CALL guarda el contenido del contador de programa (la dirección de la próxima instrucción
secuencial) dentro del stack y a continuación salta a la dirección especificada por LABEL. Cada
instrucción CALL o alguna de sus variantes implica una instrucción RET (retorno), de lo contrario el
programa podría "perderse" con consecuencias impredecibles. La dirección debe ser especificada como
un número, una etiqueta, o una expresión. La etiqueta es lo más normal (El assembler invierte los bytes
alto y bajo de dirección durante el proceso de ensamblado). Las instrucciones CALL se emplean para
llamadas a subrutinas y debemos tener presente que siempre emplean el stack.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


CC LABEL DC PPQQ 3 9/18 Inmed/Reg Indir

CC comprueba el estado del flag de acarreo. Si el flag está a 1, CC carga el contenido del
contador de programa en el stack y a continuación salta a la dirección especificada por LABEL. Si el flag
esta a 0, la ejecución del programa continúa con la próxima instrucción de su secuencia normal. Aunque
el uso de una etiqueta es lo más normal, la dirección puede ser especificada también como un número o
una expresión.
INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO
CM LABEL FC PPQQ 3 9/18 Inmed/Reg Indir

CM comprueba el estado del flag del signo. Si el flag esta a 1 (indicando que el contenido del
acumulador es negativo) CM manda el contenido del contador de programa al stack y salta a la dirección
especificada por LABEL. Si el flag es 0 la ejecución del programa continúa con su secuencia normal. El
uso de la etiqueta es lo más corriente, pero la dirección puede especificarse también por un número o una
expresión.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


CMA 2F 1 4

La instrucción CMA complementa en contenido del acumulador. No actúa ningún flag de


condición. Esta instrucción no emplea operandos. Para realizar el complemento a dos, se suma 1 al
contenido del acumulador después de haber ejecutado la instrucción CMA.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


CMC 3F 1 4 CY

Complementa el flag de acarreo. Si dicho flag está a 0, CMC lo pone a 1 y si esta a 1 lo pone a 0.
El resto de los flags no varían.
INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO
CMP reg 1011 1XXX 1 4 Z,S,P,CY,AC Registro

El operando (reg) debe nombrar uno de los registros del A al E, el H o el L. La instrucción CMP
reg compara el byte contenido en el registro especificado con el contenido del acumulador. Se indica el
resultado actuando los flags de cero y acarreo. Los valores que están siendo comparados permanecen
invariables.

El flag de cero indica igualdad. Si hay un 0 en el flag de acarreo, indica que el contenido del
acumulador es mayor que el contenido del registro especificado. Un 1 en el acarreo, indica lo contrario.
Sin embargo el significado del flag de acarreo es invertido cuando los valores tienen signos diferentes o
cuando uno de los valores es complementado.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


CMP M BE 1 7 Z,S,P,CY,AC Registro

La instrucción compara el contenido de la posición de memoria direccionada por los registros H


y L con el contenido del acumulador. M es una referencia simbólica al par de registros HL. La actuación
de los flags es igual a la producida en el caso anterior.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


CNC LABEL D4 PPQQ 3 9/18 Inmedi/Reg indi

CNC chequea el valor del flag de acarreo. Si está en cero CNC carga el contenido de contador de
programa en el stack y a continuación salta a la dirección especificada por la instrucción en LABEL. Si el
flag está a 1, el programa continúa con su secuencia normal. Aunque el uso de una etiqueta es lo más
común, la dirección puede también estar indicada por un número o por una expresión.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


CNZ LABEL C4 PPQQ 3 9/18 Inmed/Reg Indir

CNZ chequea el flag de Cero. Si está en 0 (indicando que el contenido del acumulador no es
cero), CNZ manda el contenido del contador de programa al stack y salta a la dirección especificada por
LABEL. Si el flag está a 1 el programa continúa su desarrollo normal.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


CP LABEL F4 PPQQ 3 9/18 Inmed/Reg Indir

CP chequea el valor del flag de signo. Si está a 0 (indicando que el contenido del acumulador es
positivo), CP envía el contenido del contador de programa al stack y salta a la dirección especificada por
LABEL. Si el flag tiene un 1, continúa el programa normalmente con la instrucción siguiente.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


CPE LABEL EC PPQQ 3 9/18 Inmedi/Reg Indi

Existe paridad en un byte si el número de unos que tiene es par. El flag de paridad se pone a 1
para indicar esta condición. CPE chequea el valor del flag de paridad. Si tiene un 1, CPE envía el
contenido del contador de programa al stack y salta a la dirección especificada por la instrucción en
LABEL. Si el flag tiene un cero, el programa continúa normalmente.
INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO
CPI DATA FE YY 2 7 Z,S,P,CY,AC Reg Indirecto

Compara el valor del byte (DATA) con el contenido del acumulador y activa los flags de cero y
acarreo para señalar el resultado. El flag cero indica igualdad. Un 0 en el acarreo dice que el contenido del
acumulador es mayor que DATA. Un 1 en el acarreo indica que el acumulador es menor que DATA. Sin
embargo, el significado del flag de acarreo es contrario cuando los valores tienen diferente signo o cuando
uno de los valores está complementado. El valor de DATA no debe exceder de un byte.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


CPO LABEL E4 PPQQ 3 9/18 Inmedi/Reg Indi

CPO chequea el flag de paridad. Si el flag esta a 0, CPO carga el contenido del contador de
programa en el stack y salta a la dirección especificada en LABEL. Si el flag está a 1 el programa
continúa su desarrollo normal.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


CZ LABEL CC PPQQ 3 9/18 Inmedi/Reg Indi

CZ chequea el flag de cero. Si el flag esta a 1 (indicando que el contenido del acumulador es
cero), CZ carga el contenido del contador de programa en el stack y salta a la dirección especificada en
LABEL. Si el flag está a 0 (indicando que el contenido del acumulador es distinto de cero) el programa
continúa su desarrollo normal.
INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO
DAA 27 1 4 Z,S,P,CY,AC Registro

La instrucción DAA no tiene operando y ajusta el valor de los ocho bits del acumulador para
formar dos grupos de cuatro bits binarios codificados en decimal. DAA se usa para trabajar con números
decimales. Es la única instrucción cuya función requiere el uso del flag de acarreo auxiliar. En
operaciones aritméticas multi-byte, la instrucción DAA es codificada inmediatamente después de la
instrucción aritmética, de tal manera que el flag de acarreo auxiliar no se altera involuntariamente. DAA
opera como sigue:
1.- Si los cuatro bits menos significativos del acumulador tienen un valor mayor que 9, o si el
flag de acarreo auxiliar está en 1, DAA suma seis al acumulador.
2.- Si los cuatro bits más significativos del acumulador tienen un valor superior a 9, o si el flag
de acarreo esta a 1, DAA suma 6 a los cuatro bits más significativos del acumulador.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


DAD RP 00XX 1001 1 10 CY Registro

DAD RP suma el valor de un dato de 16 bits contenido en un determinado par de registros (RP)
al contenido del par de registros HL. El resultado es almacenado en el par HL. Los operandos (RP)
pueden ser B = BC, D = DE, H = HL, SP. Téngase en cuenta que la letra H debe ser empleada para
especificar que el par de registros HL debe ser doblado. DAD pone el flag de acarreo a 1 si hay una salida
de acarreo de los registros HL. Y además no afecta a ningún otro flag.
INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO
DCR reg 00XX X101 1 4 Z,S,P,AC Registro

El operando (reg) debe especificar uno de los registros del A al E, el H o el L. La instrucción


resta 1 del contenido del registro especificado. Afecta a todos los flags excepto al de acarreo. (Puede
usarse dentro de rutinas aritméticas multi-byte para decrementar contadores característicos y propósitos
similares).

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


DCR M 35 1 10 Z,S,P,AC Registro Indire

Resta 1 del contenido de la posición de memoria direccionada por el par de registros HL.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


DCX RP 00XX 1011 1 6 Registro

DCX resta 1 al contenido del par de registro especificado (RP). Dado que DCX no usa ningún
flag, puede emplearse para modificar direcciones en cualquier secuencia de instrucciones dada la
estaticidad de los flags. (La letra H puede emplearse para especificar el par de registros HL).

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


DI F3 1 4

Después de la ejecución de una DI, el sistema de "interrupciones" queda deshabilitado. En


aplicaciones que empleen las interrupciones, la instrucción DI se emplea cuando una determinada
secuencia no debe ser interrumpida. Por ejemplo, se puede poner fuera de servicio el sistema de
interrupciones incluyendo una instrucción DI el principio del código de secuencia. La interrupción TRAP
del 8085 no puede ser puesta fuera de servicio. Esta interrupción especial esta prevista para problemas
que pueden presentarse independientemente del flag de interrupción (fallo de alimentación, etc.).

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


EI FB 1 4

La instrucción EI pone en servicio el sistema de interrupciones a partir de la siguiente instrucción


secuencial del programa.
Se puede desconectar el sistema de interrupciones poniendo una instrucción DI al principio de
una secuencia, puesto que no se puede predecir la llegada de una interrupción. Al final de la secuencia se
incluye la instrucción EI que vuelve a habilitar el sistema de interrupciones. (RESET también pone fuera
de servicio el sistema de interrupciones además de poner el contador de programa a cero).

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


HLT 76 1 4

La instrucción HLT detiene el procesador. El contador de programa contiene la dirección de la


próxima instrucción secuencial. Por otro lado los flags y registros permanecen inactivos. Una vez en
estado de parada el procesador puede volver a ser arrancado solamente por un acontecimiento externo, es
decir una interrupción. Por tanto debemos asegurarnos que las interrupciones estén en disposición de ser
activadas antes de ejecutar la instrucción HLT. Si se ejecuta HLT estando las interrupciones fuera de
servicio, la única manera de volver arrancar el procesador será mediante un RESET o a través de la
interrupción TRAP. El procesador puede salir temporalmente del estado de parada para servir un acceso
directo a memoria, sin embargo terminado el acceso directo vuelve al estado de parada.

Un propósito básico de la instrucción HLT es permitir una pausa al procesador mientras espera
por la interrupción de un periférico.
INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO
IN PORT DB YY 2 10 Directo

La instrucción IN PORT lee los 8 bits de datos que hay en el "PORT" especificado y los carga en
el acumulador. El operando debe ser un número o una expresión que produzca un valor comprendido
entre 00H y FFH.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


INR reg 00XX X100 1 4 Z,S,P,AC Registro

El operando (reg) debe especificar uno de los registros del A al E, el H o el L. La instrucción


suma 1 al contenido del registro especificado.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


INR M 34 1 10 Z,S,P,AC Registro Indire

La instrucción suma 1 al contenido de la dirección de memoria señalada por el par de registros


HL. M es una referencia simbólica a los registros H y L.
INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO
INX RP 00XX 0011 1 6 Registro

La instrucción INX suma 1 al par de registros especificado. No afecta a ningún flag. Puede
usarse para incrementar los pares de registros BC, DE, HL y SP. (Cuidado al incrementar SP).

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


JC LABEL DA PPQQ 3 7/10 Inmediato

La instrucción JC LABEL comprueba el valor del flag de acarreo. Si es un 1 la ejecución del


programa continúa en la dirección especificada por LABEL. Si es un 0 el programa continúa su ejecución
normal de forma secuencial.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


JM LABEL FA PPQQ 3 7/10 Inmediato

La instrucción JM LABEL comprueba el estado del flag de signo. Si el contenido del


acumulador es negativo (flag de signo = 1) la ejecución del programa continúa en la dirección
especificada por LABEL. Si el contenido del acumulador es positivo (flag de signo = 0) continúa la
ejecución de la secuencia normal.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


JMP LABEL C3 PPQQ 3 10 Inmediato

La instrucción JMP LABEL altera la ejecución del programa cargando el valor especificado por
LABEL en el contador de programa.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


JNC LABEL D2 PPQQ 3 7/10 Inmediato

La instrucción JNC LABEL comprueba el estado del flag acarreo. Si esta a 0 el programa cambia
a la dirección especificada por LABEL. Si esta a 1 la ejecución del programa continúa normalmente.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


JNZ LABEL C2 PPQQ 3 7/10 Inmediato

La instrucción JNZ LABEL comprueba el valor del flag de cero. Si el contenido del acumulador
no es cero (Flag de cero = 0) el programa continúa en la dirección especificada por LABEL. Si el
contenido del acumulador es cero (Flag de cero = 1) el programa continúa su ciclo normal.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


JP LABEL F2 PPQQ 3 7/10 Inmediato

La instrucción JP LABEL comprueba el estado de flag del signo. Si el contenido del acumulador
es positivo (flag de signo = 0) la ejecución del programa continúa con la dirección especificada por
LABEL. Si el contenido del acumulador es negativo (flag de signo = 1) continúa el programa con su
ejecución normal.
INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO
JPE LABEL EA PPQQ 3 7/10 Inmediato

La paridad existe si el byte que esta en el acumulador tiene un número par de bits. El flag de
paridad se pone a 1 para indicar esta condición.

La instrucción JPE LABEL comprueba la situación del flag de paridad. Si esta a 1, la ejecución
del programa continúa en la dirección especificada por LABEL. Si esta a 0, continúa con la siguiente
instrucción de forma secuencial.

Las instrucciones JPE y JPO son especialmente usadas para comprobar la paridad de los datos de
entrada. (Sin embargo con la instrucción IN los flags no actúan. Esto puede evitarse sumando 00H al
acumulador para activarlos).

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


JPO LABEL E2 PPQQ 3 7/10 Inmediato

La instrucción JPO LABEL comprueba el estado del flag de paridad. Si esta a 0, el programa
continúa en la dirección marcada por LABEL. Si está a 1 continúa con la secuencia normal.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


JZ LABEL CA PPQQ 3 7/10 Inmediato

La instrucción JZ LABEL comprueba el flag de cero. Si está a 1 el programa continúa en la


dirección expresada por LABEL. Si está a 0 continúa con la ejecución secuencial normal.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


LDA ADDR 3A PPQQ 3 13 Directo

LDA ADDR carga el acumulador con el contenido de la memoria direccionada por ADDR. La
dirección puede ser puesta como un número, una etiqueta previamente definida o una expresión.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


LDAX RP 000X 1010 1 7 Registro indire

LDAX RP carga el acumulador con una copia del byte almacenado en la localización de
memoria direccionada por el par de registros BC o DE. (El par BC se especifica con B y el par DE con
D).

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


LHLD ADDR 2A PPQQ 3 16 Directo

LHLD ADDR carga el registro L con una copia del byte almacenado en la posición de memoria
especificada por ADDR. Después carga el registro H con una copia del byte almacenado en la posición
siguiente de memoria especificada por ADDR. La instrucción LHLD esta prevista para cargar direcciones
nuevas en los registros H y L.
INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO
LXI RP,DA16 00XX 0001 YY YY 3 10 Inmediato

LXI es una instrucción de 3 bytes; su 2º y 3º byte contienen el dato que ha de ser cargado en el
par de registros (RP). El primer operando debe especificar el par de registros a ser cargados, pueden ser
los pares BC, DE, HL, o el SP. LXI es la única instrucción inmediata que acepta un valor de 16 bits.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


MOV reg,reg 01dddsss 1 4 Registro

Copia el contenido del segundo registro en el primero. Cada operando debe especificar uno de
los registros A, B, C, D, E, H o L.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


MOV M,reg 0111 0sss 1 7 Registro Indire

Copia el contenido del registro especificado en la posición de memoria direccionada por los
registros H y L. El segundo operando (reg) debe especificar uno de los registros A, B, C, D, E, H o L.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


MOV reg,M 01dd d110 1 7 Reggist.Indirec

Copia el contenido de la posición de memoria direccionada por los registros H y L en el registro


especificado. El primer operando debe especificar el registro deseado como destino.
INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO
MVI reg,DAT 00ddd110 YY 2 7 Inmediato

El primer operando debe ser uno de los registros A,B,C,D,E,H o L, que será cargado con el dato
especificado en el segundo operando (DATA). El dato no debe exceder de un byte.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


MVI M,DATA 36 YY 2 10 Inmedi/Reg Indi

Esta instrucción carga el dato especificado por DATA en la posición de memoria direccionada
por el par HL.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


NOP 00 1 4

NOP no realiza ninguna operación y no afecta a ninguno de los flags de condición. Se emplea
normalmente para completar ciclos de lazo.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


ORA reg 1011 0XXX 1 4 Z,S,P,CY,AC Registro

El operando debe especificar uno de los registros del A al E, el H o el L. Esta instrucción realiza
una operación lógica "O" entre el contenido del registro especificado y el acumulador, dejando el
resultado en el acumulador. Los flags de acarreo y acarreo auxiliar se ponen a cero.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


ORA M B6 1 7 Z,S,P,CY,AC Reg Indirecto

Realiza una operación "O" entre el contenido de la dirección de memoria especificada por el par
HL y el contenido del acumulador. El resultado es almacenado en el acumulador. Los flags de acarreo y
acarreo auxiliar son puestos a cero.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


ORI DATA F6 YY 2 7 Z,S,P,CY,AC Inmediato

ORI desarrolla una operación lógica "O inclusiva" entre el contenido especificado por DATA y
el contenido del acumulador. El resultado se deja en el acumulador. Los flags de acarreo y acarreo
auxiliar se ponen a cero.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


OUT PORT D3 YY 2 10 Directo

OUT PORT pone el contenido del acumulador en el bus de datos de 8 bits del puerto
seleccionado en el bus de direcciones de 16 bits. El número de puertos oscila de 0 a 255 y es duplicado en
el bus de direcciones. Es la lógica externa la encargada de seleccionar el puerto y aceptar el dato de
salida. El operando (PORT) debe especificar el número del puerto de salida seleccionado.
INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO
PCHL E9 1 6 Registro

PCHL carga el contenido de los registros H y L en el contador de programa. Como el procesador


busca la siguiente instrucción en la siguiente dirección del contador de programa, PCHL tiene el efecto de
una instrucción de salto. El contenido de H va a los 8 bits más altos de contador de programa y el
contenido de L va a los 8 bits más bajos.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


POP RP 11XX 0001 1 10 Reg. Indirecto

POP RP copia el contenido de la posición de memoria direccionada por el stack pointer en el


registro de bajo orden del par de registros especificados. A continuación se incrementa el stack pointer en
1 y copia el contenido de la dirección resultante en el registro de más alto orden del par. Luego se
incrementa el stack pointer otra vez de modo que se apunta al siguiente dato del stack. El operando debe
especificar el par de registros BC, DE, HL o PSW. POP PSW usa el contenido de la localización de
memoria especificada por el stack pointer para restablecer los flags de condiciones.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


PUSH RP 11XX 0101 1 12 Reg.Indirecto

PUSH copia dos bytes de datos en el stack. El dato puede ser el contenido de un par de registros
o la "palabra de estado del programa". PUSH resta 1 del stack pointer y copia el contenido del registro de
"alto orden" del par de registros en la dirección resultante. A continuación se resta otra vez 1 al stack
pointer y se copia el registro de bajo orden en la dirección resultante. Los registros permanecen
invariables.
INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO
RAL 17 1 4 CY

RAL hace girar el contenido del acumulador y el flag de acarreo un espacio de un bit hacia la
salida (izquierda). El flag 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 flag de acarreo. No
tiene operandos.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


RAR 1F 1 4 CY

RAR rota el contenido del acumulador y del flag de acarreo 1 bit de posición a la derecha. El
flag de acarreo que es tratado como si fuera parte del acumulador se transfiere al bit de más alto orden del
acumulador. El bit de menor peso del acumulador se carga en el flag de acarreo. No existen operandos en
la instrucción RAR.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


RC D8 1 6/12 Reg. Indirecto

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

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


RET C9 1 10 Reg. Indirecto

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

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


RIM 20 1 4

RIM carga los 8 bits de datos siguientes en el acumulador:

SID I7.5 I6.5 I5.5 IE M7.5 M6.5 M5.5

SID = Bit presente en la entrada serie


I7.5 = Interrupción 7.5 pendiente si esta a 1
I6.5 = Interrupción 6.5 pendiente si esta a 1
I5.5 = Interrupción 5.5 pendiente si esta a 1
IE = Las interrupciones son autorizadas si es 1
M7.5 = La interrupción 7.5 está prohibida si está a 1
M6.5 = La interrupción 6.5 está prohibida si está a 1
M5.5 = La interrupción 5.5 está prohibida si está a 1

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


RLC 07 1 4 CY

RLC rota un bit hacia la izquierda todo el contenido del acumulador, transfiriendo el bit de más
alto orden al flag de acarreo y al mismo tiempo a la posición de menor orden del acumulador.
INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO
RM F8 1 6/12 Reg. Indirecto

La instrucción RM comprueba el flag de signo. Si tiene un 1, indicando dato negativo en el


acumulador, la instrucción echa dos bytes fuera del stack y los mete en el contador de programa. Si el flag
tiene 0, continúa el programa normal con la siguiente instrucción.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


RNC D0 1 6/12 Reg. Indirecto

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

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


RNZ C0 1 6/12 Reg. Indirecto

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

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


RP F0 1 6/12 Reg. Indirecto

La instrucción RP comprueba el flag signo. Si está a 0, indicando que el contenido del


acumulador es positivo, la instrucción echa fuera del stack dos bytes y los carga en el contador de
programa. Si el flag está a 1 continúa el ciclo normal.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


RPE E8 1 6/12 Reg. Indirecto

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

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


RPO E0 1 6/12 Reg. Indirecto

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

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


RRC 0F 1 4 CY

RRC rota el contenido del acumulador un bit a la derecha, transfiriendo el bit de más bajo orden
a la posición de más alto orden del acumulador, además pone el flag de acarreo igual al bit de menor
orden del acumulador.
INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO
RST N 11XX X111 1 12 Reg. Indirecto

Es una instrucción CALL para usar con interrupciones. RST carga el contenido del contador de
programa en el stack, para proveerse de una dirección de retorno y salta a una de las "ocho" direcciones
determinadas previamente. Un código de tres bits incluido en el código de operación de la instrucción
RST especifica la dirección de salto. Esta instrucción es empleada por los periféricos cuando intentan una
interrupción. La instrucción RST tiene el siguiente formato:

1 1 C C C 1 1 1
Luego según la combinación de 0 y 1 que demos a C C C obtendremos los distintos formatos y
las distintas direcciones de las interrupciones, que serán:

FORMATO RST CONTADOR DE PROGRAMA


1100 0111 C7 0000 0000 0000 0000 0000H
1100 1111 CF 0000 0000 0000 1000 0008H
1101 0111 D7 0000 0000 0001 0000 0010H
1101 1111 DF 0000 0000 0001 1000 0018H
1110 0111 E7 0000 0000 0010 0000 0020H
1110 1111 EF 0000 0000 0010 1000 0028H
1111 0111 F7 0000 0000 0011 0000 0030H
1111 1111 FF 0000 0000 0011 1000 0038H
INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO
RZ C8 1 6/12 Reg.Indirecto

La instrucción RZ comprueba el flag de cero. Si está a 1, indicando que el contenido del


acumulador es cero, la instrucción echa fuera del stack dos bytes y los carga en el contador de programa.
Si el flag está a 0, continúa el ciclo normal.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


SBB reg 1001 1XXX 1 4 Z,S,P,CY,AC Registro

SBB reg resta uno de los registros del A al E, el H o el L y el flag de acarreo, del contenido del
acumulador, dejando el resultado en el acumulador.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


SBB M 9E 1 7 Z,S,P,CY,AC Reg. Indirecto

Esta instrucción resta el flag de acarreo y el contenido de la posición de memoria direccionada


por los registros H y L, del contenido del acumulador y deja el resultado en el acumulador.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


SBI DATA DE YY 2 7 Z,S,P,CY,AC Inmediato

SBI resta el contenido de DATA y el flag de acarreo, del contenido del acumulador, dejando el
resultado en el acumulador.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


SHLD ADDR 22 PPQQ 3 16 Directo

SHLD almacena una copia del registro L en la posición de memoria especificada por ADDR, a
continuación almacena una copia del registro H en la siguiente posición de memoria (ADDR+1). SHLD
es una instrucción proyectada para salvar el contenido del par HL.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


SIM 30 1 4

SIM es una instrucción de usos múltiples que utiliza el contenido del acumulador para posicionar
el enmascaramiento de interrupciones para las RST 5.5, RST 6.5, RST 7.5; pone a cero el flanco sensitivo
de la entrada RST 7.5 y saca el bit 7 del acumulador al latch de datos de salida serie. La estructura de
la instrucción SIM es como sigue:

SOD SOE X R7.5 MSE M7.5 M6.5 M5.5

SOD = Bit a presentar sobre la salida serie.


SOE = La salida serie está autorizada si esta a 1.
R7.5 = Reset de RST 7.5.Si es 1 el flip-flop se pone a 0
MSE = Si es un 1 los enmascarados están autorizados.
M7.5 = Si es 1 la interrupción 7.5 queda prohibida.
M6.5 = Si es 1 la interrupción 6.5 queda prohibida.
M5.5 = Si es 1 la interrupción 5.5 queda prohibida.

Si el bit 3 se pone a 1, la función poner "mask" se pone enable (permitida). Los bits 0 al 2 ponen
en servicio la correspondiente interrupción RST colocando un 0 en la interrupción que deseamos habilitar.
Si colocamos un 1 en alguno de los bits 0 al 2, la interrupción correspondiente no se cumplirá. Si el bit 3
tiene un 0, los bits 0 al 2 no tienen efectos. Se debe usar esta peculiaridad para enviar un bit de salida
serie sin afectar al enmascaramiento de las interrupciones. (La instrucción DI anula la SIM).
Si el bit 6 (SOE) se pone a 1 se habilita la función de salida serie. El bit 7 se sitúa en la salida
SOD donde puede ser tratado por los aparatos periféricos. Si el bit 6 se pone a cero, el bit 7 no tendrá
efecto alguno, siendo ignorado.
INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO
SPHL F9 1 6

SPHL carga el contenido de los registros H y L en el stack.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


STA ADDR 32 PPQQ 3 13 Directo

STA ADDR almacena una copia del contenido actual del acumulador en la posición de memoria
especificada por ADDR.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


STAX RP 000X 0010 1 7 Reg. Indirecto

STAX RP almacena una copia del contenido del acumulador en la posición de memoria
direccionada por el par de registros especificados por RP (Par BC o par DE).

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


STC 37 1 4 CY

STC pone el flag de acarreo a 1. No afecta a otro flag.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


SUB reg 001 0xxx 1 4 Z,S,P,CY,AC Registro

El operando debe especificar uno de los registros del A al E, el H o el L. La instrucción resta el


contenido del registro especificado del contenido del acumulador, usando representación de los datos en
complemento a dos. El resultado es almacenado en el acumulador.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


SUB M 96 1 7 Z,S,P,CY,AC Reg. Indirecto

La instrucción resta el contenido de la posición de memoria direccionada por los registros H y L


del contenido del acumulador. El resultado es almacenado en el acumulador.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


SUI DATA D6 YY 2 7 Z,S,P,CY.AC Inmediato

SUI DATA resta el contenido de DATA del contenido del acumulador y almacena el resultado
en el acumulador. La instrucción SUI utiliza el flag de acarreo durante la sustracción, pero acciona dicho
flag para indicar la salida de la operación.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


XCHG EB 1 4 Registro

XCHG cambia el contenido de los registros H y L con el contenido de los registros D y E.


INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO
XRA reg 010 1XXX 1 4 Z,S,P,CY,AC Registro

Esta instrucción realiza una "O exclusiva" usando el contenido del registro especificado y el
contenido del acumulador. El resultado se almacena en el acumulador. Los dos flags de acarreo se ponen
a 0. (Una O exclusiva produce un 1 cuando los dos datos son diferentes).

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


XRA M AE 1 7 Z,S,P,CY,AC Reg. Indirecto

Se realiza una O exclusiva entre el contenido de la posición de memoria especificada por HL y el


contenido del acumulador, quedando el resultado en éste. Los dos flags de acarreo se ponen a 0.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


XRI DATA EE YY 2 7 Z,S,P,CY,AC Inmediato

XRI DATA realiza una O exclusiva entre el contenido de DATA y el contenido del acumulador.
El resultado se pone en el acumulador. Pone los flags de acarreo a cero.

INSTRUCCIO CODIGO OBJ BYT. CICL FLAGS AFECTADO DIRECCIONAMIENTO


XTHL E3 1 16 Reg. Indirecto

XTHL cambia los dos bytes de la posición más alta del stack con los dos bytes almacenados en
los registros H y L. Así XTHL salva el contenido actual del par HL y carga nuevos valores en HL.
(Cambia el contenido del L con la posición de memoria especificada por el stack pointer y el registro H es
intercambiado con el contenido del SP+1).
4.5 EJEMPLO DE ALGUNAS INSTRUCCIONES.
En el desarrollo de este apartado veremos el uso o empleo de diferentes instrucciones del
microprocesador 8085, intentando en su exposición, realizar una división o clasificación de las mismas
según se trate de instrucciones aritméticas, lógicas, de transferencia, de salto, etc. El echo de que se
planteen determinadas soluciones para obtener un resultado deseado, no quiere decir que no existan otras
posibles alternativas.

1. Aritméticas.

Para efectuar la suma entre el contenido del acumulador y el contenido de una dirección de
memoria especificada por la expresión DIRE, podemos hacer

LXI H,DIRE ; HL = DIRE


ADD M ; Acumulador = Acumulador + M

Donde M representa el contenido de la dirección de memoria apuntada por el par de registros HL.

Si además de sumar los contenidos de acumulador y dirección de memoria, deseamos también


sumar el CARRY, podremos hacer

LXI H,DIRE
ADC M ; Acumulador = Acumulador + M + CARRY

Si deseamos llevar a cabo una suma decimal entre el contenido del acumulador y el contenido de
un registro, por ejemplo el registro C, se deberá efectuar en primer lugar la suma y a continuación
proceder a realizar el ajuste decimal tal como se muestra a continuación

ADD C ; Acumulador = Acumulador + reg.C


DAA ; Efectúa el ajuste decimal

Para sumar también el CARRY, además de acumulador y registro C, tendremos que hacer

ADC C ; Acumulador = Acumulador + reg.C + CARRY


DAA ; Efectúa el ajuste decimal

Cuando deseemos sumar dos números de 16 bits, tendremos que emplear registros pares (BC, DE,
HL) y luego proceder a efectuar la suma entre ellos. Si suponemos que tenemos el primer sumando en el
par HL y que NUME contiene el valor del segundo sumando, podemos realizar las siguientes operaciones

LXI B,NUME ; BC = NUME


DAD B ; HL = HL + BC

Para poder sumar también el CARRY tendremos que realizar la siguiente modificación

LXI B,NUME
JNC SUMA
INX H
SUMA DAD B

Supongamos ahora que deseamos sumar dos números de 16 bits, estando situado el primer
número en las direcciones NUM1 y NUM1+1 (contiguas), y el segundo número en las direcciones NUM2
y NUM2+1 (contiguas). Para realizar esta operación podemos proceder del modo siguiente

LHLD NUM1 ; HL = dirección del número 1


XCHG ; DE = HL
LHLD NUM2 ; HL = dirección del número 2
DAD D ; HL = HL + DE
Si necesitamos efectuar una operación de resta, entre el contenido del acumulador y el contenido
de una dirección de memoria representada por DIRE, podemos emplear las instrucciones

LXI H,DIRE
SUB M

En caso de querer hacer una operación de resta entre el contenido del acumulador y el contenido
de un registro, por ejemplo el C, procederemos como sigue

MOV B,A ; Guardar acumulador en el registro B


MVI A,100 ; Acumulador = 100
SUB C ;A=A–C
ADD B ;A=A+B
DAA ; Ajuste decimal

Para incrementar el contenido de una dirección de memoria, señalada por DIRE, en una unidad,
podremos lograrlo con las instrucciones

LXI H,DIRE
INR M

Por el contrario, para decrementar en una unidad el contenido de la mencionada dirección de


memoria, haremos

LXI H,DIRE
DCR M

Si necesitáramos ahora decrementar en una unidad, un dato de 16 bits almacenado en posiciones


de memoria consecutivas marcadas por DIRE y DIRE+1, tendríamos que proceder del modo siguiente

LHLD DIRE ; Cargar HL con el dato de 16 bits


DCX H ; Decrementar el par HL
SHLD DIRE ; Guardar HL en la memoria(DIRE y DIRE+1)

Para multiplicar por dos el contenido de un registro, por ejemplo el B, tendremos que ejecutar las
instrucciones

MOV A,B
ADD A
MOV B,A

Si deseamos multiplicar por 4 el contenido del acumulador, no tendremos más que repetir dos
veces la operación de suma anterior, es decir

ADD A
ADD A

En caso de necesitar dividir por cuatro el contenido de una dirección de memoria apuntada por
DIRE, podremos hacer

LXI H,DIRE
MOV A,M
ANA A
RAR
ANA A
RAR
MOV M,A

En caso de necesitar comparar dos valores, por ejemplo uno situado en el registro C y otro
situado en una dirección de memoria (DIRE) se puede implementar la siguiente serie de instrucciones

LXI H,DIRE
MOV A,M
XRA C

Como sabemos, la función O exclusiva, compara los dos bytes (acumulador y registro C) bit a bit.
Si los bits comparados son iguales, el resultado es un 0 y si son diferentes es un 1. Por tanto sabremos que
el acumulador y el registro C son iguales si el resultado mostrado en el acumulador es 00H (flag Z a 1).

Para realizar el complemento a dos del contenido del acumulador emplearemos las instrucciones

CMA ; Complementa el acumulador


INR A ; Incrementa el acumulador en 1

Para llevar a cabo el complemento a dos de un registro doble, por ejemplo el registro par DE,
ejecutaremos las instrucciones siguientes

MOV A,D
CMA
MOV D,A
MOV A,E
CMA
MOV E,A
INX D
2. Lógicas.

Cuando se desea poner a cero determinados bits de un registro, por ejemplo los bits 3 y 5,
permaneciendo el resto de bits iguales, podremos emplear una instrucción de operación lógica AND con
la máscara apropiada. En este caso podríamos hacer

MOV A,E ; Carga el registro E en el acumulador


ANI 11010111B ; Operación AND con el acumulador
MOV E,A

Para realizar el proceso contrario, es decir, poner a uno determinados bits de un registro, por
ejemplo los bits 3 y 5, permaneciendo el resto igual, podremos utilizar la operación lógico OR del modo
siguiente

MOV A,E
ORI 00101000B
MOV E,A

Si ahora necesitamos complementar los bits 3 y 5 del mismo registro E haremos

MOV A,E
XRI 00101000B
MOV E,A
3. Transferencia.

Para cargar en el registro C, el contenido de la dirección de memoria apuntada por DIRE


haremos

LXI H,DIRE
MOV C,M

Cargar un registro par, con los datos almacenados en dos posiciones consecutivas de la memoria

LXI H,DIRE
MOV C,M
INX H
MOV D,M

Cargar una máscara de interrupciones con un DATO determinado para establecer cuales serán las
interrupciones activadas y cuales no

MVI A,DATO
SIM

Cuando necesitemos almacenar un DATO en la dirección de memoria señalada po DIRE


estableceremos las instrucciones

LXI H,DIRE
MVI A,DATO
MOV M,A

Si necesitamos poner a cero el flag CARRY o bien si necesitamos ponerlo a uno, emplearemos
las instrucciones siguientes

ANA A ; Pone a cero el CARRY


STC ; Pone a uno el CARRY

4. Saltos.

Cuando deseemos cargar en el Contador de Programa una dirección determinada, con lo que
pasaremos a ejecutar el programa en dicha dirección, podemos hacer

LXI H,DIRE
PCHL

Para saltar a una dirección de memoria determinada (DIRE) si se cumple que el par de registros
BC contiene el valor cero, ejecutaremos las siguientes instrucciones

MOV A,B
ORA C
JZ DIRE

Proceder a efectuar un salto a la dirección de memoria DIRE, cuando el dato contenido en el


registro D sea igual al valor almacenado en la dirección de memoria DIRE1

MOV A,D
LXI H,DIRE1
CMP M
JZ DIRE
Para efectuar una llamada incondicional a una subrutina denominada SUBRU emplearemos la
instrucción

CALL SUBRU

Si deseamos que al acceder a una subrutina determinada, no se altere el contenido de diversos


registros, habrá que guardarlos en la pila al comienzo de la subrutina y recuperarlos al salir de ella, de este
modo tendremos

SUBRU: PUSH B
PUSH D
PUSH PSW
PUSH H
.............
.............
.............
POP H
POP PSW
POP D
POP B
RET

Cuando entremos en un proceso dentro del programa, en el que no nos interese efectuar ninguna
acción sobre los registros del microprocesador ni efectuar ningún tipo de operación, disponemos de las
siguientes instrucciones

NOP
MOV A,A
MOV B,B
MOV C,C
MOV D,D
MOV E,E
MOV H,H
MOV L,L

Si deseamos trabajar con el bloque de interrupciones de que dispone el 8085, tendremos que
activarlas en el momento que nos interese mediante la máscara de interrupciones (la interrupción TRAP
no es enmascarable). Para ello tendremos que habilitar las interrupciones. Supongamos que deseamos
permitir las interrupciones 5.5 y 6.5 al tiempo que necesitamos enmascarar la interrupción 7.5.
Procederemos como sigue

MVI A,00001100B
SIM
4.6 EJERCICIOS
1. Analizar los sistemas de representación numérica decimal, binario, hexadecimal, BCD y ASCII.

2. Dados los números decimales 3, 9, 15, 27, 67 y 98, encontrar sus expresiones en los sistemas binario
y hexadecimal.

3. Hablar sobre los distintos “tipos de instrucciones”.

4. Explicar los siguientes modos de direccionamiento: Directo absoluto, por registro, por registro
indirecto e inmediato. Hablar sobre otros modos de direccionamiento conocidos.

5. Enumerar las instrucciones del microprocesador 8085, que se utilizan para incrementar y
decrementar registros.

6. Explicar las instrucciones EI y DI.

7. Enumerar las instrucciones del 8085 que realicen la operación lógica Y.

8. Enumerar las instrucciones del 8085 que realicen la operación lógica O.

9. Enumerar las instrucciones del 8085 que realicen saltos.

10. Explicar las instrucciones IN y OUT de comunicación con el exterior.


En nuestro próximo número:

El algoritmo
Los pseudocódigos
Las estructuras de datos
Los diagramas de flujo
Ejemplos de algoritmos