You are on page 1of 70

GUA N 1

GENERALIDADES SOBRE MICROPROCESADORES

Sistemas Digitales
Un sistema digital puede definirse como un conjunto de componentes interconectados que procesan informacin en forma digital. La mayora de dispositivos que encontramos en nuestra vida diaria son sistemas digitales: calculadoras, computadores, relojes, mquinas de oficina, etc. Un sistema digital genrico puede esquematizarse como en la figura 1, este consta de una serie de elementos para la entrada, salida, procesamiento, control y almacenamiento de informacin. Los enlaces o relaciones entre estos elementos se establecen a travs de caminos de seal, por ejemplo cables, que llevan o transmiten informacin digital entre un punto y otro.

CONTROL

Entrada

Almacena -miento

Procesamiento

Almacena -miento

Salida

Transmisin

Figura 1. Estructura de un Sistema Digital

Sistema Digital con Microprocesador


Un sistema digital con microprocesador, est formado por tres bloques funcionalmente independientes como se muestra en la figura 2. Una unidad de entrada y salida, una unidad central de procesamiento (CPU) y una memoria.

Prof. Yomarvys Osorio

Unidad de E/S Unidad de Entrada

CPU Unidad de Control

Unidad de Memoria Memoria RAM

Unidad de Salida

Unidad Aritmtica Lgica

Memoria ROM

Figura 3. Estructura General de un Sistema Digital con Microprocesador A su vez, la unidad de entrada y salida se divide en un bloque de entrada y un bloque de salida. Del mismo modo, la CPU se divide en una unidad de control y una unidad aritmtico-lgica (ALU), y la memoria en ROM y RAM, obtenindose seis bloque o unidades con funciones muy especficas. Unidad de Entrada: Esta parte del circuito recibe informacin del mundo exterior, procedente de un operador humano o un fenmeno fsico (temperatura, velocidad, etc.) Unidad de Salida: La funcin de esta parte del circuito, es entregar la informacin binaria, ya procesada, al mundo exterior. Unidad de memoria: En la unidad de memoria se almacenan programas y datos, es una de las partes ms importantes del sistema. Se distinguen dos tipos: La memoria de solo lectura (ROM), es donde se escribe el programa o lista de instrucciones del sistema. La memoria de lectura y escritura (RAM), en esta se almacena informacin como datos o resultados que utiliza el sistema, y si es necesario se puede cambiar en cualquier momento. Unidad Central de Procesamiento (CPU): Es la que rene a la unidad de control y la unidad aritmticolgica (ALU) en un solo bloque. En la prctica la CPU se encuentra en forma de un circuito integrado llamado microprocesador. La unidad de control se encarga de la interpretacin y ejecucin de las instrucciones del programa, tambin controla todos los componentes del sistema por medio de lneas de conexin, enviando seales de coordinacin a estos. La unidad aritmtico-lgico como su nombre lo indica est encargada de realizar solo las operaciones lgicas y aritmticas.

El Microprocesador
Fueron creados en 1975. Es un circuito integrado que procesa o manipula la informacin almacenada en la memoria datos y/o instrucciones. Sus ccaractersticas principales son:

Prof. Yomarvys Osorio

Es un sistema digital abierto, es decir se tiene acceso a sus buses. Requiere de RAM externa de gran capacidad (Mbytes). Memoria de programa muy extensa. Requiere un decodificador por dispositivo y por puerto externo. Velocidades de operacin de hasta Giga/Tera MIPS. Son de uso y propsito general. Costo de desarrollo e implementacin elevado. Gran dificultad para el desarrollo / implementacin. Tendencia a la centralizacin de las tareas. Capacidad de realizar multitareas no limitadas. Muchos modos de direccionamiento. Casi todos tiene un set de instrucciones complejo (CISC).
Desde el punto de vista conceptual, un microprocesador ideal es un dispositivo digital que lee datos aplicados a N lneas de entrada, los procesa de acuerdo a las instrucciones secuenciales de un programa almacenado en su memoria y escribe los resultados del proceso en M lneas de salidas. En la figura 3 se representa el modelo idealizado de un microprocesador.

1 2 3 . . . N

P r o g r a m a

1 2 3 . . . M

Figura 3. Microprocesador Ideal Los datos de entrada provienen de interruptores, sensores, teclados, A/D, etc. Los datos de salida

dirigidos a actuadores, pantallas, impresoras, D/A, etc. El programa almacenado determina como deben ser procesados los datos de entradas y que informacin debe ser enviadas a las salidas. El programa se auxilia de una memoria que almacena los datos que procesa, ya que, en ciertas partes del programa su lgica no depende solo de los datos de entradas si no tambin del historial de las entradas hasta ese momento.
Mientras que en un microprocesador ideal no hay limitaciones de entradas/salidas en un microprocesador real el nmero de entradas/salidas es limitado, incluso utilizan las mismas lneas para las entradas/salidas de

Prof. Yomarvys Osorio

datos. Adicionalmente un microprocesador real tiene una cantidad de memoria limitada para datos e instrucciones por lo que requiere comunicarse con una memoria externa, esto por medio de unas lneas adicionales llamadas de direccionamiento. Finalmente el microprocesador real requiere sincronizar su operacin con los elementos externos, como la memoria, por lo tanto necesita de lneas de control.

Estructura de Buses de un Microprocesador


En electrnica digital, un bus, es simplemente un conjunto de conductores en paralelo que llevan una informacin comn (instrucciones, datos, direcciones, seales de control, etc.) de un lugar a otro del sistema. En la figura 4 se indica la forma de representar los dos tipos de buses ms comunes en electrnica digital, como lo son el unidireccional que solo puede llevar o solo puede traer informacin y el bidireccional que puede llevar y traer informacin. El nmero de lneas se escribe al inicio, al final o dentro del mismo. El microprocesador requiere de los Buses para conectarse con los elementos externos.

Si ste ma Di gi tal

Bus de 8 lneas

Si ste ma Di gi tal

[8]

Si ste ma Di gi tal

[8]

B us uni di r e c c i onal

B us bi di r e c c i onal

Figura 4. Representacin de Buses Estructura de Buses de un microprocesador: En la figura 5 se muestra la estructura de buses generalizada de un microprocesador, externamente este cuenta con un bus de datos, un bus de direcciones y un bus de control, adems de estos tres buses principales tambin dispone de un bus de alimentacin, el cual hace llegar la corriente de la fuente a sus distintos componentes.

Entradas de Control

Bus de Control
Salidas de Control

Bus de Direcciones

Bus de Datos E/S Fuente de Alimentacin

Figura 5. Estructura de Buses de un Microcontrolador Generalizado

Prof. Yomarvys Osorio

Bus de Datos: Lleva datos e instrucciones en forma bidireccional, es decir, desde y hacia el microprocesador. Las instrucciones provienen siempre de la memoria, los datos pueden provenir o ir a la memoria o a los dispositivos de entrada/salida. En general el nmero de entradas es igual al nmero de salidas, este nmero define la longitud de palabra de datos del microprocesador, las longitudes de palabra mas comunes son de 4, 8, 16, 32 y 64 bits. En la figura 6, se muestra un microprocesador de ocho bits (1 byte), representado como unidireccional con entradas y salidas independientes (a) y como bidirecional, las mismas lneas como entradas y salidas controladas por dos seales (b), lo que reduce el nmero de pines de datos a la mitad.

IN D7-D0 8

OUT D7-D0

8 8 S1 S0

S1 S0 0 0 0 1 1 0 1 1

ACCIN Impedir transferencia al Bus Salida hacia el Bus Entrada desde el Bus No hacer

a) Bus unidireccional

a) Bus bidireccional

Figura 6. Microprocesador con un Bus de Datos de Ocho Bits Bus de Direcciones: Contiene la informacin necesaria para seleccionar la posicin de una memoria o de una unidad de entrada/salida o un registro particular de la misma. El nmero disponible de estas lneas determina el tamao mximo de memoria o espacio de memoria que puede manejar un microprocesador. Ejemplos: 1) Si un microprocesador tiene una longitud de palabra de 8 bits (1 byte) y un bus de direcciones de 16 bits, entonces el espacio de memoria que es capaz de manejar el microprocesador ser de: 216 bytes = 65536 bytes = 64 Kbyte. (1 K = 1024) Es decir puede manejar una memoria de 65536 direcciones de 8 bits cada una. 2) Si un microprocesador tiene una longitud de palabra de 16 bits (1 word) y un bus de direcciones de 20 bits, entonces el espacio de memoria que es capaz de manejar el microprocesador ser de: 220 word = 1048576 word = 1 Mword. Es decir puede manejar una memoria de 1048576 direcciones de 16 bits cada una.

En resumen para un microprocesador de 8 bits, con un bus de direcciones de 16 bits, el espacio de memoria puede visualizarse como un mapa de 65536 recintos, que son las direcciones, y cada uno contiene 1 byte, siendo la ms baja 0000H y la mas alta FFFFH, como se muestra en la figura 7a.

Prof. Yomarvys Osorio

Adicionalmente la memoria puede dividirse de varias forma, en la figura 7b se muestra el mapa de una memoria dividida en segmentos, los cuales se incrementan en 1000H cada 4k (4096) recintos de espacio de memoria. La memoria puede dividirse tambin en pginas como se muestra en la figura 7c, cada pagina tiene 256 recintos y cubre 100H direcciones de memoria, es decir que tiene 4 pginas en 1 k de memoria. La pgina menos significativa iria desde 0000H hasta 00FFH, la siguiente desde 0100FH a 01FFH y as sucesivamente.

FFFF FFFE FFFD

64 K

0002 0001 0000

FFFF F000 E000 C000 B000 A000 9000 8000 7000 6000 5000 4000 3000 2000 1000 0000

1000

0C00

0800

0400
4K 1K

0100 0000

1 Pgina

a) Mapa de Memoria

b) Segmentacin Figura 7. Espacio de Memoria

c) Paginacin

Bus de Control: Contienen la informacin que enva o recibe el microprocesador hacia o desde los elementos del sistema para sincronizar sus operaciones. El nmero de lneas del bus de control es variable y depende del microprocesador en particular. En la figura 8 se muestra un conjunto tpico de lneas de control disponibles en la mayora de los microprocesadores.

CLK IN RESET IN INTP IN HOLD

CLK OUT RESET OUT INTP OUT HOLDA WRITE READ

Figura 8. Seales Tpicas de un Bus de Control en un Microprocesador

Prof. Yomarvys Osorio

CLK IN: Entrada de reloj, pulsos de reloj para producir secuencias de tiempo y control para las funciones internas del microprocesador. CLK OUT: Salida de reloj, es usado por los mdulos externos para sincronizar sus operaciones con el microprocesador. RESET IN: Peticin de reset, es usado para reiniciar al microprocesador. RESET OUT: Reconocimiento de reset, informa al resto de los mdulos que el P esta en reset. INTP IN: Peticin de interrupcin, el dispositivo externo conectado solicita al microprocesador que

sea atendido.
INTP OUT: Reconocimiento de interrupcin, el microprocesador indica por esta seal, que va a

atender la interrupcin.
HOLD: Peticin de Bus, se utiliza para suspender la operacin del microprocesador y llevarlo a un

estado llamado hola donde todos sus buses se colocan en alta impedancia
HOLDA: Garanta de Bus, informa que la peticin de bus ha sido atendida. READ: Lectura, informa que el bus de datos est en modo de entrada y entonces el microprocesador

aceptara datos del bus.


WRITE: Escritura, informa que el bus de datos est en modo de salida y entonces el microprocesador

suministrar datos al bus.

Organizacin de un Sistema Basado en Microprocesador


En la figura 9 se muestra la estructura organizativa de un sistema tpico basado en microprocesador. Note que consta de cuatro elementos principales: una memoria, un microprocesador o CPU, un puerto de entrada y un puerto de salida. Estos elementos pueden estar incluidos en una misma pastilla microcontroladora. Sin embargo, para este curso, asumiremos que todos ellos son componentes separados. El microprocesador est conectado a todos los otros componentes a travs del bus de datos. Las seales del bus de control, conjuntamente con las del bus de direcciones determinan que elementos se comunican con el microprocesador en un momento dado. Estos tres buses configuran el bus del sistema y el gobierno del mismo es responsabilidad del microprocesador. La secuencia de instrucciones que constituyen el programa que debe ejecutar el microprocesador estn almacenadas en un rea de la memoria. En el momento de arrancar el sistema, el microprocesador sita en el bus de direcciones la direccin de la posicin de memoria donde se encuentra la primera instruccin. Como resultado, la memoria sita esta informacin en el bus de datos.

Prof. Yomarvys Osorio

Despus de interpretar y ejecutar la primera instruccin, el microprocesador busca la siguiente instruccin, la ejecuta y as sucesivamente. La generacin de la serie de instrucciones necesarias para que el microprocesador realice una tarea determinada es lo que se denomina su programacin. El puerto de entrada constituye el puente de comunicacin entre el microprocesador y los datos suministrados por teclados, sensores, conversores A/D, interruptores y otros dispositivos de entrada similares. Normalmente, cuando un puerto de entrada tiene en su poder un dato vlido, se lo hace saber al microprocesador a travs de una lnea de control destinada para este propsito. El puerto salida le permite al microprocesador transferir datos hacia dispositivos de salida co mo pantallas, impresoras, conversores D/A, rels, solenoides, motores, lmparas, etc.
BUS DE CONTROL Y SINCRONIZACIN DEL SISTEMA

BUS DE DIRECCIONES

MEMORIA DE PROGRAMA

MICRO PROCESADOR

PUERTO DE ENTRADA

PUERTO PUERTO DE DE SALIDA SALIDA

BUS DE DATOS DISPOSITIVOS DE ENTRADA DISPOSITIVOS DE SALIDA

Figura 9. Diagrama de Bloque de un Sistema Basado en Microprocesador

Prof. Yomarvys Osorio

Comparacin de la Arquitectura de un Microprocesador con la de un Microcontrolador


Arquitectura Sus partes principales son:

Memoria de Programa ROM Memoria de Dato RAM

ALU

Reg. Bandera

Banco de Registros
Reg, Acumulador

Registro de Instrucciones

Bloque de Control Decodificador de Instrucciones Generador de Sincronismo

Contador de Programa

Reg. de Direcciones

Perifricos

Bloque de control: Encargado de seleccionar la secuencia de acciones de cada elemento del micro. Tiene circuitos para generar sincronismo, reloj, seales de control, entradas de interrupcin, etc. ALU: Unidad encargada de todas las operaciones lgicas-aritmticas. Es un circuito combinacional sin capacidad de almacenamiento. Consta de dos entradas, donde se le presentan los operandos, y dos salida, una para el resultado y la otra de indicadores de la clase de resultado. Para poder operar a la ALU se le asocia el Acumulador, las Banderas y lneas de control. Memoria de programa: Es el rea de memoria donde se almacenan, ordenadas, las instrucciones a seguir. Es una memoria ROM, PROM, EPROM, etc. Memoria de trabajo es el rea de memoria donde se puede escribir y leer, para guardar cualquier dato variable durante la ejecucin del programa. Es una memoria RAM. Banco de Registros para guardar informacin o datos importantes, de mayor frecuencia de uso o 9
Prof. Yomarvys Osorio

para guardar la configuracin de funcionamiento. Pueden o no formar parte del mapa de memoria RAM. Bus de Datos DB. Todos los elementos que manejan datos estn interconectados por estas lneas fsicas que recorren todo el sistema. Bus de Control CB. Son seales que se encargan de comandar el funcionamiento de cada elemento. Aunque cada bit del bus tiene diferente significado o destino, igual comparten la finalidad de controlar. Bus de Direcciones AB. Son las lneas que seleccionan, con que registro de la memoria se va a trabajar o cual puerto perifrico activar Acumulador es el registro que acta en conjunto con la ALU. Le suministra uno de los operandos o es destino del resultado. La mayora de las instrucciones lo usan como destino o fuente de datos. Bandera es el registro que guarda la informacin sobre la clase de resultado. Tambin puede guardar informacin sobre el estado del programa. Registro de Instrucciones en el se guarda la instruccin mientras se la interpreta e implementa la secuencia de acciones a realizar. Contador de Programa es un registro que guarda la posicin de la prxima instruccin a ejecutar. Registro de Direcciones es el registro para guardar la informacin sobre la posicin de memoria con la cual se esta trabajando. De el nace el AB. Puertos o Perifricos son dispositivos que comunican el sistema con el mundo exterior. Se toma de una instruccin a la vez, desde la memoria de programa, y se guarda en el registro de instrucciones. Esta accin se llama FETCH. Desde ah el bloque de control la decodifica y ejecuta los pasos indicados por ese comando. Genera la secuencia indicada por la instruccin. El bloque de control se une a todos los elementos del sistema mediante el bus de control. Sincroniza todas las acciones de los componentes del micro. Tambin dirige las acciones de los dispositivos del sistema. Por comodidad solo se dibuja la seccin ms relevante.

10

Prof. Yomarvys Osorio

Mediante el contador de programa (PC) se sabe que instruccin ejecutara a continuacin. Este contador es seteable. El bloque de control, si la instruccin lo exige, vara el valor del PC. La memoria es direccionada por el registro de direcciones, que se le conecta por el bus de direcciones, e intercambia datos mediante el bus de datos. La conexin hacia el exterior ya sea para tomar o entregar datos se realiza a travs de los puertos o perifricos. Estos sirven de acopladores entre el sistema y el exterior. Segn cuantas partes estn dentro de un solo chip se habla de procesador, microprocesador o microcontrolador.

Caractersticas Son dispositivos electrnicos digitales sincrnicos programables: Son digitales por que manejan seales discretas. Es decir con solo dos valores posibles, 1 o 0. Por lo tanto, la escritura de una salida o lectura de una entradas solo se realiza en forma pulsante. Son sincrnicos debido a que todas sus acciones estn acompasadas por una oscilacin de referencia o seal de RELOJ (CK). Son programables pues para funcionar adems de la alimentacin y seales externas necesitan de un programa que dirija sus acciones. Ejecutan una instruccin por vez, pero algunos procesan ms de una al mismo tiempo. Superponen la ejecucin de una instruccin con la bsqueda y almacenaje en el Reg de Instrucciones de la siguiente. Pueden verificar una condicin y determinar entre dos posibles respuestas. Ah es donde se presenta la supuesta inteligencia de un micro. Trabajan con baja tensin y corriente. De ah la necesidad de perifricos para interactuar con el exterior. Clasificacin Segn la cantidad de bit de los datos que maneja el micro u opera su ALU. Pueden ser de micros 8, 10, 16, 32, 64, etc bits. Segn la organizacin de la memoria del sistema puede ser: 11
Prof. Yomarvys Osorio

VON NEWMAN se usa un solo bus de datos y direcciones para la memoria de datos y programa. HARVARD cada rea de memoria tiene su bus de datos y direcciones.

ROM CPU RAM

ROM

RAM

CPU

Segn la arquitectura del sistema que pueden formar se dicen de: ARQUITECTURA CERRADA su sistema solo se puede tener lo que el fabricante suministra. No es posible agregarle RAM, ROM, u otros perifricos. ARQUITECTURA ABIERTA pueden formar sistemas de varias configuraciones de RAM, ROM o perifricos. La diferencia esta en si el micro tiene o no los buses accesibles al usuario. Eso esta relacionado con el nmero de pines del chip. Por cada lnea de los buses necesitan un pin. Segn el set de instrucciones, puede ser: SET EXTENDIDO, las instrucciones pueden ser de una o varias palabras. Y va a tener instrucciones muy complejas, potentes o redundantes. SET REDUCIDO, las instrucciones sern bsicas. Para compensar una instruccin potente se necesitan varias bsicas. El set de instrucciones es determinado por el fabricante, el cual usa las mismas para cada familia de dispositivos y le hace pequeas variaciones segn cada elemento. Segn la cantidad de memoria del sistema. La cantidad de memoria ROM nos habla de lo complejo que podr ser el programa y la cantidad de memoria RAM de la capacidad de manejar variables. Ejemplo: 12
Prof. Yomarvys Osorio

El PIC16F84A, Es un microcontrolador con CPU de 8 bit, arquitectura Harvard cerrada y un set de instrucciones reducido (RISC).

Sistemas con Microcontroladores

Dispositivos de Entrada

Microcontrolador Programa

Dispositivos de Salida

Diagrama general de un Sistema Microcontrolado

Dispositivos de Entrada Interruptores Microcontrolador Programa

Dispositivos de Salida Leds

Teclados

Displays

Sensores

Rels

Transductores

Parlantes

Algunos dispositivos que pueden formar parte de un sistema microcontrolado

13

Prof. Yomarvys Osorio

+5 V Circuito externo de reloj ROM CPU RAM Gnd Puerto IN Puerto OUT

Entradas

Salidas

Idea General de un Microcontrolador

Componentes Especiales de un Microcontrolador

Temporizador / Contador

Interrupciones Interrupciones

Microcontrolador

Memoria EEPROM

Salida PWM

Comunicacin serial RS-232

Funciones adicionales en los Microcontroladores

Principales Familias de Microcontroladores Referencia 8051 8052 8031 8032 8751 Memoria RAM 4K 8K Externa Externa 4 K (Eprom) Memoria ROM 128 256 128 256 128 Timers 2 3 2 3 2

Familia 80XX de INTEL 14


Prof. Yomarvys Osorio

Referencia 68HC05C4 68HC0508 68HC05C2 68HC705C4 68HC705K1 68HC05BM

Memoria RAM 4K 8K 2K 4 K (Eprom) 504 2K

Memoria ROM 176 176 176 176 32 y 64 176

Timers 1 1 1 1 1

Otros

1_mejorado Convertidor_A/D

Familia 68XX de MOTOROLA

Referencia 16C54 16C57 16C61 16C71 16C84 12C509

Memoria RAM 512 2K 1K 1K 1 K (EEprom) 1K

Memoria ROM 32 80 48 48 48 48

Pines O/I 12 20 12 12 12 6

Otros

Interrupcin Convertidor_A/D

Familia PIC16CXX de MICROCHIP

15

Prof. Yomarvys Osorio

EL MICROPROCESADOR 8085

Distribucin De Pines Del 8085


El 8085 es un potente microprocesador paralelo de 8 bits fabricado por INTEL con tecnologa NMOS (MOS de anal N). En la figura 1, se muestra la distribucin de pines de este chip, disponible en dos versiones: estndar y de alta velocidad.

Figura 1. Distribucin de Pines del 8085 La primera se designa como 8085A y opera a 3 MHz. La segunda se designa 8085A-2 y opera a 5 MHz. La frecuencia de operacin se establece mediante un cristal, una red RC o un reloj externos. Externamente, el 8085 cuenta con un bus de datos de 8 bits y un bus de direcciones de 16 bits parcialmente multiplexado sobre el bus de datos, Esta ltima caracterstica le permite direccionar hasta 2 16 = 65536 bytes de memoria. En la figura 2 se muestra la agrupacin de los 40 pines del 8085 en las siguientes categoras: Un bus de datos/direcciones multiplexado de (8) lneas (AD7-AD0). Un bus de direcciones de ocho (8) lneas (Al5-A8). Un bus de control de interrupciones de seis (6) lneas (INTR, TRAP, RST 5.5, RST 6.5, RST 7.5, INTA). Un bus de comunicacin serie de dos (2) lneas (SID, SOD). Un bus de seales de control de once (11) lneas (ALE, RD, WR, IO/M, SO, S1, READY, HOLD, HLDA, RESET IN, RESET OUT). Un bus de seales de reloj de tres (3) lneas (Xl, X2, CLK). Un bus de alimentacin de dos (2) lneas (VCC, GND).

16

Prof. Yomarvys Osorio

Alimentacin y tierra Puesta a cero Reloj Control de interrupciones Puerta de E/S serial

8 8

Bus de direcciones Bus de datos/direccin Control de direcciones Seleccin de lectura Seleccin de escritura Habilitacin de M E/S Bus de control Estado ciclo mquina Posicin de DMA Conformidad en DMA Posicin de espera

P 8085

Figura 2. Diagrama Funcional del 8085 Las lneas Vcc (positivo, pin 40) y Vss GND (negativo, pin 20) constituyen el bus de alimentacin. El 8085 puede operar con tensiones de alimentacin entre 4,75 V y 5,25V. El voltaje nominal de trabajo es 5 V. El consumo mximo de corriente es del orden de 170 mA. Las lneas de entrada X1 (pin 1) y X2 (pin 2) son los terminales de conexin del cristal de cuarzo o la red RC externa que maneja el generador interno de pulsos de reloj. La seal de reloj resultante se obtiene en la lnea de salida CLK (pin 37). La entrada Xl puede ser tambin controlada por una seal de reloj externa. En este caso, la frecuencia de salida es la mitad de la frecuencia de entrada. En la figura 3 se muestran algunas configuraciones tpicas de circuitos de reloj para el 8085.

a) Cristal de Cuarzo

b) Red RC (3 MHz)

c) Reloj Externo (1 6 MHz)

Figura 3. Configuraciones Tpicas de Circuitos de Reloj para el 8085 Las lneas tri-state unidireccionales de salida A8 (pin 21) hasta A15 (pin 28) constituyen la parte alta del bus de direcciones. Transportan los 8 bits ms significativos de la direccin de memoria. Estas lneas se pueden conectar directamente al bus de direcciones del sistema sin necesidad de circuitera adicional. Las lneas tri-state AD0 (pin 12) hasta AD7 (pin 19) constituyen el bus multiplexado de datos y direcciones. Durante el primer ciclo de una instruccin, estas lneas son unidireccionales y transportan los 8 bits menos significativos (A0-A7) de la direccin de memoria o de entrada/salida seleccionada. Durante el segundo y tercer ciclos, estas lneas son bidireccionales y se convierten en el bus de datos de 8 bits del sistema. La salida ALE (Address Latch Enable: habilitador del registro de direcciones, pin 30) informa a la circuitera externa la naturaleza de la informacin presente en el bus de datos y direcciones. Especficamente, ALE se hace alta cuando el microprocesador enva travs de las lneas AD0-AD7 los 8 bits menos significativos de la palabra de direccin. Esto sucede durante el primer ciclo de reloj de una instruccin. La informacin respectiva (los 8 bits menos significativos de la palabra de direccin) puede almacenarse en un o registro externo, como se muestra en la figura 4. En este caso, la seal ALE habilita el registro, permitiendo que el dato de las lneas AD7-AD0 se transfiera a las salidas A7-A0. Durante el segundo y tercer ciclos, la lnea ALE

17

Prof. Yomarvys Osorio

permanece inactiva, es decir en bajo, y por tanto el registro ignora la informacin de datos ( D0-D7) que circula por el bus comn.

Figura 4. Separacin de los Buses de Datos y Direcciones en el 8085 Las salidas S0 (pin 29), Sl (pin 33) e IO/M (pin 34) informan sobre el estado (status) de las operaciones realizadas por el microprocesador. Especficamente, un alto en la lnea IO/M indica una operacin de lectura o escritura desde o hacia un puerto de entrada/salida y un bajo en la misma lnea indica una operacin de lectura o escritura desde o hacia una posicin de memoria. Del mismo modo, S1 y S0 informan sobre el tipo de ciclo en progreso. Especficamente, S1S0=00 indica que el microprocesador se encuentra en estado halt, es decir detenido, S1S0=01 indica que est realizando una operacin de lectura, S1S0=10 indica que esta realizando una operacin de escritura y S1S0=11 indica que est realizando la bsqueda de un op-code o cdigo de instruccin. La salida tri-state RD (read: lectura, pin 32), activa en bajo, indica que el microprocesador est realizando una operacin de lectura desde la posicin de memoria o el puerto de entrada seleccionado por el bus de direcciones y que el bus de datos esta disponible para la transferencia de informacin. La salida tri-state WR (write: escritura, pin 31), activa en bajo, indica que el microprocesador est escribiendo la informacin presente en el bus de datos en la posicin de memoria o el puerto de salida seleccionado por el bus de direcciones. La entrada READY (listo, pin 35) se utiliza para comunicar el 8085 con dispositivos de entrada/salida o de memoria relativamente lentos, es decir con tiempos de acceso inferiores a los de trabajo del microprocesador. Normalmente, con dispositivos rpidos la lnea READY se mantiene activa todo el tiempo para indicar que el microprocesador est preparado para enviar o recibir datos. Si READY se hace alta durante un ciclo de lectura o escritura, el microprocesador entiende que la memoria o el perifrico est listo para enviar o recibir datos. Si READY es de nivel bajo, el microprocesador entra en un estado de espera hasta que las seales del dispositivo externo indiquen que este ultimo est listo para transmitir o recibir datos. La entrada HOLD (pin 39) le indica al 8085 que un dispositivo externo solicita los buses de datos, direcciones y control. Al recibir la seal HOLD, el microprocesador completar las transferencias de datos actuales en los buses y situar las lneas de datos, direcciones, lectura, escritura e IO/M en estado de alta impedancia, permitiendo que el dispositivo externo asuma el control del bus del sistema. La salida HLDA (Hold Acknowledge: reconocimiento de hold, pin 38) indica a la circuitera externa que el microprocesador ha recibido una peticin de HOLD y que los buses quedarn liberados en el siguiente ciclo de reloj. La seal HLDA se desactiva luego de haberse removido la seal de HOLD. Medio ciclo despus el microprocesador retorna el control de los buses.

18

Prof. Yomarvys Osorio

La entrada INTR (Interrupt Request: peticin de interrupcin, pin 10) se usa como lnea de interrupcin de propsito general. Puede ser enmascarada (ignorada) por software y posee la ms baja prioridad. En combinacin con la salida INTA (lnterrupt Acknowledge: reconocimiento de interrupcin, pin 11) y el bus de datos, puede atender varios dispositivos perifricos. La lnea TRAP (pin 6) se utiliza como entrada para una seal de interrupcin llamada trap, la cual obliga al microprocesador a parar la ejecucin de su programa para atender los requerimientos del dispositivo externo que activa dicha seal. Su prioridad es la ms alta y no puede ser enmascarada por el microprocesador. Esta lnea se utiliza principalmente en situaciones de emergencia, por ejemplo una falla en el sistema de alimentacin. Las lneas RST 7.5 (pin 7). RST 6.5 (pin 8) y RST 5.5 (pin 9) son las entradas de las llamadas interrupciones enmascarables. Su funcin es idntica a la de la interrupcin TRAP pero, a diferencia de sta, pueden ser enmascaradas por el software que ejecuta la CPU. Cada una de estas lneas estn asociadas a un flipflop habilitador de interrupciones interno que se puede inspeccionar y alterar utilizando instrucciones especiales. El enmascaramiento se refiere a esta circunstancia. Las cinco lneas de interrupcin anteriores tienen una prioridad fija de atencin. Esto significa que si en un momento dado hay dos o ms de estas seales activas, solamente ser atendida la que tenga la ms alta prioridad. El orden de prioridad, de mayor a menor, de estas lneas es TRAP, RST 7.5, RST 6.5, RST 5.5 e INTR. Cada uno de estos pines slo puede ser utilizado por un dispositivo externo. La lnea RESET IN (entrada de reset, pin 36), activa en bajo, inicializa el contador de programa en 0s y borra los flip-flops internos de habilitacin de interrupciones y de reconocimiento de hold. Sita tambin los buses de datos y direcciones y las lneas tri-s tate del microprocesador en estado de alta impedancia. Esta situacin se mantiene mientras la lnea de entrada RESET IN sea baja.

+5 Vcc 1N91 4 75 K RESET IN 1 F

Reset

Figura 5. Circuito de Reset para el 8085 La lnea RESET OUT (salida de reset, pin 3), activa en alto, informa a la circuitera externa que el microprocesador se encuentra en estado de reset. Se utiliza generalmente como seal general de reset del sistema y est sincronizada con la seal de reloj (CLK OUT) del microprocesador. Las lneas SOD (Serial Output Dala: salida serie de datos, pin 4) y SID (Serial Input Data: entrada serie de datos, pin 5) se utilizan para transferir informacin binaria desde y hacia dispositivos externos de comunicacin serie. Estos terminales se controlan por software utilizando dos instrucciones denominadas RIM y SIM.

Caractersticas Elctricas
Es importante conocer las caractersticas elctricas de un microprocesador para garantizar que trabaje dentro de lmites seguros. En la figura se resumen algunos parmetros elctricos notables del 8085 segn especificaciones de su fabricante (INTEL). La exposicin a condiciones mximas durante perodos prolongados puede afectar seriamente la confiabilidad del dispositivo o causar daos irreversibles en su estructura interna.

19

Prof. Yomarvys Osorio

Smbolo TA Vcc VIL VIH VOL VOH Icc IOL IHL

Parmetro Temperatura Alimentacin Voltaje de entrada bajo Voltaje de entrada alto Voltaje de salida bajo Voltaje de salida alto Corriente de alimentacin Corriente mxima en bajo Corriente mxima en alto

Mnimo Mximo Unidad 0 4,75 -0,5 2,0 70 5,25 +0,8 Vcc +0,5 0,45 2,4 170 2 400 C Volt Volt Volt Volt Volt mA mA uA

Condiciones de prueba

IOL = 2 mA IOL=400 uA

Arquitectura Interna Del 8085


La organizacin interna (arquitectura) del microprocesador 8085 se encuentra representada en la figura 1. El 8085 es una CPU de 8 bits porque su bus de datos es de 8 bits y su unidad aritmtico-lgica (ALU) esta diseada para operar con palabras de 8 bits. La ALU, entre otras funciones, puede incrementar o decrementar una cantidad binaria, realizar operaciones lgicas corno AND, OR y XOR y aritmticas como adicin, sustraccin o comparacin con palabras de 8 bits.

20

Prof. Yomarvys Osorio

Figura 1. Arquitectura del 8085 El bus interno de datos sirve como medio de comunicacin entre los diferentes bloques y est conectado por medio del acoplador o buffer tri-state de datos y direcciones al bus externo del mismo nombre. Conectados a este bus interno se encuentran 6 registros de propsito general designados como B, C, D, E, H y L, los cuales pueden operar individualmente como registros de 8 bits o como registros pares de 16 bits. En este ltimo caso, B y C conforman el registro BC, D y E el registro DE y H y L el registro HL. Existen instrucciones diferentes para manejar los registros en forma individual o por parejas. El registro B, por ejemplo, puede utilizarse solo para almacenar un byte de datos y acompaado del registro C para almacenar una palabra de datos o de direccin de 16 bits. El ms importante registro de uso general es el acumulador (A), un registro especial de 8 bits que retiene una de las cantidades a ser operada por la ALU y recibe el resultado de una operacin realizada por la misma. La informacin del acumulador (A) junto con la suministrada por los cinco flip-flops de banderas constituyen la llamada palabra de estado del procesador o PSW (Processor Status Word). Estos flip-flops se consideran como parte de un registro de 8 bits llamado registro de estado, mostrado en detalle en la figura 2. Despus de la ejecucin de cada instruccin aritmtica o lgica, los flip-flops del registro de estado se cargan con un 0 (reset) o un 1 (set) para indicar condiciones propias de la operacin realizada. Banderas (Flag) S Z AC P CY De Acarreo De Paridad De Auxiliar de acarreo

21

Prof. Yomarvys Osorio

De Cero De Signo Figura 2. Registro de Estados del 8085 La funcin de las banderas se puede resumir en los siguientes trminos: La bandera de acarreo (CY) se coloca en 1 cuando al realizar una suma se produce un acarreo (carry) de los dos bits ms significativos o cuando en una resta se produce un prstamo (borrow) al efectuar la diferencia de los dos bits de ms peso. La bandera indicadora de paridad (P) se coloca en 1 si el dato almacenado en el acumulador es de paridad par, es decir tiene un nmero par de 1s, y en 0 si es de paridad impar, es decir tiene un nmero impar de ls. La bandera auxiliar de acarreo (AC) se hace alta (1) para indicar que se produjo un acarreo desde el bit 3 del acumulador, de la misma manera que CY indica un acarreo desde el bit 7. El flag AC se conoce tambin como bandera sealizadora de arrastre BCD puesto que indica, en una operacin de adicin o sustraccin de cantidades BCD, que debe hacerse un ajuste decimal con el fin de mantener el resultado en formato BCD. La bandera de cero (Z) se hace alta para indicar que la operacin previamente ejecutada es igual a cero, es decir, el acumulador o el registro que guarda el resultado ha quedado cargado con 0s. Mientras esto no suceda, la bandera Z permanece en 0. La bandera de signo (S) es una copia del bit 7 del acumulador, es decir adopta la condicin del MSB despus de la ejecucin de una instruccin aritmtica lgica. Una bandera de signo alta (1) representa un numero negativo, mientras que una bandera de signo baja (0) representa un nmero positivo. Cualquiera de estas banderas puede ser usada para informarle al microprocesador que salte o bifurque el curso normal del programa a otro programa o a otra parte del mismo. Por ejemplo, si el resultado de una operacin es cero, la bandera Z puede utilizarse para que el control del programa se transfiera a una subrutina encargada de generar un mensaje de error. Adems del acumulador y el registro de estado, otro circuito asociado a la ALU es el registro temporal, encargado de recibir un dato desde el bus interno de datos y retenerlo para ser procesado por la ALU. Este registro interviene en la ejecucin de mayor parte de las instrucciones aritmticas y lgicas asignadas al microprocesador. El apuntador de la pila (SP) es un registro de 16 bits de propsito especial que se emplea usualmente para almacenar una direccin que da acceso a una regin de la memoria conocida como pila, definida por el programador. En la pila, el microprocesador guarda temporalmente los contenidos de todos sus registros cuando debe transferir el control del programa a una subrutina. El manejo de la pila se discutir en lecciones posteriores. El contador de programa (PC) es un registro de 16 bits de propsito especial que indica la direccin donde se encuentra almacenada el prximo byte de la instruccin a ejecutar. El contador de programa se comunica con el exterior a travs del seguro de direcciones, conectado a los acopladores de buses tal como se indica en la figura1. El seguro o latch de direcciones cumple dos funciones. En primer lugar, selecciona una direccin a ser enviada desde el puntero de la pila, el contador de programa o cualquiera de los registros pares de 16 bits BC, DE o HL. En segundo lugar, conserva esta direccin hasta que sea requerida por el bus de direcciones. Un incrementador/decrementador incorporado permite aumentar o reducir en 1 el contenido de cualquiera de los registros de 16 bits. El registro de instrucciones (IR) es el encargado de retener el cdigo de operacin de la instruccin a ejecutar con el fin de que sea interpretado por el decodificador de instrucciones y codificador de ciclos de mquina. Una vez interpretada la instruccin, este ltimo circuito produce, a travs del bloque de control y tiempos, la secuencia de microinstrucciones necesarias para su ejecucin. En otras palabras, el cdigo de operacin almacenado en el registro de instrucciones se convierte por medio de la circuitera interna del

22

Prof. Yomarvys Osorio

microprocesador en una serie de seales en el bus de control externo y de operaciones internas, formando el llamado ciclo de instruccin de la CPU. Por ejemplo, si despus de capturar e interpretar el cdigo de operacin de una instruccin esta le ordena al microprocesador una operacin de suma, el decodificador reconocer que necesita buscar en la memoria el dato que debe ser sumado al acumulador y dirigir la circuitera de control para enviar otro pulso de lectura, transferir el dato al bus de datos y llevarlo al registro temporal. Una vez que se completa la suma, la circuitera de control dirige el resultado al acumulador. A continuacin incrementa el contador de programa y enva otro pulso de lectura con el fin de conseguir el cdigo de operacin de la prxima instruccin del programa. En la siguiente seccin describiremos ms en detalle la forma como el 8085 ejecuta una instruccin.

Ejemplo de Ejecucin de una Instruccin con 8085


Para comprender cabalmente el proceso seguido por el microprocesador 8085 para ejecutar una instruccin debemos aclarar primero el significado de algunos trminos. Inicialmente, es importante recordar que todas las operaciones de una CPU estn coordinadas y sincronizadas por una seal maestra de reloj. En el 8085, la frecuencia de la seal de reloj es igual a la mitad de la frecuencia de oscilacin del cristal colocado entre los terminales X1 y X2. Por ejemplo, para operar un 8085A a su mxima frecuencia de trabajo (3 MHz) debe utilizarse un cristal de 6 MHz. La unidad bsica de tiempo es el estado (T), equivalente a un ciclo completo de reloj. En el 8085 un ciclo mquina puede durar entre 3 y 6 estados. Un ciclo de instruccin del 8085, que es el proceso de captar una instruccin de memoria y ejecutarla, consta de 2 a 5 ciclos mquina. Hay unos 10 tipos diferentes de ciclos mquina, la mayora de los cuales implican la transferencia de un byte a travs del bus del sistema (es decir, una operacin de lectura o escritura) y algunas operaciones internas de la CPU. El nmero y los tipos de ciclos de mquina utilizados dependen de la instruccin de que se trate. Aclarados estos trminos, mostraremos, mediante un ejemplo sencillo, la forma como el microprocesador 8085 busca y ejecuta sus instrucciones. Para tal fin, consideremos la instruccin <<sumar al acumulador el byte 88>>, la cual se especifica en lenguaje de mquina del 8085 como C6 88 y en ensamblador como ADI 88. El cdigo de operacin es, naturalmente, C6 y l operando es 88. Para comprender cabalmente el proceso vamos a suponer que la instruccin se encuentra almacenada a partir de la posicin de memoria 2A00H. Esto implica que, al comenzar la ejecucin de la instruccin, el contador del programa se encuentra sealando a la posicin 2A00H. De este modo, el listado en lenguaje de mquina de la instruccin sera: Direccin Contenid

o
2A00 2A01 C6 88

Son dos los ciclos de mquina (MC) requeridos por la instruccin ADI, tal como se muestra grficamente en la figura 3. El proceso se puede resumir a grandes rasgos as: Ciclo de Instruccin

MC1 Captacin de Op-Code T1 T2 T3 T4

MC2 Lectura de Memoria T1 T2 T3

23

Prof. Yomarvys Osorio

Leer y decodificar el Byte Leer el Byte siguiente y del cdigo de operacin. sumarlo al acumulador. Incrementar el PC Incrementar el PC Figura 3. Ciclo de Instruccin con 8085 En el primer ciclo de mquina (MC1) se suceden la captacin del cdigo de operacin y la decodificacin de la instruccin. Durante este ciclo, la seal IO/M se hace baja (0) para indicar que se trata de una operacin realizada en la memoria. Las seales S0 y S1 se hacen altas, indicando en forma completa que el microprocesador proceder a leer un cdigo de operacin. El contenido del registro contador de programa se lleva a los buses a travs del seguro de direcciones y los dos acopladores o buffers. La parte alta de la direccin permanece durante tres estados en el bus de direcciones. La parte baja se mantiene durante un solo estado en el bus de datos/direcciones. En este tiempo se activa la seal ALE, para retener la informacin por medio del latch externo. Una vez presentes los 16 bits en el bus de direcciones, se activa la seal RD para indicar a la memoria que ya puede transferir el byte direccionado al bus de datos ( AD0-AD7). El cdigo obtenido (C6) se transmite a travs del bus interno hacia el registro de instrucciones. Esto sucede durante el tercer estado ( T3). En el estado T4 se decodifica el cdigo de operacin y se incrementa en uno el contador del programa, sealando entonces el dato a sumar. El resultado de la decodificacin le indica al microprocesador el nmero y tipo de ciclos de mquina que siguen a continuacin (en nuestro caso un solo ciclo de lectura). En el segundo ciclo mquina (MC2), la CPU lee el byte siguiente y lo suma al acumulador. Las seales de control indican una lectura simple de memoria (IO/M=0; S1=1; S0=0). El contenido del contador del programa (ya incrementado) se coloca en el bus de direcciones mediante el mtodo descrito anteriormente y se activa entonces la seal RD para captar el byte siguiente de la instruccin (88H). El dato es transferido, por medio del bus interno, hacia el registro temporal. La unidad aritmtico-lgica (ALU) suma los contenidos del acumulador y el registro temporal, almacenando el resultado en el acumulador (el dato anterior se pierde). El registro de estado se modifica de acuerdo con el resultado de la operacin. El contador del programa se incrementa de nuevo. En algunas versiones del 8085, durante el segundo ciclo mquina slo se completa la transferencia de datos hacia la CPU. Para realizar la suma son necesarios uno o dos ciclos ms. Sin embargo, estos ciclos de reloj extra se solapan con el ciclo mquina de captacin del cdigo de operacin de la siguiente instruccin, de forma que la instruccin ADI slo utiliza efectivamente dos ciclos mquina con siete estados.

Circuitos de Soporte del 8085. Sistema Mnimo


Existe un nmero bastante grande de circuitos de apoyo para el microprocesador 8085, entre los que se incluyen memorias RAM, ROM y circuitos integrados de interface de entrada/salida. Entre los ms tiles circuitos de soporte del 8085 se encuentra la interface programable de perifricos (PPI) 8255. En la figura 4 se muestran la distribucin de pines y la organizacin interna de este chip, el cual contiene tres puertos programables de entrada/salida de ocho bits (A, E y C). El 8255 permite la programacin independiente de sus tres puertos para que acten como entradas, salidas o en forma bidireccional. Adems, es posible utilizar el puerto C como dos bloques de lneas de control para la transmisin asncrona de datos por los puertos A y E. Los modos de operacin se consiguen mediante una palabra de control que se enva desde la CPU al 8255 a travs del bus d datos.

24

Prof. Yomarvys Osorio

b) Diagrama Funcional
Seleccin de registro interno Bus de Datos
8 D0-D7 A0 A1 8 PA0-PA7 4 PC4-PC7 4 PC0-PC3 CS RD WR Al Microprocesador 8 PB0-PB7 Puerto B Puerto C (L) Puerto C (H) Puerto A

8285
Al Mundo Exterior

a) Distribucin de Pines

Figura 4. Internas Programable (PPI) 8255 Como vimos en una seccin anterior, es necesario un biestable externo para leer los bytes desde el bus multiplexado de datos y direcciones del 8085. Se han diseado varios circuitos de apoyo para el 8085 que incluyen internamente el biestable de direccin. Un ejemplo de lo anterior es el circuito integrado de soporte 8155, el cual incorpora en una misma cpsula tres puertos de entrada/salida en paralelo (dos de 8 bits y uno de 6 bits). 256 bytes de memoria RAM y un temporizador programable. Dado que el 8155 puede demultiplexar internamente sus buses de datos y direcciones, puede ser conectado directamente al bus de datos y direcciones del 8085. En la figura 5 se muestra el diagrama de bloques y la configuracin de pines del 8155. Los puertos A, B y C son similares en su configuracin y funcionamiento a sus homlogos en el 8255. Se pueden utilizar como tres puertos de entrada/salida independientes o con las seis lneas del puerto C como seales de peticin de interrupcin y de preparacin/conformidad para la transmisin de datos por los puertos A y B.
b) Diagrama Funcional

a) Distribucin de Pines

Figura 5. Circuito de Soporte 8155

25

Prof. Yomarvys Osorio

El temporizador programable del 8155 es bsicamente un contador direccionable de 14 bits que cuenta hacia abajo en respuesta a los pulsos recibidos por la lnea TIMER IN (pin 3). Genera varios tipos de seales por la lnea TIMER OUT (pin 6) cuando el contador llega a algn valor definido por el programador. Las seales generadas por el temporizador pueden ser utilizadas en el control de dispositivos de entrada/salida o para interrumpir a la CPU. La gran ventaja que ofrece el 8155 es la posibilidad de conformar un pequeo microcomputador sin necesidad de acudir a otros circuitos de apoyo, fuera de una unidad de programacin por medio de la cual se introducen los programas en la memoria. El sistema de la figura 6 es un claro ejemplo de ello, en esta, muestra un sistema mnimo basado en el 8085 que nos permitir realizar los experimentos y ejercicios desarrollados y planteados a lo largo del presente curso.

IC1 8085

IC2 8155

Figura 6. Circuito de Soporte 8155 Un circuito de soporte similar al 8155 es el 8355, el cual combina una memoria ROM de 2048 (2K) bytes y dos puertos de entrada/salida de 8 bits. Al igual que el 8155, el 8355 puede demultiplexar los ocho bits del bus de datos/direcciones. Sin embargo, el 8355 debe utilizar tres lneas extra de direccin para acceder a los 2 kilohytes de memoria disponibles en su interior. En el 8355 no se dispone de las seales de conformidad o de interrupcin con que cuentan el 8155 y el 8255.

26

Prof. Yomarvys Osorio

INTRODUCCIN A LA PROGRAMACIN DE MICROPROCESADORES Un programa es una lista completa de instrucciones que se le proporciona al microprocesador para que realice operaciones simples en un orden determinado. Las instrucciones que constituyen un programa se almacenan en el sistema como patrones de 1s y 0s, organizados en grupos de 8, 16, 32, etc. bits, dependiendo de la longitud de palabra de datos del microprocesador. Para realizar las operaciones indicadas por una instruccin, el microprocesador debe comenzar por direccionar la posicin o las posiciones de memoria donde se encuentra la instruccin, captar o leer la instruccin y decodificarla o interprtala por medio de sus circuitos internos, con el objeto de determinar la secuencia de micro operaciones necesarias para ejecutarla, todos estos pasos constituyen el denominado ciclo de instruccin. Lenguaje de Mquina El programa que puede ejecutar un microprocesador debe estar almacenado en forma binaria, o sea patrones de 0s y 1s, en posiciones consecutivas de la memoria del sistema. El programa en forma binaria es lo que se denomina Lenguaje de Mquina siendo este el nico lenguaje que entiende el microprocesador. Estas instrucciones en cdigo binarios pueden representarse en forma hexadecimal creando lo que se llama Programa o Cdigo Objeto, en la figura 1 se muestra un programa en lenguaje de mquina y su cdigo objeto equivalente, para el microprocesador INTEL 8085.

Lenguaje de Mquina Direcciones 0000 0000 0000 0000 0000 0000 0000 0001 0000 0000 0000 0010 0000 0000 0000 0011 0000 0000 0000 0100 Instrucciones o Datos 1011 1101 0000 0001 1110 0110 0000 1111 0011 0010

Cdigo Objeto Direcciones 00 00 00 01 00 02 00 03 00 04 Instrucciones o Datos BD 01 E6 0F 32

27

Prof. Yomarvys Osorio

0000 0000 0000 0101 0000 0000 0000 0110 0000 0000 0000 0111

0100 0000 0010 0000 0111 0110

00 05 00 06 00 07

40 20 76

Figura 1. Ejemplo de Programa en Lenguaje de Maquina y Cdigo Objeto

La segunda columna del ejemplo, denominada Instrucciones o Datos consta de los cdigos tanto instrucciones ejecutables como datos o direcciones, utilizadas por el programa. Los cdigos correspondientes a las instrucciones se denominan Cdigos de Operacin o op codes, cada cdigo de operacin le indica directa o indirectamente, al microprocesador, la direccin de memoria donde se encuentra almacenado el siguiente cdigo de operacin o instruccin ejecutable, adems le permite identificar la naturaleza de las occisiones siguientes al op-code, es decir, si son datos o direcciones. En el ejemplo anterior BD es el op-code correspondiente a la instruccin CMP L que es comparar un registro denominado acumulador A y un registro denominado L (que forman parte de la arquitectura del 8085), como esta instruccin no requiere de un dato directo el siguiente cdigo del ejemplo, 01, corresponde a otro op-code. El op-code 01 indica al micro que debe cargar sus registros B y C con los datos ubicados en las posiciones inmediatas al op-code, en este caso con E6 y 0F que corresponden entonces a datos y no a op-code. Conjunto de Instrucciones de un Microprocesador El conjunto de instrucciones o cdigos de operacin a los cuales puede responder un microprocesador en particular corresponde a su Set de Instrucciones. El nmero mximo de instrucciones que puede entender cada micro depende de su palabra de datos, es decir, un micro de 8 bits puede ser capaz de interpretar 2 8 = 256 instrucciones, en la practica este numero suele ser menor, por ejemplo el microprocesador MOTOROLA 6800 siendo de 8 bits solo tiene 197 instrucciones y el INTEL 8085, tambin de 8 bits, tiene 239. Cuando se trabaja con un microprocesador es importante conocer como funcionan cada una de sus instrucciones para poder realizar los programas. Las instrucciones de un microprocesador pueden clasificarse en tres categoras: - Instrucciones de transferencia de datos: Este tipo de instrucciones sirve para mover informacin dentro del sistema, este movimiento puede ser dentro del microprocesador, entre este y la memoria o bloques de entrada salida y viceversa. - Instrucciones de procesamiento de datos: Estas instrucciones transforman la informacin, ya 28
Prof. Yomarvys Osorio

sea por operaciones aritmticas o lgicas, por lo tanto hacen uso de la unidad aritmtico lgica (ALU) del microprocesador. - Instrucciones de control de programa: Estas determinan la secuencia con que se ejecutarn las instrucciones, permite transferir el control de una parte a otra del programa o entre subprogramas. Lenguaje de Alto Nivel. Lenguaje Ensamblador Un programa en lenguaje de mquina carece de sentido inmediato para un ser humano, quien slo ve una lista de valores numricos sin sentido lgico. Adems, la escritura de programas en lenguaje de mquina puede resultar pesada y tediosa y est sujeta a errores. Para evitar esto, se han desarrollado una serie de Lenguajes de Alto Nivel cuyo objetivo es hacer ms agradable la programacin de microprocesadores y microcomputadores desde el punto de vista del usuario. Los lenguajes de programacin se pueden dividir, a grosso modo, en las siguientes jerarquas: Lenguajes de rnicroprogramacin Lenguajes de mquina Lenguajes ensambladores Lenguajes de alto nivel Lenguajes de Microprogramacin o Microprogramas: Normalmente, son invisibles para el usuario de un microprocesador porque reside en una parte interna del mismo llamada ROM del microprograma.
El microprograma interpreta las instrucciones en lenguaje de mquina recibidas por el microprocesador y es el responsable de generar la microinstrucciones necesarias para ejecutar correctamente cada instruccin.En algunos microprocesadores, el usuario puede especificar la estructura del microprograma. Sin embargo, este no es el caso general puesto que la mayora de microprocesadores tienen un set de instrucciones fijo e inmodificable. El Lenguaje De Mquina (Machine Language): Como se explic anteriormente, es la forma binaria (patrones de 1s y 0s) del programa y es el nico lenguaje que, en ltima instancia, el microprocesador puede entender. Una forma simplificada del lenguaje de mquina es el cdigo objeto, el cual representa cada cdigo binario por su equivalente hexadecimal. El Lenguaje Ensamblador (Assembly) y los Lenguajes de Alto Nivel (Pascal, Cobol, Basic, Etc.): Consisten de una serie de instrucciones especiales (statements) que son ms fciles de entender por las personas que las instrucciones en lenguaje de mquina o en cdigo objeto.

29

Prof. Yomarvys Osorio

Para poder ser comprendidos por el microprocesador, estas instrucciones deben ser convenidas a lenguaje de mquina por medio de un programa de computador llamado traductor, como se ilustra en la figura 2.

Cdigo Traductor Cdigo Fuente Ensamblador Objeto Programa en , compilador, Programa en Ensamblador intrprete, lenguaje de , Basic, etc. mquina Pascal, C+, Figura 2. etc. Conversin de Lenguaje de Ensamblador o Alto Nivel a Lenguaje de Mquina
El programa traductor que conviene lenguaje ensamblador en lenguaje de mquina se denomina Ensamblador (Assembler) y el que conviene lenguaje de alto nivel en lenguaje de mquina se denomina Compilador o Intrprete. El lenguaje, ensamblador o de alto nivel, que entra en un traductor se denomina Cdigo Fuente y el que sale del mismo, como sabemos, se denomina Cdigo Objeto. Si las instrucciones del programa traductor estn almacenadas en la memoria del computador para el cual crea cdigos en lenguaje de mquina se trata de un Traductor Residente. Si el programa traductor se ejecuta sobre otra mquina y produce para la misma, cdigos en lenguaje de mquina, se trata de un traductor (compilador o ensamblador) Cruzado o Cross-Translator. A continuacin explicaremos los fundamentos del lenguaje ensamblador, este lenguaje es similar, en principio, al lenguaje de mquina y utiliza el mismo conjunto de instrucciones. Es decir, es un lenguaje de mquina traducido. Por esta razn, el ensamblador no es considerado como un lenguaje de alto nivel si se le compara, por ejemplo, con el PASCAL el cual, por su estructura, est ms orientado a las personas que a la mquina misma. Sin embargo, el ensamblador posee varias e importantes caractersticas que hacen de un programa escrito en este lenguaje ms fcil de leer, escribir e interpretar que uno escrito en lenguaje de mquina. Algunas de estas caractersticas claves son las siguientes: 1) En lugar de nmeros, cada instruccin ejecutable (op-code) se representa mediante una abreviatura llamada Nemnico, fcil de recordar, la cual define la operacin realizada. Normalmente, un nemnico consta de dos a cuatro letras y corresponde, usualmente, a las iniciales o la abreviatura de la palabra o palabras en ingls que describen la instruccin. Por ejemplo, MOV es el nemnico de una instruccin que mueve (move) o transfiere el contenido de de una parte del sistema microprocesador (un registro, una posicin de memoria, etc.) a otra sin modificarla. El uso de nemnicos permite al programador concentrar sus esfuerzos en la solucin de su problema particular, sin tener que preocuparse de cdigos binarios de datos y direcciones y otros detalles tpicos de lenguajes de mquina. 2) Las direcciones absolutas de memoria se representan tambin por nemnicos llamados Rtulos o

30

Prof. Yomarvys Osorio

Etiquetas (Labels), que son smbolos o grupos de smbolos que define el usuario. Algunos programas ensambladores exigen que el primer carcter sea una letra y el rtulo en s no tenga ms de cinco o seis caracteres de largo. Generalmente, una etiqueta termina en dos puntos (:). Lo anterior obvia la necesidad de conocer, durante la escritura del programa, la direccin especfica de la memoria donde quedar almacenada la instruccin a que hace referencia cada etiqueta. Por ejemplo, si dentro de un programa existe una instruccin de bifurque que le ordena al microprocesador saltar a una parte del programa donde se realiza una multiplicacin, la direccin de salto puede etiquetarse como MULT; o similar. 3) Se pueden usar nemnicos llamados Seudo-Cdigos de Operacin (Pseudo-Ops) para facilitar la labor de programacin. Estos seudo-cdigos, aunque parecen cdigos de operacin, no son instrucciones ejecutables, es decir no son convertidos por el ensamblador a lenguaje de mquina. Sin embargo, proporcionan informacin importante que necesita el ensamblador en el proceso de traduccin. Los pseudos-ops se denominan tambin Directivas del Ensamblador. Dos directivas o seudocdigos tpicos de ensambladores 8085 son ORG (origen), utilizado para indicar la ubicacin de la primera instruccin ejecutable del programa y EQU (equivale a...), utilizado para asignar smbolos a valores numricos con el fin de que estos ltimos posean un significado ms evidente ante nosotros. Por ejemplo la seudo instruccin ORG 0000 le informa al ensamblador que el programa comienza en la direccin 0000 y la seudo-instruccin FREC EQU 74 le indica que cada vez que se encuentre con el nemnico FREC debe sustituirlo por el valor numrico hexadecimal 74 (0111 0100, en binario). Los programas en lenguaje ensamblador deben ser escritos en una forma estndar con el fin de que puedan ser fcilmente convenidos a lenguaje de mquina por el programa ensamblador. Desde este punto de vista, una instruccin en lenguaje ensamblador consta de cuatro secciones o campos, como se muestra en la figura 3.

ETIQUETA

OPCODE

OPERANDOS

COMENTARIOS

BUCLE: IN

01

;Entrar datos al puerto 1

Figura 3. Campos de una Instruccin en Emsablador El primer campo corresponde a la etiqueta. Como se mencion anteriormente, es un nemnico alfanumrico de cinco o seis caracteres (siendo el primero una letra) para referirse a direcciones que no son especficamente conocidas. Normalmente, una etiqueta termina en dos puntos (:) para separarla de los otros campos. Ejemplos: LOOP:, NAME:, PAZ 3:, etc. Este campo no siempre se usa. El segundo campo corresponde al nemnico del op-code (cdigo de operacin) de la instruccin a ser ejecutada. Cada microprocesador tiene su propio conjunto de cdigos nemnicos para designar cada una de las

31

Prof. Yomarvys Osorio

instrucciones a las que responde. Ejemplos de op-codes para el 8085 son MVI, MOV, LXI, STA, ADD, SIJB, SUM, DCR, ORA, CMP, DAA, JMP, CALL, RET, IN, OUT, PUSH, HALT, etc. El tercer campo corresponde a los operandos o parmetros requeridos por la instruccin. Contiene, separados por comas (,), las designaciones de los registros y/o los datos o direcciones sobre los cuales acta la misma. Por ejemplo, en el lenguaje del 8085, la instruccin MOV B, A transfiere el contenido del registro A al registro B. En este caso, MOV es el cdigo de operacin y A, B los operandos. A acta como registro fuente y B como registro de destino. El cuarto campo corresponde a los comentarios. En esta rea se escriben, entre otras cosas, notas especiales que sirven de referencia no solamente al programador sino a cualquier persona que consulte el programa en un futuro y explicaciones de lo que hace cada instruccin o grupo de instrucciones desde el punto de vista de la aplicacin. Los comentarios comienzan, generalmente, con un asterisco (*) o un punto y coma (;) y no son ejecutables, es decir son ignorados por el programa ensamblador y, por tanto, no son convenidos a cdigos en lenguaje de mquina. En la figura 4 se muestra como ejemplo la realizacin en lenguaje ensamblador (cdigo fuente) del programa en lenguaje de mquina (cdigo objeto) desarrollado en una seccin anterior (ver pgina 486). Este programa, en particular, suma dos nmeros y almacena el resultado en una posicin de memoria. Ms adelante aprenderemos a elaborar programas ms complejos en lenguaje ensamblador. Observe el formato de las instrucciones y ubique en ellas los diferentes campos (etiqueta, nemnjco, operandos y comentarios). Note que se utilizan las directivas de ensamblador ORG y EQU. Examine el cdigo objeto y observe que hay instrucciones ms largas que otras. Por ejemplo, la instruccin ADD B ocupa un byte, la instruccin MVI A, SUM1 ocupa dos bytes y la instruccin STA RESUL tres bytes. En este curso utilizaremos la notacin en lenguaje ensamblador por resultar ms clara desde el punto de vista del programador. Sin embargo, recuerde que es la notacin en lenguaje de mquina la que comprende el microprocesador y la que debe utilizarse para introducir programas en la memoria.

Cdigo Objeto (Lenguaje de Mquina) Direccin Instrucciones datos Etiqueta

Cdigo Fuente (Lenguaje Ensamblador) Op-Code (Nmonico) ORG Operando 0000 Comentario ;Empezar 0000 en direccin

Instrucciones no Ejecutables

32

Prof. Yomarvys Osorio

SUM1: SUM2:

EQU EQU

08 07 0020 , SUM1

;Hacer SUM1 = 08 ;Hacer SUM2 = 07 ;Hacer RESUL = 0020 ;Cargar A con el 1er dato ;Cargar B con el 2do dato ;Suma A con B ;Llevar el resultado de la

RESUL: EQU 0010H 0011H 0012H 0013H 0014H 0015H 0016H 0017H 0018H 3E MVI A 08 06 MVI B 07 80 32 20 00 76 HLT STA ADD B

, SUM2

RESUL

suma RESUL ;Parar

la

posicin

Figura 4. Ejemplo de Programa en Lenguaje Emsablador

Diagramas de Flujo
Aunque el lenguaje ensamblador representa una ayuda sustancial en la codificacin de los programas, sigue siendo difcil de crear inmediatamente el cdigo necesario para nuestras aplicaciones particulares. Una herramienta bsica para la solucin de problemas de programacin la constituyen los Diagramas de Flujo. Mediante un diagrama de flujo, un problema dado puede representarse en forma grfica y sencilla, dibujando los pasos que requiere su solucin y el orden en que deben ejecutarse. Estos diagramas son mucho ms claros y fciles de comprender que las instrucciones escritas en lenguaje ensamblador. La mayora de programadores, antes de escribir un programa en ensamblador, lo representan primero grficamente en un diagrama de flujo. Algunos programadores experimentados dibujan el diagrama de flujo despus de completar el programa y lo hacen slo con fines explicativos. Un diagrama de flujo bien elaborado no debe hacer referencia explcita al lenguaje ensamblador de una mquina especfica. Por tanto, puede ser utilizado para escribir un programa para cualquier microprocesador. En la figura 5a se muestran los smbolos utilizados en los diagramas de flujo. Los recuadros o rectngulos representan procesos o acciones simples. Cuando dichos procesos implican

33

Prof. Yomarvys Osorio

operaciones ms complejas se utiliza el smbolo de subrutina (un recuadro con barras internas). Si se trata de un proceso que implique la comunicacin directa con un dispositivo externo (o con el usuario), se utiliza el smbolo de entrada/salida (un paralelogramo). Las lneas que enlazan estos recuadros describen los posibles caminos entre ellos. Como los programas se ejecutan siempre en forma secuencial, las lneas de enlace son siempre unidireccionales. Es esta la razn por lo cual se utilizan flechas para indicar el sentido que se sigue en la ejecucin de las instrucciones. Siempre que haya que elegir una opcin, se utiliza un smbolo de decisin, en forma de rombo, diamante o hexgono aplanado. Como en el caso anterior, el control fluye por un slo camino, pero puede discurrir en una de dos direcciones segn el resultado de la condicin. Los smbolos auxiliares se utilizan para dar mayor comprensin y claridad. El smbolo marcado como terminal (un valo) muestra indistintamente tanto el principio como el final del programa. El conector de partes se utiliza para reemplazar las lneas de flujo donde resulta conveniente por razones de espacio o claridad. El conector de pginas se usa cuando un mismo diagrama llega a ocupar ms de una hoja. Representa una gran ventaja, en cuanto a claridad y comodidad se refiere, utilizar un conector en lugar de una lnea de flujo para conectar puntos del diagrama representados en diferentes pginas. Como norma general, todo programa debe ser concebido en trminos de sus diagramas de flujo antes de ser codificado. Tal prctica asegura que el flujo de control del programa siga una secuencia lgica y evita la creacin de espaguetis, es decir, programas en los que el flujo de control se desva en forma indiscriminada y confusa. En la figura 5b se muestra como ejemplo el diagrama de flujo de un programa que toma diez muestras de datos de un puerto de entrada y los almacena en la memoria. A partir de la leccin 48 practicaremos intensivamente la elaboracin de diagramas de flujo.

34

Prof. Yomarvys Osorio

a) Simbologa

b) Ejemplo

Proceso

Inicio

Simple

Complejo (Subrutin a) Decisiones


Si No

Obtene r dato Almacenar en memoria

Si No

Conectores
No

De partes

De pginas

Van 10 datos?
Si

Fin Lneas de flujo Terminal

Entrada/ Salida

Empezar
Figura 5. Diagramas de Flujo

35

Prof. Yomarvys Osorio

PROGRAMACIN DEL MICROPROCESADOR 8085

Modelo de Programacin del 8085


Durante las etapas de creacin, escritura y depuracin de cualquier programa, se debe tener en cuenta un modelo del microprocesador enfocado a las partes entre las cuales se realiza el intercambio de datos. A esta representacin del microprocesador se le llama modelo de programacin. La transferencia de informacin es bsica en la programacin en lenguaje de mquina. En toda computadora, debe haber transferencia de informacin entre el microprocesador, la memoria y los puertos de entrada-salida. Tambin se transfiere informacin entre los diversos registros internos del microprocesador. En la figura 1 se ilustra el modelo de programacin del 8085. All podemos observar la forma como se agrupan los registros de ocho bits formando parejas de diecisis bits. La cifra entre parntesis a la derecha de cada rectngulo indica el nmero de bits del respectivo registro. A B D H (8) (8) (8) SP PC
7 6 5 4 3 2 1

(8) (8)

Acumulador

C E L

Registros (8) Auxiliares (8) (16) (16)


0

Apuntador de Pila Contador de Programa

---

AC

---

---

CY

Palabra de Estado (WS)

Figura 1. Modelo de Programacin del 8085

Formato de Instrucciones del 8085


En los sistemas basados en el 8085, la memoria se encuentra organizada en palabras o posiciones de ocho bits (un byte) cada una. En la misma forma se guardan los datos en los registros internos del microprocesador. Hay, sin embargo, algunas pocas instrucciones del 8085 que pueden trabajar con datos u operandos de diecisis bits usando los registros internos emparejados. Este hecho indica que no necesariamente a cada instruccin

36

Prof. Yomarvys Osorio

corresponde un byte o posicin de memoria. Algunas requieren de una o dos posiciones de memoria adicionales. Las instrucciones en el 8085 pueden constar entonces de uno, dos o tres bytes.
Las instrucciones de un byte estn formadas solamente por el cdigo de operacin y no requieren ningn operando. La instruccin CMA (complementar el acumulador), mostrada en la figura 2, es un ejemplo de ello. Ejemplo: 1er Byte CMA 0 0 1 0 1 1 1 1 Cdigo OP

(2F)h

Cdigo de operacin OP

Figura 2. Instruccin de 1 Byte

En las instrucciones de dos bytes, el primero de ellos es el cdigo de operacin y el segundo especifica l operando de la instruccin. En la instruccin MVI B, 01H (cargar el registro B con el valor 01 hexadecimal), mostrada en la figura 3, se ilustra el formato de las instrucciones de este tipo.
Ejemplo: MVI B, (06)h 01 (01)h

Cdigo OP

Dato

Posiciones de memoria ocupadas 1er Byte 0 0 0 0 0 1 1 0 Cdigo OP

2do Byte

Dato

Figura 3. Instruccin de 2 Bytes

Cuando se trata de instrucciones de tres bytes, el primero de ellos contiene, como siempre, el cdigo de operacin. Los dos bytes restantes se usan para representar el valor inmediato del operando o la direccin completa (16 bits) del lugar de la memoria donde se encuentra almacenado. Un ejemplo de instrucciones de tres bytes se muestra en la figura 4. La instruccin LXI H, 3050H carga la pareja de registros H y L con los valores hexadecimales 30 y 50, respectivamente.
Ejemplo: LXI H, (21)h 3030 (30)h (30)h

Cdigo OP

Dir. Alta

Dir. Baja

Posiciones de memoria ocupadas

37

Prof. Yomarvys Osorio

1er Byte

Cdigo OP

2do Byte

Dir. Alta

3er Byte

Dir. Baja

Figura 4. Instruccin de 3 Bytes

El Acumulador y las Banderas


El acumulador est directamente conectado a la unidad lgico aritmtica y su contenido afecta al registro indicador de estado. Si bien los dems registros pueden ser utilizados en forma similar, es el acumulador el que se utiliza con ms frecuencia. Un ejemplo tpico del uso del acumulador es el traslado de datos entre distintas partes de la memoria. Esta es una operacin muy sencilla pero su uso es bastante frecuente en todos los programas en lenguaje de mquina. Supongamos que tenemos un dato, de ocho bits, almacenado en determinada posicin de memoria, a la que llamaremos ORIGEN. Deseamos trasladar dicho dato a una segunda posicin de memoria: DESTIN. Observe que por el momento no nos hemos preocupado por las posiciones de memoria concretas sino que utilizamos etiquetas que resultan ms comprensibles y dejamos su traduccin para el final. Podra parecemos que el traslado de datos puede hacerse en una sola operacin debido a su sencillez. Sin embargo es necesario dividir la operacin en dos partes, una de captacin del dato desde la posicin de origen y otra para colocar el dato en la posicin destino. La razn de dicha divisin es la necesidad de utilizar los buses de datos y direcciones para cada una de dichas tareas. Si se intentara trasladar directamente un dato de una posicin a otra en la memoria se producira un conflicto en los buses puesto que no se sabra cul de las posiciones se est direccionando. Adems sera necesario indicar simultneamente a una memoria que escribiera el dato en el bus y a otra que leyera dicho dato. El problema sera an mayor si las dos posiciones de memoria se encontraran en un mismo circuito integrado. La solucin consiste en utilizar un almacenamiento intermedio para el byte que deseamos trasladar. Este almacenamiento puede ser, por supuesto, el registro acumulador. El primer paso es entonces llevar el byte desde la primera posicin de memoria hasta el acumulador y almacenarlo all, proceso conocido como cargar el acumulador (LDA: Loading the Accumulator). Luego se enva el dato desde el acumulador a la posicin de memoria destino, operacin conocida como

38

Prof. Yomarvys Osorio

almacenar el acumulador (STA: Store the Accumulator contents). El programa que realiza dichas operaciones se muestra en la figura 5. Cdigo Fuente: ORG ORIGEN DESTIN EQU EQU LDA 0B10 h 0A1F h 0C26 h ORIGEN ;Empezar en direccin 0B10h ;Direccin de memoria origen ;Direccin de memoria destino ;Cargar el dato en el ;acumulador STA DESTIN ;Almacenar el dato en la ;memoria HALT Cdigo Objeto Direccin 0B10 0B13 Instruccin 3A 1F0A 32 260C
Figura 5. Traslado de Datos en la Memoria

;Parar

La necesidad de realizar varias operaciones en secuencia para llevar a cabo una tarea se conoce como el cuello de botella de Von Newman. Los datos deben fluir desde la memoria, siempre a travs de la CPU, y regresar por este mismo medio a la memoria. Ntese que estamos copiando el contenido de la posicin de memoria 0A1FH (ORIGEN) en la posicin 0C26H (DESTIN) sin saber cual es dicho contenido. Es vital tener muy clara esta cuestin desde el principio. El byte trasladado puede ser cualquier nmero entre 00H y FFH. Es esencial tener siempre presente la distincin ente los datos y el lugar donde se encuentran almacenados.
Otro importante detalle es la traduccin de las etiquetas de dos bytes. Observe que al definir la etiqueta ORIGEN en el cdigo fuente le asignamos el nmero hexadecimal 0A1F.

En el cdigo objeto, sin, embargo, aparece listado como 1F0A, es decir, se invierte el orden de los bytes que definen la etiqueta. Esto se conoce como notacin lo-hi (apcope de low-high: bajo-alto), y es necesaria para que el microprocesador pueda comprender el cdigo que ejecuta. Este tipo de notacin o procedimiento puede variar segn el fabricante de cada microprocesador. Al final del programa se encuentra la instruccin HLT (Halt), que detiene el funcionamiento del microprocesador. Esta instruccin es necesaria para evitar que se tomen los bytes siguientes de la memoria

39

Prof. Yomarvys Osorio

donde se encuentra almacenado el programa como instrucciones ejecutables. El programa anterior no afecta ninguna de las banderas (flags) del registro de estado del procesador (PSW en el 8085). Veamos ahora un tipo de operacin que modifica el estado de algunas banderas: la suma binaria. El resultado de sumar dos nmeros de N bits no siempre es otro nmero de N bits. Algunas veces es necesario un bit adicional. Tomemos como ejemplo la siguiente suma: Hexadecimal F8 +E6 1DE Binario 11111000 11100110 111011110

El resultado es un nmero de nueve bits, aun cuando ninguno de los sumandos supera los ocho. Si consideramos que el acumulador, que participa en la mayora de las operaciones aritmticas, slo puede almacenar nmeros de ocho bits, cabe preguntamos dnde va a parar el bit adicional. La respuesta est en la bandera de acarreo. Cada vez que se presenta un desbordamiento en el bit ms significativo como resultado de una operacin aritmtica la bandera de acarreo (CY) se coloca en uno (set). Si el resultado es un nmero de slo ocho bits, la bandera de acarreo se hace cero (reset). En otras palabras, CY se convierte en el noveno bit del acumulador. En la mayora de los casos, cuando sumemos dos nmeros de un slo byte, no sabremos por adelantado cules sern, por lo que tendremos que estar dispuestos a que el resultado supere a FFH (1111 1111 en binario). Esto supone reservar dos bytes de la RAM para contener el resultado de la suma. En e1 byte /o (byte bajo) se almacena el contenido final del acumulador y luego se almacena el flag de arrastre como byte hi (byte alto). No existe una instruccin exclusiva para almacenar la bandera de arrastre, pero las instrucciones ADC (Add with carry: suma con arrastre) fueron formuladas pensando en dicha operacin. ADC significa: sumar el contenido del operando de la instruccin al contenido actual de la bandera de arrastre y aadir luego ese resultado al contenido del registro acumulador. Todo ello significa que antes de iniciar la suma debemos considerar el estado de la bandera de arrastre ya que ser sumada al resultado de la suma propiamente dicha. La manera de evitar errores debidos a la condicin inicial de la bandera de acarreo es, sencillamente, desactivada antes de iniciar la suma. Para ello se puede utilizar la instruccin ANI, que realiza un AND lgico entre los ocho bits del acumulador y cada uno de sus homlogos en l operando de la instruccin. Todo lo que hemos dicho hasta ahora no es ms que el primer mtodo de la aritmtica de un solo byte. En resumen, se deber:

40

Prof. Yomarvys Osorio

1.- Limpiar el byte alto (hi) de la posicin.


2.- Desactivar la bandera de arrastre.

3.- Cargar el acumulador con un nmero. 4.- Sumarle el segundo nmero. 5.- Almacenar el contenido del acumulador en el byte bajo (lo) de una posicin.
6.- Cargar el acumulador con e1 contenido del byte alto.

7.- Sumarle el valor inmediato 00H. 8.- Almacenar el contenido del acumulador en el byte alto. Aunque el procedimiento descrito contiene cierto nivel de redundancia, nos ilustra acerca del cuidado que debe tenerse al escribir nuestros programas en ensamblador, ya que el estado de un simple bit puede determinar la validez de un resultado o la secuencia que ha de seguir la ejecucin del programa. El listado completo del programa descrito se muestra en la figura 6. A modo de ejercicio puede tratar de ejecutarlo mentalmente. Para ello elija un par de nmeros de ocho bits y asgnelos a SUM1 y SUM2.

Cdigo fuente ORG SUMI EQU SUM2 EQU LOBYTE EQU HIBYTE EQU MVI STA XRA LDA LXI ADC STA LDA ACI

0000H 001 OH 0011 H 0012H 0013H A,OOH HIBYTE A SUMI H,SUM2 M LOBYTE HIBYTE OOH

;Direccin de inicio del cdigo objeto ;Direcciones donde se almacenan ;los nmeros a sumar ;Byte bajo del resultado ;Byte alto del resultado ;Carga el acumulador con el nmero 00H ;Limpiar el Byte alto (hi) de la posicin ;Desactivar la bandera de arrastre ;Cargar el acumulador con un nmero ;El registro H seala el segundo nmero ;Sumar al acumulador el nmero sealado ;por H ;Almacenar el contenido del acumulador en ;el Byte bajo (lo) ;Cargar el acumulador con el contenido del ;Byte alto (hi) ;Sumarle el valor inmediato 00H

41

Prof. Yomarvys Osorio

STA HLT Cdigo Objeto Direccin

HIBYTE

;Almacenar el contenido del acumulador en ;el Byte alto (hi) ;Detener la ejecucin del programa

Instruccin

0000 0002 0005 0006 0009 000C 000D 0010 0013 0015 0018

3E 32 AF 3A 21 8E 32 3A CE 32 76

00 1300 1000 1100 1200 1300 00 1300


Figura 6. Suma con Arrastre

Ejecute paso a paso cada instruccin, anotando cada vez el contenido del acumulador, del registro HL y de las posiciones de memoria HIBYTE y LOBYTE.

Bifurcaciones, Bucles y Contadores


Bifurcaciones Una bifurcacin es un cambio en la secuencia de ejecucin de un programa, normalmente 42
Prof. Yomarvys Osorio

determinado tras la evaluacin de una condicin. Toda bifurcacin se representa en los diagramas de flujo mediante un smbolo de decisin. Bucles y Contadores Tenemos una iteracin o bucle, cuando como resultado de una bifurcacin se repite la ejecucin de un determinado bloque de instrucciones. El nmero de repeticiones est determinado por un contador (el cual es generalmente un registro interno de la CPU) que se actualiza en cada iteracin. Aprender a utilizar de manera adecuada las bifurcaciones, bucles y contadores es fundamental para todo aquel que se proponga programar eficientemente en lenguaje de mquina. Tanto los bucles como las bifurcaciones condicionadas hacen uso de las banderas del registro indicador de estado. Estas banderas, muestran los efectos en el acumulador (o en otros registros) de la ltima instruccin ejecutada. Todas ellas se pueden utilizar en la toma de decisiones, pero por el momento necesitamos considerar slo dos de las mismas: las banderas de cero (Z) y de arrastre (CY). El estado de estas banderas se utiliza para decidir si el microprocesador ejecuta la siguiente instruccin el programa o si salta a alguna otra instruccin del mismo. La CPU decide si saltar o continuar, bien cambiando o bien aceptando la direccin que contiene su contador de programa (PC). Este registro siempre contiene la direccin de la prxima instruccin en lenguaje de mquina a obedecer. Cuando el microprocesador empieza a ejecutar una instruccin, carga en el registro de instruccin el cdigo de operacin (opcode) contenido en la direccin de memoria indicada por el contador del programa. La direccin indicada por el registro se incrementa en razn del nmero de bytes de la instruccin, de modo que el contador del programa seala entonces el cdigo de operacin de la siguiente instruccin. S la que est en curso hace que l contador seale a una direccin de algn otro lugar del programa, entonces se genera efectivamente un salto. Las instrucciones que efectan el mencionado cambio de direccin se denominan instrucciones de bifurcacin, o simplemente saltos, porque representan un punto de cambio en e1 flujo de control del programa. En e1 8085 existen nueve saltos distintos, que sern explicados en detalle en una prxima leccin. Para aclarar esta idea, consideremos la tarea de decidir cual de dos nmeros es mayor y almacenarlo en una posicin especfica de la memoria. Un diagrama de flujo del programa que realiza esta tarea se muestra en la figura 1a. Los dos primeros rectngulos representan la carga de los nmeros en los registros A (acumulador) y L. Estas operaciones corresponden directamente a las dos primeras 43
Prof. Yomarvys Osorio

instrucciones del programa (figura 1b). El siguiente rectngulo (tercera instruccin) representa la operacin de comparacin, en la cual se resta el contenido del registro L del contenido del acumulador. Esta operacin no influye en dichos contenidos pero afecta directamente el estado de las banderas (en este caso, la bandera de acarreo). La figura en forma de rombo es un smbolo de decisin y corresponde a la cuarta instruccin del programa. En ella se evala el resultado de la comparacin anterior, es decir, el estado del flag CY. Si el contenido del acumulador es mayor o igual que el contenido del registro L (CY = 0), el programa contina hacia abajo en el diagrama (y en el listado), se almacena en la memoria el contenido del acumulador y se detiene el programa al llegar a la sexta lnea. En caso contrario (CY = 1), el programa bifurca hacia la derecha en el diagrama (sptima lnea del programa), se almacena en memoria el contenido del registro L (pasando a travs del acumulador) y se detiene la ejecucin al llegar a la ltima lnea.
INICIO

Carga el primer nmero en el Registro A

Carga el segundo nmero en el Registro L

a) Diagrama de Flujo
Compara A y L
(L) > (A)

Es (A) > (L)?


(L) =< (A) S

No

Almacena (A) en la memoria

Almacena (L) en la memoria

ALTO

ALTO

b) Listado del Programa Este bloque de instrucciones se ejecuta siempre MVI A, 0F ;Carga el acumulador A con el 1er nmero

44

Prof. Yomarvys Osorio

MVI CMP JC

L, 06 L

;Carga el Registro L con el 2do nmero ;Compara el acumulador A con el registro L

SALTO ;Bifurca hacia SALTO s CY = 1 (A < L)

;Este bloque de instrucciones se ejecuta si es mayor el contenido del ;acumulador A (CY = 0) STA 2040 ;Almacena el contenido del acumulador A en la ;posicin de memoria 2040 Hex. HLT ;Detiene la operacin del microprocesador ;Este bloque de instrucciones se ejecuta si es mayor el contenido del ;registro L (CY = 1) SALTO: MOV STA HLT A, L 2040 ;Mueve el contenido del registro L al acumulador A ;Almacena el contenido del acumulador A en la ;posicin de memoria 2040 Hex. ;Detiene la operacin del microprocesador

Figura 1. Programa Para Encontrar el Mayor de Dos Nmeros

Una tcnica similar se utiliza cuando se desea ejecutar procesos repetitivos, para lo cual se utiliza una estructura conocida como bucle o iteracin, tal es el caso del programa mostrado en la figura 2. El programa sencillamente efecta un conteo en forma regresiva desde 0FH (15 en decimal) hasta cero. Para ello se carga en primer lugar el registro acumulador (que actuar como contador), y luego se decrementa en cada iteracin. La tercera lnea no realiza en realidad ninguna operacin (NOP: no opere), y se incluye tan solo para indicar que pueden existir instrucciones ejecutables en medio del bucle. La cuarta lnea es la en cargada de tomar la decisin de continuar o no las iteraciones. En ella se compara el estado actual de la bandera de cero, con el fin de verificar si ha terminado el conteo. Si la bandera se encuentra desactivada, la instruccin JNZ devuelve el control a la segunda lnea, marcada con la etiqueta LABEL, y ejecuta una nueva iteracin. Si la bandera de cero (Z) se encuentra activada, es decir, si el contador ha llegado a cero, la comparacin fracasa y el programa contina en la siguiente lnea (en este caso HLT), terminando as la ejecucin del bucle.

45

Prof. Yomarvys Osorio

INICIO

Cargar Contador

Decrementar Contador

a) Diagrama de Flujo
Proceso (NOP en este caso)

Contador Cero?
Si PARAR

No

b) Listado del Programa MVI A, 0F ;Inicializar contador ;Decrementar contador ;No opera (proceso repetitivo) LABEL ;Salto condicional

LABEL: DCR A NOP JNZ HLT

Figura 2. Programa Cuenta Progresiva

Modalidades De Direccionamiento Toda instruccin en lenguaje ensamblador, explcita o implcitamente, tiene que ver con los contenidos de la memoria, y puesto que un byte slo se puede distinguir de otro por su direccin, toda instruccin en lenguaje ensamblador debe relacionarse al menos con una direccin. La forma como se alude a ella se conoce como modalidad de direccionamiento. En el microprocesador 8085 existen cinco modos de direccionamiento, a saber: 1) Direccionamiento implcito: Se usa en algunas instrucciones en las cuales la propia funcin de la instruccin indica sobre que datos ha de operar. Un ejemplo de ello es la instruccin RLC (rotar el acumulador a la izquierda), ya que la misma instruccin acta solamente sobre el acumulador y no sobre ningn otro registro oposicin de memoria. 2) Direccionamiento por registro: En este, la instruccin indica el registro o pareja de registros 46
Prof. Yomarvys Osorio

donde se encuentra almacenado el operando. Estas instrucciones son muy eficientes porque no tienen que captar operandos de memoria. Como ejemplo se tiene la instruccin ADD C, representada en la

figura 3, que suma el contenido del acumulador al registro C.


Acumulador 10101010 01010101 Registro C S Z
AC

Instruccin ADD C
(81) Hx

Acumulador 11111111 P C

0 0 - 0 - 0 - 0 Registro de banderas Antes de la Instruccin Despus de la Instruccin

Figura 3. Direccionamiento por Registro 3) Direccionamiento inmediato: Este tipo existe cuando el valor del operando se especifica de manera explcita en el cdigo de la instruccin, es decir, los datos a utilizar van enseguida del cdigo de operacin. La mayora de las instrucciones inmediatas del microprocesador 8085 utilizan al acumulador como un operando implcito. En la figura 4 se observa una instruccin que utiliza direccionamiento inmediato: ADI, la cual suma el valor de su operando al contenido de1 acumulador.
Acumulador 0000 1100 Instruccin
Antes de la Instruccin
Cdigo de operacin

Acumulador 0001 0100 ADI


Despus de la Instruccin

C6 Hex
Memoria de programa

S Z

AC

0 0 - 1 - 1 - 0 Registro de banderas

0000 1000
Datos inmediatos

Figura 4. Direccionamiento Inmediato 4) Direccionamiento directo: En este los dos bytes que siguen al cdigo de operacin especifican la direccin donde se encuentra almacenado el operando de la instruccin. La instruccin LDA, que ya hemos utilizado, constituye un claro ejemplo de direccionamiento directo, y se ilustra en la figura 5.

47

Prof. Yomarvys Osorio

Acumulador ?
Antes de la Instruccin

Acumulador Instruccin LDA 1111 1111


Despus de la Instruccin

1111 1111
Memoria de datos (0200 Hex)

Direccin de 16 bits 0000 0010 0000 0000


Byte Lo de la Byte Hi de Dir. la Dir.

Cdigo de operacin

3A Hex 0000 0000 0000 0010


Memoria de programa

Figura 5. Direccionamiento Directo 5) Direccionamiento Indirecto de registro: Este se sirve de dos registros auxiliares, BC o DE para indicar la posicin de memoria en la cual se guardarn o desde la cual se tomarn los datos. La instruccin STAX es una de las instrucciones del 8085 que utiliza este tipo de direccionamiento y se muestra en la figura 6.

Antes de la Instruccin Memoria de Datos 025 ? 0 ? 025 1 ? 025 2 Acumulado r 39 D 02 El Uso de la Pila E 51

Instruccin STAX D

Despues de la Instruccin Memoria de Datos 025 ? 0 025 39 1 025 ? 2 Acumulado r 39 D 02 E 51

Figura 6. Direccionamiento Indirecto de Registro

El tratamiento de la memoria es la esencia de la programacin en lenguaje de mquina y la mayora de las instrucciones que hemos estudiado hasta ahora estn relacionadas simplemente con cargar posiciones de la memoria o tomarlos de ella. A estas posiciones hemos accedido de diversas maneras (las modalidades de direccionamiento) pero hasta aqu todas las instrucciones que conocemos han empleado siempre una direccin especifica como parte del operando. Existe una clase de 48
Prof. Yomarvys Osorio

instrucciones, sin embargo, que acceden a un rea especfica de la memoria pero que no toman como operando direccin alguna. Son instrucciones que operan sobre el rea de memoria denominada pila (stack) y se las conoce como operaciones de pila. La pila o montn est creada para que tanto la CPU corno el programador dispongan de una memoria temporal donde trabajar. Se trata de una especie de cuaderno de apuntes cmodo para escribir y tambin fcil de leer y borrar. En las instrucciones de manejo de la pila no exigen un operando con direccin ya que un registro especial de la CPU, el llamado ndice de pila (SP: Stack Pointer) siempre contiene la direccin de la primera posicin libre de la pila. Por tanto, todo cuanto se escribe en la pila es depositado automticamente en el byte sealado por dicho ndice, y los bytes que se sacan de la pila se toman de la ltima posicin utilizada. Al ejecutar una operacin de pila, su ndice se ajusta automticamente como parte de la operacin. El ndice de la pila del 8085 es un registro de dos bytes capaz de direccionar cualquier posicin entre 0000H y FFFFH, o sea, todo el espacio direccionable por el propio 8085. Por consiguiente, la pila puede estar situada en cualquier lugar de la RAM, y el programador puede cambiarla de sitio si lo desea. Sin embargo, esto no es muy aconsejable. Un ejemplo del uso de la pila se muestra en la figura 7. Se trata de un sencillo programa que intercambia el contenido de dos posiciones de memoria, MEMO1 y MEMO2. Para lograr este cometido se sigue el proceso siguiente: 1. El contenido de MEMO1 es cargado en el acumulador. 2. El contenido del acumulador empujado (push) dentro de la pila. 3. El contenido de MEMO2 se carga en el acumulador. 4. El contenido del acumulador se almacena en MEMO1. 5. El ltimo tem guardado en la pila salta (pops) otra vez dentro del acumulador. 6. El actual contenido del acumulador (que antes estaba en la pila y al principio en MEMO1 se almacena en MEMO2.

Programa Fuente ORG 0000 h MEMO1 EQU 0010 h ;Posiciones de memoria cuyos contenidos se han : MEMO2 EQU 0011 h ;de intercambiar : LDA MEMO1 ;El contenido de MEMO1 es cargado en el ;acumulador 49
Prof. Yomarvys Osorio

PUSH PSW LDA STA POP STA

;El contenido del acumulador es empujado en la pila MEMO2 ;El contenido de MEMO2 es cargado en el ;acumulador MEMO1 ;El contenido del acumulador se almacena en ;MEMO1 PSW ;El ltimo tem guardado en la pila salta al ;acumulador MEMO2 ;El contenido actual del acumulador (que antes estaba ;en la pila y al principio en MEMO1) se guarda en ;MEMO2

HLT 0000 h 0003 h 0004 h 0007 h 000A h 000B h 000E h Programa Objeto 3A h 10 00 F5 h 3A h 11 00 32 h 10 00 F1 h 32 h 11 00 76 h

Figura 7. Intercambiar los Contenidos de dos Posiciones de Memoria Los seis pasos anteriores se ilustran en la figura 8. En ella puede verse claramente el camino que siguen los datos durante la ejecucin del programa y la utilizacin de la pila como rea de almacenamiento intermedio. Este fragmento de programa nos muestra que las operaciones de pila son ante todo recprocas y secuenciales. El ltimo tem empujado en ella, se recupera al primer salto que se ordene desde la pila. Si ha habido varios empujones seguidos sin ningn salto, los datos se escriben en sucesivas posiciones de la pila, cada byte encima del anterior, y si se piden varios saltos consecutivos, stos van afectando a las sucesivas posiciones en orden descendente. La pila es una estructura LIFO (Last In First Out), o sea, el ltimo dato que entr es el primero en sa1ir. El dato que ocupa en cualquier momento la parte superior del montn ser el ms reciente, el del fondo del montn el ms antiguo, y para sacar este ltimo es necesario sacar primero todos los datos ms recientemente empujados. Convencionalmente, al primer byte libre de la pila se le denomina tope, ya que uno se imagina las pilas creciendo hacia arriba. Aunque, de hecho, el ndice de la pila disminuye a cada empujn, por lo que el tope est en realidad en una posicin de memoria inferior a la base de la pila.

50

Prof. Yomarvys Osorio

M1 M2
2

M1 M2 3 A

M1 M2
6

Siendo: 5 A : Acumulador M1: Memo1 M2: Memo2 Stack Stack Stack Figura 8. Esquema de Funcionamiento del Programa de Intercambiar A A Utilizacin De Subrutinas o Subprogramas Al programar en lenguaje ensamblador, una subrutina es un mecanismo bsico que le permite al programador tratar un conjunto de instrucciones como si fuera una nica instruccin de ms alto nivel. En un programa, las subrutinas se definen simplemente listando las instrucciones que la componen, y se ensamblan como si fueran pequeos programas, independientes y autnomos.

Una subrutina puede ser invocada en cualquier parte del programa principal y esto se logra mediante una instruccin denominada llamada a subrutina, con la cual, el microprocesador desva su flujo secuencial, a la subrutina en cuestin y ejecuta sus instrucciones, hasta encontrar un indicador de retorno de subrutina, el cual devuelve el flujo del programa hasta la instruccin que le sigue a dicha llamada a subrutina. En la figura 9 se ilustra lo explicado. Programa principal Subrutina Sub Instrucci n de llamada CALL Sub RET Instrucci n de retorno

Figura 9. Flujo de Control en una Llamada a Subrutina Para lograr esto, el microprocesador sencillamente empuja en la pila el contenido del contador de programa (PC) cuando encuentra la instruccin de llamada a subrutina, y lo reemplaza por la direccin 51
Prof. Yomarvys Osorio

especificada por la etiqueta de la misma, luego, al encontrar la instruccin de retorno, se carga el contador de programa con el contenido de la pila, que es la direccin de la siguiente instruccin del programa principal denominada direccin de retorno. Adems de guardar el contenido del PC cuando se llama a una subrutina, puede ser necesario guardar en la pila otros registros de la CPU, cuyos contenidos son necesarios para el programa que efecta la llamada, ya que la subrutina puede hacer uso de tales registros y destruir los datos contenidos en estos. Para guardar cada par de registros en la pila, se coloca una instruccin PUSH al principio del cdigo que define la subrutina. Posteriormente, se restauran los registros a su contenido original mediante instrucciones POP, inmediatamente antes de retornar al programa principal. En la figura 10 se usa el procedimiento descrito para guardar y restaurar el estado de todos los registros del 8085 durante la ejecucin de una subrutina ficticia (RUTI). Es de sealar que la secuencia de extraccin de direcciones es inversa a la secuencia de insercin, debido al mtodo de acceso a la pila en el que el ltimo en entrar es el primero en salir (LIFO), tambin es muy importante saber que toda insercin en la pila vaya acompaada de su correspondiente restauracin antes de salir de la subrutina, pues de lo contrario se tomar una direccin de retorno equivocada desde la pila y el programa, sencillamente, se enloquece. Al entrar en la subrutina, se empujan los registros en la pila RUTI: PUSH PSW ;Guarda el contenido de la palabra de estado PUSH B ;Guarda el contenido de los registros B y C PUSH D ;Guarda el contenido de los registros D y E PUSH H ;Guarda el contenido de los registros H y L ;Instrucciones que conforman la subrutina POP H ;Restaura los registros H y L POP D ;Restaura los registros D y E POP B ;Restaura los registros B y C POP PSW ;Restaura la palabra de estado RET ;Instruccin de retorno Figura 10. Esquema Tpico de una Subrutina En algunas ocasiones se hace necesario pasar datos desde el programa principal hacia la subrutina para que esta los utilice internamente, esto se conoce como transferencia de parmetros. La esencia de la transferencia de parmetros consiste en que el programa que efecta la llamada, coloca en un rea de comunicacin conocida por la subrutina, bien los parmetros actuales a transferir, bien informacin 52
Prof. Yomarvys Osorio

sobre la direccin a partir de la cual la subrutina puede determinar la localizacin de los parmetros. En la figura 11 se muestran algunos de los mtodos ms usuales para pasar parmetros a subrutinas. Estos mtodos difieren principalmente en la eleccin del rea de comunicacin, que puede estar en la CPU, en un rea de datos de la memoria, en la pila, o en el propio programa que hace la llamada.
rea de comunicacin Registros de la CPU rea de datos en M Pila en M Programa principal en M Acciones realizadas por el programa principal Colocar los valores de los parmetros en registros de la CPU Colocar la direccin de los parmetros en registros de la CPU Insertar en a pila os valores de los parmetros Ninguna; los valores de los parmetros se listan como datos en el programa principal Acciones realizadas por la subrutina Leer registros de la CPU Leer M utilizando registros como direcciones Extraer de la pila Leer datos del programa principal.

Figura 11. Mtodos de Transferencia de Parmetros a subrutinas El rea de comunicacin se puede usar tambin para transferir resultados desde la subrutina hacia el programa que la llam. La estructura general de una subrutina, incluyendo la transferencia de parmetros, se muestra en la figura 12.

Punto de entrada Guardar los registros de la CPU Leer los parmetros de entrada Cuerpo principal de la subrutina Escribir los parmetros de salida Restaurar los registros de la CPU Punto de salida (retorno) Figurga 12. Estructura General de una Subrutina

53

Prof. Yomarvys Osorio

Conjunto de Instrucciones de un Microprocesador


El conjunto de instrucciones de un Microprocesador es una lista de todas las operaciones que es capaz de ejecutar un microprocesador. Esta lista vara con cada microprocesador y es suministrada por el fabricante del mismo, en su forma bsica de formato hexadecimal y su representacin de nemnicos. Cuando se realiza un programa en lenguaje ensamblador, todas sus acciones se deben expresar por medio de este conjunto, para que el microprocesador pueda comprenderlas y ejecutarlas, por lo tanto es indispensable conocer el significado de cada una de las instrucciones que se estn usando y saber como afectan los registros del microprocesador. Para estudiar el conjunto de instrucciones de un Microprocesador es pueden dividirse en grupos segn la operacin que realizan, estos son: Instrucciones para Transferencia de Datos: Tienen como funcin ejecutar todas las posibles transferencias con que cuenta el microprocesador, o sea, transferir un dato de una posicin de memoria a un registro, transferir el contenido de un registro a una posicin de memoria o a otro registro y viceversa. Instrucciones Lgicas y Aritmticas: Son las encargadas de realizar las operaciones lgicas (And, Or, Comparador, etc.) y aritmticas (Suma, Resta, Incrementar, Decrementar, etc.) que el microprocesador esta en la capacidad de ejecutar. Estas le confieren al microprocesador la facultad de reemplazar gran cantidad de componentes como: compuertas, comparadores, sumadores, etc. que eran necesarios para realizar dichas operaciones. Instrucciones de Cambio de Secuencia: Su funcin es la de alterar la secuencia lineal que sigue la ejecucin de un programa, mediante el cambio del contenido del Contador de Programas. Entre estas instrucciones se encuentran: Los saltos, llamadas a subprogramas, retornos e inicializaciones. Instrucciones de Entrada/Salida: Son las encargadas del control de los dispositivos externos a travs de los puertos de entrada/salida para recibir o enviar informacin, al mundo exterior. Existen microprocesadores que trabajan con comunicacin serial y poseen instrucciones para tal fin. Conjunto De Instrucciones Del Microprocesador 8085

54

Prof. Yomarvys Osorio

El Microprocesador 8085 posee un conjunto de 243 instrucciones, en la tabla siguiente se muestran estas divididas convenientemente en grupos segn su funcin para su mejor compresin, adems, se da una breve explicacin de cada una de ellas. Esta tabla ser usada como referencia para escribir los programas correspondientes al 8085. Tambin se da un cuadro con los cdigos de operacin en formato hexadecimal de cada uno de sus nemnicos para tener una idea de su traduccin por parte del software ensamblador.

55

Prof. Yomarvys Osorio

CONJUNTO DE INSTRUCCIONES DEL MICROPROCESADOR 8085


INSTRUCCIONES PARA TRANSFERENCIA DE DATOS Descripcin Cdigo Nemnico B C Descripcin Cdigo Nemnico Movimientos Al Registro B Movimientos Al Registro H BB 40 MOV B, B 1 4 HB 60 MOV H, B BC 41 MOV B, C 1 4 HC 61 MOV H, C BD 42 MOV B, D 1 4 HD 62 MOV H, D BE 43 MOV B, E 1 4 HE 63 MOV H, E BH 44 MOV B, H 1 4 HH 64 MOV H, H BL 45 MOV B, L 1 4 HL 65 MOV H, L B Memoria(HL)* 46 MOV B, M 1 7 H Memoria(HL)* 66 MOV H, M BA 47 MOV B, A 1 4 HA 67 MOV H, A Movimientos Al Registro C Movimientos Al Registro L CB 4B MOV C, B 1 4 LB 68 MOV L, B CC 49 MOV C, C 1 4 LC 69 MOV L, C CD 4A MOV C, D 1 4 LD 6A MOV L, D CE 4B MOV C, E 1 4 LE 6B MOV L, E CH 4C MOV C, H 1 4 LH 6C MOV L, H CL 40 MOV C, L 1 4 LL 6D MOV L, L C Memoria(HL)* 4E MOV C, M 1 4 L Memoria(HL)* 6E MOV L, M CA 4F MOV C, A 1 4 LA 6F MOV L, A Movimientos Al Registro D Movimientos A La Memoria* DB 50 MOV D, B 1 4 Memoria(HL)* B 70 MOV M, B DC 51 MOV D, C 1 4 Memoria(HL)* C 71 MOV M, C DD 52 MOV D, D 1 4 Memoria(HL)* D 72 MOV M, D DE 53 MOV D, E 1 4 Memoria(HL)* E 73 MOV M, E DH 54 MOV D, H 1 4 Memoria(HL)* H 74 MOV M, H DL 55 MOV D, L 1 4 Memoria(HL)* L 75 MOV M, L D Memoria(HL)* 56 MOV D, M 1 7 Memoria(HL)* A 77 MOV M, A DA 57 MOV D, A 1 4 Movimientos Al Registro A AB 78 MOV A, B Movimientos Al Registro E EB 5B MOV E, B 1 4 AC 79 MOV A, C EC 59 MOV E, C 1 4 AD 7A MOV A, D ED 5A MOV E, D 1 4 AE 7B MOV A, E EE 5B MOV E, E 1 4 AH 7C MOV A, H EH 5C MOV E, H 1 4 AL 7D MOV A, L EL 5D MOV E, L 1 4 A Memoria(HL)* 7E MOV A, M E Memoria(HL)* 5E MOV E, M 1 7 AA 7F MOV A, A EA 5F MOV E, A 1 4 B 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 C 4 4 4 4 4 4 7 4 4 4 4 4 4 4 7 4 7 7 7 7 7 7 7 4 4 4 4 4 4 7 4

Prof. Yomarvys Osorio

Descripcin Dato de 8* A Dato de 8* B

Cdigo Nemnico Carga Inmediata 3E MVI A, d8 06 MVI B, d8 C, d8 D, d8 H, d8 L, d8 M, d8

B 2 2 2 2 2 2 2

C 7 7 7 7 7 7 7

Dato de 8* C 0E MVI Dato de 8* D 16 MVI Dato de 8* E 1E MVI Dato de 8* H 26 MVI Dato de 8* L 2E MVI Dato de 8* Memoria(HL)* 36 Carga y Almacenamiento

Descripcin Dato de 16* DE Dato de 16* HL Memoria(dir)* L y Memoria(dir+1)* H Memoria(dir)* A Memoria(BC)* A Memoria(DE)* A A Memoria(BC)* A Memoria(DE)*

Cdigo Nemnico B 11 LXI D, d16 3 21 LXI H, d16 3 2A 3A 0A 1A 02 12 LHLD LDA LDAX LDAX STAX STAX dir dir B D B D dir dir 3 3 1 1 1 1 3 3 1

C 10 10 16 13 7 7 7 7 13 16 6

A Memoria(dir)* 32 STA L Memoria(dir)* y Dato de 16* SP 31 LXI SP, d16 3 10 22 SHLD H Memoria(dir+1)* Dato de 16* BC 01 LXI B, d16 3 10 HL SP F9 SPHL INSTRUCCIONES LGICAS Y ARITMTICAS Sumas O Adiciones Restas O Sustracciones B+AA 80 ADD B 1 4 ABA 90 SUB C+AA 81 ADD C 1 4 ACA 91 SUB D+AA 82 ADD D 1 4 ADA 92 SUB E+AA 83 ADD E 1 4 AEA 93 SUB H+AA 84 ADD H 1 4 AHA 94 SUB L+AA 85 ADD L 1 4 ALA 95 SUB Memoria(HL)* + A A 86 ADD M 1 7 A Memoria(HL)* A 96 SUB A+AA 87 ADD A 1 4 AAA 97 SBB B + cy + A A 88 ADC B 1 4 A B cy A 98 SBB C + cy + A A 89 ADC C 1 4 A C cy A 99 SBB D + cy + A A 8A ADC D 1 4 A D cy A 9A SBB E + cy + A A 8B ADC E 1 4 A E cy A 9B SBB H + cy + A A 8C ADC H 1 4 A H cy A 9C SBB L + cy + A A 8D ADC L 1 4 A L cy A 9D SBB Memoria(HL)* + cy + A A 8E ADC M 1 7 A Memoria(HL)* cy A 9E SBB A + cy + A A 8F ADC A 1 4 A A cy A 9F SBB Dato de 8* + A A C6 ADI d8 2 7 A dato de 8* A D6 SUI Dato de 8* + cy +A A CE ACI d8 2 7 A dato de 8* cy A DE SBI BC + HL HL 09 DAD B 1 10 DE + HL HL 19 DAD D 1 10 HL + HL HL 92 DAD H 1 10 SP + HL HL 39 DAD SP 1 10

B C D E H L M A B C D E H L M A d8 d8

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2

4 4 4 4 4 4 7 4 4 4 4 4 4 4 7 4 7 7

Prof. Yomarvys Osorio

Cdigo Nemnico Incrementos 1+AA 3C INR A 1+BB 04 INR B 1+CC 0C INR C 1+DD 14 INR D 1+EE 1C INR E 1+HH 24 INR H 1+LL 2C INR L 1+Memoria(HL)* Memoria(HL)* 34 INR M 1 + BC BC 03 INX B 1 + DE DE 13 INX D 1 + HL HL 23 INX H 1 + SP SP 33 INX SP Decrementos A1A 3D DCR A B1B 05 DCR B C1C 0D DCR C D1D 15 DCR D E1E 1D DCR E H1H 25 DCR H L1L 2D DCR L Memoria(HL)*1 Memoria(HL)* 35 DCR M BC 1 BC 3B DCX B DE 1 DE 0B DCX D HL 1 HL 1B DCX H SP 1 SP 2B DCX SP Operacin Lgica AND B&AA A0 ANA B C&AA A1 ANA C D&AA A2 ANA D E&AA A3 ANA E H&AA A4 ANA H L&AA A5 ANA L Memoria(HL)* & A A A6 ANA M A&AA A7 ANA A Dato de 8* & A A E6 ANI d8 Operacin Lgica OR B or A A B0 ORA B

Descripcin

B 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1

C 4 4 4 4 4 4 4 10 6 6 6 6 4 4 4 4 4 4 4 10 6 6 6 6 4 4 4 4 4 4 7 4 7 4

Descripcin Cdigo Nemnico C or A A B1 ORA C D or A A B2 ORA D E or A A B3 ORA E H or A A B4 ORA H L or A A B5 ORA L Memoria(HL)* or A A B6 ORA M A or A A B7 ORA A Dato de 8* or A A F6 ORI d8 Operacin Lgica XOR B xor A A A8 XRA B C xor A A A9 XRA C D xor A A AA XRA D E xor A A AB XRA E H xor A A AC XRA H L xor A A AD XRA L Memoria(HL)* xor A A AE XRA M A xor A A AF XRA A Dato de 8* xor A A EE XRI d8 Comparacin AB B8 CMP B AC B9 CMP C AD BA CMP D AE BB CMP E AH BC CMP H AL BD CMP L A Memoria(HL)* BE CMP M AA BF CMP A A Dato de 8* FE CPI d8 Otras Instrucciones Rotar bits de A a la derecha 0F RRC Rotar bits de A a la izquierda 07 RLR Rotar A a la derecha con cy 1F RAR Rotar A a la izquierda con cy 17 RAL Complementar A 2F CMA Hacer 1 la bandera cy 37 STC Complementar la bandera cy 3F CMC Ajuste decimal de A 27 DAA

B 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1

C 4 4 4 4 4 7 4 7 4 4 4 4 4 4 7 4 7 4 4 4 4 4 4 7 4 7 4 4 4 4 4 4 4 4

Prof. Yomarvys Osorio

INSTRUCCIONES DE CAMBIO DE SECUENCIA DEL PROGRAMA Descripcin Cdigo Nemnico B C Descripcin Cdigo Nemnico B C Llamadas A Rutinas Saltos Incondicional a dir CD CALL dir 3 18 Incondicional a dir C3 JMP dir 3 10 A dir si hay acarreo DC CC dir 3 9/18 A dir si hay acarreo DA JC dir 3 7/10 A dir si no hay acarreo D4 CNC dir 3 9/18 A dir si no hay acarreo D2 JNC dir 3 7/10 A dir si es cero CC CZ dir 3 9/18 A dir si es cero CA JZ dir 3 7/10 A dir si no es cero C4 CNZ dir 3 9/18 A dir si no es cero C2 JNZ dir 3 7/10 9/18 A dir si es impar E4 CPO dir 3 A dir si es impar E2 JPO dir 3 7/10 A dir si es par EC CPE dir 3 9/18 A dir si es par EA JPE dir 3 7/10 A dir si el signo es + F4 CP dir 3 9/18 A dir si el signo es + F2 JP dir 3 7/10 A dir si el signo es FC CM dir 3 9/18 A dir si el signo es FA JM dir 3 7/10 Direccin dir PC E9 PCHL dir 3 6 Retornos De Rutinas Incondicional C9 RET dir 3 18 Reiniciaciones dir si hay acarreo D8 RC 3 6/12 En posicin 0 de la interrupcin C7 RST 1 12 0 si no hay acarreo dir 3 6/12 En posicin 1 de la interrupcin D0 RNC CF RST 1 12 1 si es cero dir 3 6/12 En posicin 2 de la interrupcin C8 RZ D7 RST 1 12 2 si no es cero dir 3 6/12 En posicin 3 de la interrupcin C0 RNZ DF RST 1 12 3 si es impar dir 3 6/12 En posicin 4 de la interrupcin E0 RPO E7 RST 1 12 4 si es par dir 3 6/12 En posicin 5 de la interrupcin E8 RPE EF RST 1 12 5 si el signo es + dir 3 6/12 En posicin 6 de la interrupcin F0 RP F7 RST 1 12 6 6/12 si el signo es dir 3 En posicin 7 de la interrupcin F8 RM FF RST 1 12 7 INSTRUCCIONES PARA MANEJO DE PILA INSTRUCCIONES DE ENTRADA/ SALIDA/CONTROL Empuja B y C en la pila C5 PUSH B Deshabilitar interrupciones F3 DI 1 4 1 12 Empuja D y E en la pila D5 PUSH D 1 12 Habilitar interrupciones FB EI 1 4 Empuja H y L en la pila E5 PUSH H 1 12 No opere 00 NOP 1 4 Empuja PSW en la pila F5 PUSH PSW 1 12 Detener la operacin del micro 76 HLT 1 5 Recupera B y C de la pila C1 POP B 1 10 port A DB IN port 2 10 Recupera D y E de la pila D1 POP D 1 10 A port D3 OUT port 2 10 Recupera H y L de la pila E1 POP H 1 10 Leer mascarilla de interrupciones 20 RIM 1 4 Recupera PWS de la pila F1 POP PSW 1 10 Fijar mascarilla de interrupciones 30 SIM 1 4 Intercambia H y L con tope pila E3 XTHL 1 16 HL SP F9 SPHL 1 6 Notas: B = Numero de bytes ocupados por la instruccin en la memoria de programa. C = Numero de estados de reloj (T) empleados por la instruccin. Cuando hay mas de una especificacin (7/10, 9/18, 6/12) la 1era se da si no hay salto y la 2da si hay salto. d8, d16 = Dato de 8 o 16 bits , o sea, ocupa 1 o 2 bytes, dir = Direccin de memoria (16 bits) Memoria(HL) o Memoria(dir) = Indica contenido de la direccin de memoria apuntada por HL o dir (Ver nota anterior)
Prof. Yomarvys Osorio

CDIGO DE OPERACIN ASOCIADO A CADA NEMNICO 0 0 1 2 3 4 5 6 7 8 9 A B C D E F


DAD B DAD D DAD H DAD SP LDA DCX SP INR A DCR A MVI A CMC NOP LXI B STAX B INX B INR B DCR B MVI B RLC LXI D STAX D INX D INR D DCR D MVI D RAL LXI H SHLD INX H INR H DCR H MVI H DAA LXI SP STA INX SP INR M

D
RNC

E
RPO RP

MOV B, B MOV D, B MOV H, B MOV M, B ADD B SUB B

ANA B ORA B RNZ

MOV B, C MOV D, C MOV H, C MOV M, C ADD C SUB C ANA C ORA C POP B POP D POP H POP PSW MOV B, D MOV D, D MOV H, D MOV M, D ADD D SUB D ANA D ORA D JNZ MOV B, E MOV D, E MOV H, E MOV M, E ADD E SUB E

JNC OUT CNC

JPO XTHL CPO

JP DI CP

ANA E ORA E JMP

MOV B, H MOV D, H MOV H, H MOV M, H ADD H SUB H ANA H ORA H CNZ

DCR M MOV B, L MOV D, L MOV H, L MOV M, L ADD L MVI M STC MOV B, M MOV D, M MOV H, M HLT

SUB L

ANA L

ORA L PUSH B PUSH D PUSH H PUSH PSW SUI RST 2 RC ANI RST 4 RPE PCHL JC IN CC JPE XHCG CPE ORI RST 6 RM SPHL JP EI CM

ADD M SUB M ANA M ORA M ADI ANA A ORA A RST 0 XRA B CMP B RZ XRA C CMP C RET XRA D CMP D JZ XRA E CMP E XRA H CMP H CZ XRA L CMP L CALL

MOV B, A MOV D, A MOV H, A MOV M, A ADD A SUB A MOV C, B MOV E, B MOV L, B MOV A, B ADC B SBB B MOV C, C MOV E, C MOV L, C MOV A, C ADC C SBB C MOV C, D MOV E, D MOV L, D MOV A, D ADC D SBB D MOV C, E MOV E, E MOV L, E MOV A, E ADC E SBB E

LDAX B LDAX D LHLD DCX B INR C DCR C MVI C RRC DCX D INR E DCR E MVI E RAR DCX H INR L DCR L MVI L CMA

MOV C, H MOV E, H MOV L, H MOV A, H ADC H SBB H MOV C, L MOV E, L MOV L, L MOV A, L ADC L

SBB L

MOV C, M MOV E, M MOV L, M MOV A, M ADC M SBB M XRA M CMP M ACI MOV C, A MOV E, A MOV L, A MOV A, A ADC A SBB A

SBI RST 3

XRI RST 5

CPI RST 7

XRA A CMP A RST 1

Prof. Yomarvys Osorio

Instrucciones Para Transferencia De Datos Con El 8085: Estas ocupan la mayor parte del conjunto de instrucciones del microprocesador 8085 y bsicamente posee cuatro tipos: 1) De movimiento. MOV: Realizan transferencias entre los registros internos del micro: MOV r1, r2 Siendo: r1 = El registro interno destino (A, B, C, D, E, H o L). r2 = El registro interno origen (A, B, C, D, E, H o L). O desde una posicin de memoria a cualquiera de los registros internos y viceversa: MOV r, M Siendo: r = El registro interno destino (A, B, C, D, E, H o L). M = La posicin de memoria origen, apuntada por los registros HL. MOV M, r Siendo: M = La posicin de memoria destino, apuntada por los registros HL. r = El registro interno origen (A, B, C, D, E, H o L). Ejemplo de transferencia de datos con la memoria:
Memoria de datos 307F 3080 10101010 Memoria de datos 307F 3080 11001100 Registros internos H L 30h 80h C 10101010 Antes de la instruccin Memoria de datos 307F 3080 11001100

MOV M, C

MOV C, M

C 10101010 Despus de la instruccin

C 11001100 Despus de la instruccin

Las instrucciones de movimiento con la memoria son un claro ejemplo del direccionamiento indirecto, ya que en la instruccin se indica la direccin donde se encuentra el dato a mover, por medio de la pareja de registros HL y no directamente. 2) De movimiento inmediato. MVI: Carga el dato especificado por la instruccin, en un registro interno del micro: MVI r, dato Siendo: r = El registro destino (A, B, C, D, E, H o L). dato = Nmero o Byte a ser cargado en el registro. O carga el dato especificado por la instruccin, en una posicin de memoria: MVI M, dato Siendo: M = La posicin de memoria destino, apuntada por los registros HL. dato = Byte a ser cargado en la posicin de memoria.
Prof. Yomarvys Osorio

Ejemplo de movimiento inmediato de datos a la memoria:

Memoria de datos 307F 3080

Memoria de datos 307F 3080

0000000 Registros internos H 30h L 80h

50

MVI M, 50

Antes de la instruccin

Despus de la instruccin

3) De carga extendida inmediata. LXI: Carga el dato de 16 bits especificado por la instruccin, en los registros pares internos al micro incluyendo el SP: LXI rp, dato16 Siendo: rp = Los registros pares destino (BC, DE, HL o SP). Dato16 = Nmero de 16 bits o 2 Byte a ser cargados en los registros pares. Ejemplo de carga extendida inmediata:

Registros internos B C 00h 00h Antes de la instruccin

LXI B, 3050

Registros internos B C 30h 50h Despus de la instruccin

4) De almacenamiento e intercambio. STA, STAX, LDA, LDAX, LHSD, SHSD y SPHL: Estas cumplen dos funciones bsicas, que son: A.- Cargar (load) datos desde la memoria hasta los registros internos A o HL. LDAX rp Siendo: rp = Los Registros pares, (BC, DE o HL), que indican la direccin de memoria donde se encuentra el dato a cargar en A. LDA dir Siendo: dir = Direccin de memoria donde se encuentra el dato a cargar en A. LHLD dir Siendo: dir = Direccin de memoria donde se encuentra el dato a cargar en H y L. Esta carga a L con el contenido de dir y a H con el contenido de la direccin siguiente, es decir, dir + 1.
Prof. Yomarvys Osorio

B.- La segunda funcin es almacenar (store) los contenidos de los registros A o HL en la memoria. STAX rp Siendo: rp = Registros pares (BC, DE o HL) que indican la direccin donde almacenar el contenido de A. STA dir Siendo: dir = Direccin de memoria donde almacenar el contenido de A. SHLD dir Siendo: dir = Direccin de memoria donde almacenar el contenido de H y L. Esta almacena a L en la posicin dada por dir y a H en la posicin de la direccin siguiente. Las primeras instrucciones, tanto en A.- y B.- utiliza direccionamiento indirecto, ya que en estas se indica la direccin por medio de los registros pares del micro y las dos restante utilizan direccionamiento directo, ya que se indica directamente la direccin. Ejemplo de carga y almacenamiento indirecto del registro A con la memoria:
Memoria de datos 4051 4052 4053 ? 4Eh ? STAX B Memoria de datos 4051 4052 4053 ? 60h ? Registros internos B C 40h 52h A 4Eh Antes de la instruccin LDAX B Memoria de datos 4051 4052 4053 ? 60h ?

A 4Eh Despus de la instruccin

A 60H Despus de la instruccin

Ejemplo de carga y almacenamiento directo del registro A con la memoria:


Memoria de datos 4051 4052 4053 ? 4Eh ? STA 4052h Memoria de datos 4051 4052 4053 ? 60h ? LDA 4052h A 60H Despus de la instruccin Memoria de datos 4051 4052 4053 ? 60h ?

A 4Eh Despus de la instruccin

A 4Eh Antes de la instruccin

Prof. Yomarvys Osorio

Ejemplo de carga y almacenamiento de los registros H y L con la memoria:


Memoria de datos 4051 4052 4053 ? 50h 7Fh LHLD 4052h Registros internos H L 7Fh 50h Despus de la instruccin Memoria de datos 4051 4052 4053 ? 50h 7Fh Registros internos H L 3Fh 43h SHLD 4052h Registros internos H L 3Fh 43h Despus de la instruccin Memoria de datos ? 43h 3Fh 4051 4052 4053

Antes de la instruccin

Una instruccin adicional, que posee el 8085 es la de intercambiar los contenidos de los registros pares DE y HL: XCHG Ejemplo de intercambio de los registros HL y DE:
Registros internos D E 3Fh 43h 50h 20h H L Antes de la instruccin Registros internos D E 50h 20h 3Fh 43h H L

XCHG

Despus de la instruccin

Instrucciones Aritmticas y Lgicas Con El 8085: En el microprocesador 8085 estas instrucciones almacenan el resultado en el registro A, a menos que se indique lo contrario, adems cabe destacar que estas instrucciones modifican los bits del registro estatus. Las instrucciones aritmtico lgicas se dividen como sigue: 1) Instrucciones de adicin o suma: A.- La suma binaria ADD: Realizan la suma de cualquiera de los registros internos del micro con el acumulador A sin considerar el acarreo: ADD r Siendo: r = Los registros internos del micro (A, B, C, D, E, H o L). O la suma de una posicin de memoria con el acumulador A: ADD M Siendo: M = La posicin de memoria, sealada por los registros HL.
Prof. Yomarvys Osorio

B.- La suma binaria con acarreo ADC: Realizan la suma de cualquiera de los registros internos del micro y el acarreo con el acumulador A: ADC r Siendo: r = Los registros internos del micro (A, B, C, D, E, H o L). O la suma de una posicin de memoria con A: ADC M Siendo: M = La posicin de memoria, sealada por los registros HL. Ejemplo de la suma con acarreo:
Registros internos A 10100001 10100010 B
S Z AC P CY

ADC B

Registros internos A 01000100 10100010 B


S Z AC P CY

Operacin suma

10100001 Acumulador
+

10100010
+

Registro B

- - 1 Antes de la Instruccin

- - 1 Despus de la Instruccin 1
CY

1 01000100

Bit CY Resultado

C.- La suma binaria inmediata ADI: Suma en forma inmediata el dato especificado por la instruccin con el contenido del acumulador A: ADI dato Siendo: dato = Nmero o Byte a ser sumado con el acumulador A. D.- La suma binaria inmediata con acarreo ACI: Suma en forma inmediata el dato especificado por la instruccin y el acarreo con el contenido del acumulador A: ACI dato Siendo: dato = Nmero o Byte a ser sumado con el acarreo y el acumulador A. E.- La suma binaria doble DAD: Realizan la suma de cualquiera de los registros pares del micro con el par de registros HL, el resultado se almacena en HL: DAD rp Siendo: rp = Registros pares (BC, DE o HL) que se suma al registro par HL. 2) Instrucciones de sustraccin o resta: A.- La resta binaria SUB: Restan cualquiera de los registros internos del micro del contenido del acumulador A, sin considerar el prstamo: SUB r Siendo: r = Cualquier registro interno del micro (A, B, C, D, E, H o L). O restan el contenido de una posicin de memoria del contenido del acumulador A:
Prof. Yomarvys Osorio

SUB M Siendo: M = Es una posicin de memoria, sealada por los registros HL. B.- La resta binaria con prstamo SUB: Restan cualquiera de los registros internos del micro y el prstamo del acumulador A: SBB r Siendo: r = Cualquier registro interno del micro (A, B, C, D, E, H o L). O restan el contenido de una posicin de memoria y el prstamo del contenido de A. SBB M Siendo: M = Es una posicin de memoria, sealada por los registros HL. Ejemplo de la resta con prstamo:
Registros internos A 00000100 00000010 C
S Z AC P CY

SBB C

Registros internos A 00000001 00000010 C


S Z AC P CY

La operacin resta se realiza por complemento a dos

0000 0010 + 1 0000 0011 0000 0100 + 1111 1101 1 0000 0001

Registro C Com. a 2 de CY C CY Acumulador Com. a 2 de C CY A (C CY)

- - 1 Antes de la Instruccin

- - 1 Despus de la Instruccin

C.- La resta binaria inmediata SUI: Resta el dato especificado por la instruccin del acumulador A, sin considerar el prstamo: SUI dato Siendo: dato = Nmero o Byte a ser restado del acumulador A. D.- La resta binaria inmediata con prstamo SBI: Resta el dato especificado por la instruccin y el prstamo del contenido del acumulador A: SBI dato Siendo: dato = Nmero o Byte a ser restado del acumulador A. 3) Instrucciones de incremento y decremento: A.- Incremento de registros INR: Incrementa en uno (1) el valor de cualquiera de los registros internos del micro: INC r Siendo: r = Cualquier registro interno del micro (A, B, C, D, E, H o L). O incrementan en uno (1) una posicin de memoria: INC M Siendo: M = Es una posicin de memoria, sealada por los registros HL.
Prof. Yomarvys Osorio

O incrementan en uno (1) el valor de cualquiera de los registros pares internos del micro: INX rp Siendo: rp = Cualquiera de los registros pares del micro (BC, DE o HL). B.- Decremento de registros DCR: Decrementan en uno (1) el valor de cualquiera de los registros internos del micro: DCR r Siendo: r = Cualquier registro interno del micro (A, B, C, D, E, H o L). O decrementan en uno (1) una posicin de memoria: DCR M Siendo: M = Es una posicin de memoria, sealada por los registros HL. O decrementan en uno (1) el valor de cualquiera de los registros pares internos del micro: DCX rp Siendo: rp = Cualquiera de los registros pares del micro (BC, DE o HL). Ejemplo de incremento de una posicin de memoria:
Memoria de datos 3088 72h Registros internos H L 30h 88h Antes de la instruccin Memoria de datos 3088 73h Registros internos H L 30h 88h Despus de la instruccin

INC M

4) Instrucciones Lgicas: A.- Instruccin AND: Realiza el producto lgico del acumulador A con cualquiera de los registros internos del micro: ANA r Siendo: r = Cualquier registro interno del micro (A, B, C, D, E, H o L). O con una posicin de memoria: ANA M Siendo: M = Es una posicin de memoria, sealada por los registros HL. O con el dato especificado por la instruccin: ANI dato Siendo: dato = Nmero o Byte inmediato en la instruccin.

Prof. Yomarvys Osorio

B.- Instruccin OR: Realiza la suma lgica del acumulador A con cualquiera de los registros internos del micro: ORA r Siendo: r = Cualquier registro interno del micro (A, B, C, D, E, H o L). O con una posicin de memoria: ORA M Siendo: M = Es una posicin de memoria, sealada por los registros HL. O con el dato especificado por la instruccin: ORI dato Siendo: dato = Nmero o Byte inmediato en la instruccin. C.- Instruccin XOR: Realiza la operacin o exclusivo del acumulador A con cualquiera de los registros internos del micro: XRA r Siendo: r = Cualquier registro interno del micro (A, B, C, D, E, H o L). O con una posicin de memoria: XRA M Siendo: M = Es una posicin de memoria, sealada por los registros HL. O con el dato especificado por la instruccin: XRI dato Siendo: dato = Nmero o Byte inmediato en la instruccin. D.- Comparacin binaria CMP: Realiza una resta binaria del acumulador A (sin modificar el contenido del acumulador) con cualquiera de los registros internos del micro: CMP r Siendo: r = Cualquier registro interno del micro (A, B, C, D, E, H o L). O con una posicin de memoria: CMP M Siendo: M = Es una posicin de memoria, sealada por los registros HL. O con el dato especificado por la instruccin: CPI dato Siendo: dato = Nmero o Byte inmediato en la instruccin. Ejemplo la instruccin AND:
C 00110101 A 00010000 C 00110101 A 00010000
S Z AC P CY

ANA C

00- 1- 00

Antes de la instruccin

Despus de la instruccin Prof. Yomarvys Osorio

Ejemplo la instruccin XOR:


Memoria de datos 8055 10101010

Memoria de datos 8055 10101010

H 80h

L 55h XRA M A 10101010

Status
S Z AC P CY

A 00000111 Antes de la instruccin

10- 0- 00

Despus de la instruccin

E.- Instrucciones de rotacin: Permiten hacer girar los bits del acumulador A, es decir, desplazar internamente esos bits a la derecha o a la izquierda: RRC RAR o o RLC RAL Incluyendo el bit de acarreo CY: Ejemplo las instrucciones de rotacin:
Rotacin a la izquierda (RLC) CY Acumulador Rotacin a la derecha (RRC) Acumulador CY

Rotacin a la izquierda con acarreo (RAL) CY Acumulador

Rotacin a la derecha con acarreo (RAR) Acumulador CY

E.- Complementar el registro A: Permite negar o invertir el contenido del acumulador A: CMA F.- Complementar el acarreo CY: Permite invertir el contenido del acarreo CY: STC CMC Coloca en uno la bandera de acarreo Complementa la bandera de acarreo

G.- Ajuste decimal DAA: Permite ajustar los ocho bits contenidos en el acumulador A para formar dos dgitos de cuatro bits de tipo BCD. Este utiliza el siguiente proceso:

Prof. Yomarvys Osorio

1.- Si el valor de los cuatro (4) bits menos significativos del acumulador es mayor que nueve (9), o si esta activa la bandera AC, se suma un seis (6) al acumulador. 2.- Si el valor de los cuatro (4) bits ms significativos del acumulador es ahora mayor que nueve (9), o si esta activa la bandera CY, se suma un seis (6) a los cuatro (4) bits ms significativos del acumulador. Ejemplo la instruccin DAA:

A 10001111

DAA +6

A 10010101 (9) (5)

Antes de la instruccin

Despus de la instruccin

Prof. Yomarvys Osorio

You might also like