Issuu on Google+

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

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

A716H

A,B 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 ADC M

CODIGO OBJ 8E

BYT. 1

CICL 7

FLAGS AFECTAD Z,S,P,CY,AC

DIRECCIONAMIENTO 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 ADD reg

CODIGO OBJ 1000 0XXX

BYT. 1

CICL 4

FLAGS AFECTAD Z,S,P,CY,AC

DIRECCIONAMIENTO 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 ADD M

CODIGO OBJ 86

BYT. 1

CICL 7

FLAGS AFECTAD Z,S,P,CY,AC

DIRECCIONAMIENTO 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 ADI DATA

CODIGO OBJ C6 YY

BYT. 2

CICL 7

FLAGS AFECTADO Z,S,P,CY,AC

DIRECCIONAMIENTO 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 ANA reg

CODIGO OBJ 1010 0XXX

BYT. 1

CICL 4

FLAGS AFECTADO DIRECCIONAMIENTO 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 ANA M

CODIGO OBJ A6

BYT. 1

CICL 7

FLAGS AFECTADO DIRECCIONAMIENTO 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 ANI DATA

CODIGO OBJ E6 YY

BYT. 2

CICL 7

FLAGS AFECTADO Z,S,P,CY,AC

DIRECCIONAMIENTO 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 CALL LABEL CD PPQQ

BYT. 3

CICL 18

FLAGS AFECTADO

DIRECCIONAMIENTO 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 CC LABEL

CODIGO OBJ DC PPQQ

BYT. 3

CICL 9/18

FLAGS AFECTADO

DIRECCIONAMIENTO 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 CMA

CODIGO OBJ 2F

BYT. 1

CICL 4

FLAGS AFECTADO

DIRECCIONAMIENTO

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 CMC

CODIGO OBJ 3F

BYT. 1

CICL 4

FLAGS AFECTADO CY

DIRECCIONAMIENTO

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 CMP reg

CODIGO OBJ 1011 1XXX

BYT. 1

CICL 4

FLAGS AFECTADO Z,S,P,CY,AC

DIRECCIONAMIENTO 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 CMP M

CODIGO OBJ BE

BYT. 1

CICL 7

FLAGS AFECTADO Z,S,P,CY,AC

DIRECCIONAMIENTO 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 CNC LABEL

CODIGO OBJ D4 PPQQ

BYT. 3

CICL 9/18

FLAGS AFECTADO

DIRECCIONAMIENTO 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 CNZ LABEL

CODIGO OBJ C4 PPQQ

BYT. 3

CICL 9/18

FLAGS AFECTADO

DIRECCIONAMIENTO 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 CP LABEL

CODIGO OBJ F4 PPQQ

BYT. 3

CICL 9/18

FLAGS AFECTADO

DIRECCIONAMIENTO 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 CPE LABEL

CODIGO OBJ EC PPQQ

BYT. 3

CICL 9/18

FLAGS AFECTADO

DIRECCIONAMIENTO 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 CPI DATA

CODIGO OBJ FE YY

BYT. 2

CICL 7

FLAGS AFECTADO Z,S,P,CY,AC

DIRECCIONAMIENTO 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 CPO LABEL

CODIGO OBJ E4 PPQQ

BYT. 3

CICL 9/18

FLAGS AFECTADO

DIRECCIONAMIENTO 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 CZ LABEL

CODIGO OBJ CC PPQQ

BYT. 3

CICL 9/18

FLAGS AFECTADO

DIRECCIONAMIENTO 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 DAA

CODIGO OBJ 27

BYT. 1

CICL 4

FLAGS AFECTADO Z,S,P,CY,AC

DIRECCIONAMIENTO 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 DAD RP

CODIGO OBJ 00XX 1001

BYT. 1

CICL 10

FLAGS AFECTADO CY

DIRECCIONAMIENTO 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 DCR reg

CODIGO OBJ 00XX X101

BYT. 1

CICL 4

FLAGS AFECTADO DIRECCIONAMIENTO 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 DCR M

CODIGO OBJ 35

BYT. 1

CICL 10

FLAGS AFECTADO DIRECCIONAMIENTO Z,S,P,AC Registro Indire

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

INSTRUCCIO DCX RP

CODIGO OBJ 00XX 1011

BYT. 1

CICL 6

FLAGS AFECTADO

DIRECCIONAMIENTO 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 DI

CODIGO OBJ F3

BYT. 1

CICL 4

FLAGS AFECTADO

DIRECCIONAMIENTO

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 EI

CODIGO OBJ FB

BYT. 1

CICL 4

FLAGS AFECTADO

DIRECCIONAMIENTO

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 HLT

CODIGO OBJ 76

BYT. 1

CICL 4

FLAGS AFECTADO

DIRECCIONAMIENTO

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 IN PORT

CODIGO OBJ DB YY

BYT. 2

CICL 10

FLAGS AFECTADO

DIRECCIONAMIENTO 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 INR reg

CODIGO OBJ 00XX X100

BYT. 1

CICL 4

FLAGS AFECTADO Z,S,P,AC

DIRECCIONAMIENTO 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 INR M

CODIGO OBJ 34

BYT. 1

CICL 10

FLAGS AFECTADO Z,S,P,AC

DIRECCIONAMIENTO 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 INX RP

CODIGO OBJ 00XX 0011

BYT. 1

CICL 6

FLAGS AFECTADO

DIRECCIONAMIENTO 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 JC LABEL

CODIGO OBJ DA PPQQ

BYT. 3

CICL 7/10

FLAGS AFECTADO

DIRECCIONAMIENTO 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 JM LABEL

CODIGO OBJ FA PPQQ

BYT. 3

CICL 7/10

FLAGS AFECTADO

DIRECCIONAMIENTO 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 JMP LABEL

CODIGO OBJ C3 PPQQ

BYT. 3

CICL 10

FLAGS AFECTADO

DIRECCIONAMIENTO Inmediato

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

INSTRUCCIO JNC LABEL

CODIGO OBJ D2 PPQQ

BYT. 3

CICL 7/10

FLAGS AFECTADO

DIRECCIONAMIENTO 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 JNZ LABEL

CODIGO OBJ C2 PPQQ

BYT. 3

CICL 7/10

FLAGS AFECTADO

DIRECCIONAMIENTO 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 JP LABEL

CODIGO OBJ F2 PPQQ

BYT. 3

CICL 7/10

FLAGS AFECTADO

DIRECCIONAMIENTO 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 JPE LABEL

CODIGO OBJ EA PPQQ

BYT. CICL 3 7/10

FLAGS AFECTADO

DIRECCIONAMIENTO 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 JPO LABEL

CODIGO OBJ E2 PPQQ

BYT. 3

CICL 7/10

FLAGS AFECTADO

DIRECCIONAMIENTO 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 JZ LABEL

CODIGO OBJ CA PPQQ

BYT. 3

CICL 7/10

FLAGS AFECTADO

DIRECCIONAMIENTO 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 LDA ADDR

CODIGO OBJ 3A PPQQ

BYT. 3

CICL 13

FLAGS AFECTADO

DIRECCIONAMIENTO 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 LDAX RP

CODIGO OBJ 000X 1010

BYT. 1

CICL 7

FLAGS AFECTADO

DIRECCIONAMIENTO 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 LHLD ADDR

CODIGO OBJ 2A PPQQ

BYT. 3

CICL 16

FLAGS AFECTADO

DIRECCIONAMIENTO 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 MOV reg,reg

CODIGO OBJ 01dddsss

BYT. 1

CICL 4

FLAGS AFECTADO

DIRECCIONAMIENTO 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 MOV M,reg

CODIGO OBJ 0111 0sss

BYT. 1

CICL 7

FLAGS AFECTADO

DIRECCIONAMIENTO 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 MOV reg,M

CODIGO OBJ 01dd d110

BYT. 1

CICL 7

FLAGS AFECTADO

DIRECCIONAMIENTO 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 MVI reg,DAT

CODIGO OBJ BYT. 00ddd110 YY 2

CICL 7

FLAGS AFECTADO

DIRECCIONAMIENTO 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 MVI M,DATA 36 YY

BYT. 2

CICL 10

FLAGS AFECTADO

DIRECCIONAMIENTO Inmedi/Reg Indi

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

INSTRUCCIO NOP

CODIGO OBJ 00

BYT. 1

CICL 4

FLAGS AFECTADO

DIRECCIONAMIENTO

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 ORA reg

CODIGO OBJ 1011 0XXX

BYT. 1

CICL 4

FLAGS AFECTADO Z,S,P,CY,AC

DIRECCIONAMIENTO 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 ORA M

CODIGO OBJ B6

BYT. 1

CICL 7

FLAGS AFECTADO Z,S,P,CY,AC

DIRECCIONAMIENTO 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 ORI DATA

CODIGO OBJ F6 YY

BYT. 2

CICL 7

FLAGS AFECTADO Z,S,P,CY,AC

DIRECCIONAMIENTO 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 OUT PORT

CODIGO OBJ D3 YY

BYT. 2

CICL 10

FLAGS AFECTADO

DIRECCIONAMIENTO 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 PCHL

CODIGO OBJ E9

BYT. 1

CICL 6

FLAGS AFECTADO

DIRECCIONAMIENTO 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 POP RP

CODIGO OBJ 11XX 0001

BYT. 1

CICL 10

FLAGS AFECTADO

DIRECCIONAMIENTO 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 PUSH RP

CODIGO OBJ 11XX 0101

BYT. CICL 1 12

FLAGS AFECTADO

DIRECCIONAMIENTO 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 RAL

CODIGO OBJ 17

BYT. 1

CICL 4

FLAGS AFECTADO CY

DIRECCIONAMIENTO

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 RAR

CODIGO OBJ 1F

BYT. 1

CICL 4

FLAGS AFECTADO CY

DIRECCIONAMIENTO

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 RC D8

CODIGO OBJ 1 6/12

BYT. CICL FLAGS AFECTADO Reg. Indirecto

DIRECCIONAMIENTO

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 RET

CODIGO OBJ C9

BYT. 1

CICL 10

FLAGS AFECTADO

DIRECCIONAMIENTO 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 RIM

CODIGO OBJ 20

BYT. 1

CICL 4

FLAGS AFECTADO

DIRECCIONAMIENTO

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 RLC

CODIGO OBJ 07

BYT. 1

CICL 4

FLAGS AFECTADO CY

DIRECCIONAMIENTO

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 RM F8

CODIGO OBJ 1 6/12

BYT. CICL FLAGS AFECTADO Reg. Indirecto

DIRECCIONAMIENTO

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 RNC

CODIGO OBJ D0

BYT. 1

CICL 6/12

FLAGS AFECTADO

DIRECCIONAMIENTO 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 RNZ

CODIGO OBJ C0

BYT. 1

CICL 6/12

FLAGS AFECTADO

DIRECCIONAMIENTO 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 RP

CODIGO OBJ F0

BYT. 1

CICL 6/12

FLAGS AFECTADO

DIRECCIONAMIENTO 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 RPE

CODIGO OBJ E8

BYT. 1

CICL 6/12

FLAGS AFECTADO

DIRECCIONAMIENTO 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 RPO

CODIGO OBJ E0

BYT. 1

CICL 6/12

FLAGS AFECTADO

DIRECCIONAMIENTO 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 RRC

CODIGO OBJ 0F

BYT. 1

CICL 4

FLAGS AFECTADO CY

DIRECCIONAMIENTO

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 RST N

CODIGO OBJ 11XX X111

BYT. 1

CICL 12

FLAGS AFECTADO

DIRECCIONAMIENTO 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 1100 0111 1100 1111 1101 0111 1101 1111 1110 0111 1110 1111 1111 0111 1111 1111

RST C7 CF D7 DF E7 EF F7 FF

CONTADOR DE PROGRAMA 0000 0000 0000 0000 0000H 0000 0000 0000 1000 0008H 0000 0000 0001 0000 0010H 0000 0000 0001 1000 0018H 0000 0000 0010 0000 0020H 0000 0000 0010 1000 0028H 0000 0000 0011 0000 0030H 0000 0000 0011 1000 0038H


INSTRUCCIO RZ

CODIGO OBJ C8

BYT. 1

CICL 6/12

FLAGS AFECTADO

DIRECCIONAMIENTO 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 SBB reg

CODIGO OBJ 1001 1XXX

BYT. 1

CICL 4

FLAGS AFECTADO DIRECCIONAMIENTO 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 SBB M

CODIGO OBJ 9E

BYT. 1

CICL 7

FLAGS AFECTADO DIRECCIONAMIENTO 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 SBI DATA

CODIGO OBJ DE YY

BYT. 2

CICL 7

FLAGS AFECTADO Z,S,P,CY,AC

DIRECCIONAMIENTO Inmediato

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

CODIGO OBJ 22 PPQQ

BYT. 3

CICL 16

FLAGS AFECTADO

DIRECCIONAMIENTO 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 SIM

CODIGO OBJ 30

BYT. 1

CICL 4

FLAGS AFECTADO

DIRECCIONAMIENTO

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 SPHL

CODIGO OBJ F9

BYT. 1

CICL 6

FLAGS AFECTADO

DIRECCIONAMIENTO

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

INSTRUCCIO STA ADDR

CODIGO OBJ 32 PPQQ

BYT. 3

CICL 13

FLAGS AFECTADO

DIRECCIONAMIENTO Directo

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

INSTRUCCIO STAX RP

CODIGO OBJ 000X 0010

BYT. 1

CICL 7

FLAGS AFECTADO

DIRECCIONAMIENTO 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 STC

CODIGO OBJ 37

BYT. 1

CICL 4

FLAGS AFECTADO CY

DIRECCIONAMIENTO

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

INSTRUCCIO SUB reg

CODIGO OBJ 001 0xxx

BYT. 1

CICL 4

FLAGS AFECTADO Z,S,P,CY,AC

DIRECCIONAMIENTO 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 SUB M

CODIGO OBJ 96

BYT. 1

CICL 7

FLAGS AFECTADO DIRECCIONAMIENTO 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 SUI DATA

CODIGO OBJ D6 YY

BYT. 2

CICL 7

FLAGS AFECTADO Z,S,P,CY.AC

DIRECCIONAMIENTO 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 XCHG

CODIGO OBJ EB

BYT. 1

CICL 4

FLAGS AFECTADO

DIRECCIONAMIENTO Registro

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


INSTRUCCIO XRA reg

CODIGO OBJ 010 1XXX

BYT. 1

CICL 4

FLAGS AFECTADO DIRECCIONAMIENTO 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 XRA M

CODIGO OBJ AE

BYT. 1

CICL 7

FLAGS AFECTADO DIRECCIONAMIENTO 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 XRI DATA

CODIGO OBJ EE YY

BYT. 2

CICL 7

FLAGS AFECTADO Z,S,P,CY,AC

DIRECCIONAMIENTO 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 XTHL

CODIGO OBJ E3

BYT. 1

CICL 16

FLAGS AFECTADO

DIRECCIONAMIENTO 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 ADD M

; HL = DIRE ; 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 DAA

; Acumulador = Acumulador + reg.C ; Efectúa el ajuste decimal

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

; Acumulador = Acumulador + reg.C + CARRY ; 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 DAD B

; BC = NUME ; HL = HL + BC

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

SUMA

LXI B,NUME JNC SUMA INX H 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 XCHG LHLD NUM2 DAD D

; HL = dirección del número 1 ; DE = HL ; HL = dirección del número 2 ; 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 MVI A,100 SUB C ADD B DAA

; Guardar acumulador en el registro B ; Acumulador = 100 ;A=A–C ;A=A+B ; 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 DCX H SHLD DIRE

; Cargar HL con el dato de 16 bits ; Decrementar el par HL ; 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 INR A

; Complementa el acumulador ; 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 ANI 11010111B MOV E,A

; Carga el registro E en el acumulador ; Operación AND con el acumulador

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 STC 4.

; Pone a cero el CARRY ; Pone a uno el CARRY

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


Microprocesador 8085 (4) INTEL