MICROPROCESADORES - EL SOFTWARE: LAS INSTRUCCIONES
   
  Los sistemas construídos sobre la base de los microprocesadores, requieren para su puesta en marcha, el desarrollo del software, es decir, el desarrollo de programas que una vez contruídos, son almacenados en las memorias permanentes (PROM, EPROM,...) del sistema, donde son buscados por el microprocesador para desarrollar todas las funciones y tareas deseadas.
   
  - DESARROLLO
   
 

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

Leer de la memoria una instrucción del programa. Interpretar la instrucción leída. Ejecutar dicha instrucción.

Debemos considerar además que los microprocesadores trabajan solamente con lenguaje de bajo nivel, es decir, trabajan con lenguaje máquina. Cada microprocesador o familia de microprocesadores, posee su propio lenguaje máquina que determina las capacidades propias de cada familia. Las instrucciones máquina son almacenadas en la memoria en forma de bytes, es decir, en forma de unos y ceros empleando por tanto el sistema binario de numeración. Sin embargo este sistema es muy complejo para trabajar directamente en él, por lo que se emplean otros sistemas como el hexadecimal, BCD, etc. para la representación de datos.

Para construir los programas, normalmente se emplean lenguajes de alto nivel, y luego se transforman los programas así escritos a lenguaje máquina asequible para el microprocesador. No obstante en nuestro caso emplearemos un lenguaje de bajo nivel (ensamblador) que trabaja con abreviaturas alfabéticas denominadas mnemónicos que constituyen las operaciones e instrucciones que ejecutará el microprocesador. Durante el desarrollo de este tema veremos las principales bases numéricas de representación, así como los diferentes tipos de instrucciones, modos de direccionamiento y se realizará un estudio de todo el repertorio de instrucciones propio del microprocesador 8085. Es conveniente leer todas y cada una de las instrucciones para ir familiarizándose con ellas y entender su modo de funcionamiento. Todo lo tratado aquí, son aspectos básicos de la programación que nospermiten crear programas ejecutables en el sistema electrónico presentado en esta serie de artículos.

BASES NUMEMRICAS DE REPRESENTACION
Ya se ha comentado que es el lenguaje máquina el único que el micrprocesador es capaz de tratar, es decir, solamente trabaja con unos y ceros. Este lenguaje resulta inapropiado para las personas, por lo que se desarrollan otros sistemas de representación más sencillos o más cómodos de manejar. En primer lugar debemos fijarnos en que el microrpocesador trabaja con bloques de información normalizados. Podemos destacar en este terreno:

EL BIT: Como unidad de información más elemental que adopta dos únicos estados, el uno o el cero.
EL OCTETO O BYTE: Constituído por una cadena de ocho bits.
LA PALABRA: Es el tamaño de información que el microprocesador puede manejar en paralelo. En función de la potencialidad del microprocesador tendremos palabras de 8 bits, 16 bits, 32 bits, etc.

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

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

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

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

SISTEMA DECIMAL CODIFICADO EN BINARIO (BCD): Se trata de un caso particular del binario que emplea cuatro bits para representar los números decimales del 0 al 9. Por tanto para transformar un número decimal, no tendremos más que tomar cada una de sus cifras y transformarla a binario empleando 4 bits. Por ejemplo: 279 = 0010 0111 1001

SISTEMA EXCESO A TRES: Toma como referencia el sistema BCD, sin más que añadir a cada digito el valor 3, es decir sumar:
   
 
   
  SISTEMA HEXADECIMAL: Es uno de los más empleados en programación. Sus diez primeros digitos se corresponden con los del sistema decimal y los seis restantes son las seis primeras letras mayúsculas del alfabeto (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F). La base de este sistema es el 16 y todas sus cifras pueden ser expresadas con cuatro bits. Para convertir un número binario a hexadecimal, agruparemos sus dígitos o bits de cuatro en cuatro y transformaremos cada uno de ellos de forma individual, obteniendo así la representación hexadecimal. Por ejemplo:
   
 
   
  SISTEMA DE REPRESENTACION ASCII: Se trata de un sistema de representación de datos empleado para facilitar intercambios de información. Es uno de los sistemas más empleados en la actualidad (junto al sistema EBCDIC). La codificación se lleva a cabo empleando una palabra de 8 bits, es decir, un octeto para cada carácter de información. Para encontrar el valor de un carácter numérico de una representación ASCII, es suficiente con restar el valor 48 y al contrario para encontrar la representación ASCII de un digito decimal habrá que sumar 48.
   
 
   
 

LOS TIPOS DE INSTRUCCIONES:
Después de haber tratado de forma superficial los sistemas de representación, vamos a ver los distintos tipos de instrucciones que utiliza un microprocesador. Básicamente puede decirse que el bloque de instrucciones debe ser completo y eficaz de modo que podamos realizar todos los cálculos necesarios de forma más rápida y precisa posible.

Una de las principales características de todo microprocesador es disponer de un buen conjunto de instrucciones que le den la mayor versatilidad posible. Se establecen los siguientes grupos, tipos o conjuntos de instrucciones:

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

2- MOVIMIENTO DE DATOS: Este tipo de instrucciones de movimiento o transferencia de datos, permiten realizar una copia del contenido de un registro o dirección de memoria (origen), en otro registro o dirección de memoria (destino), sin alterar el contenido del origen.

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

4- INSTRUCCIONES DE COMPARACION: Son operaciones de restar o operaciones XOR entre dos operandos. Afectan a los flags pero no se almacena el resultado.

5- INSTRUCCIONES DE SALTO: Son instrucciones de modificación de secuencia que alteran la ejecución normal del programa, cargando el contador de programa con la nueva dirección en la que deseamos continúe ejecutándose el programa. Los saltos o bifurcaciones pueden ser:
- CONDICIONALES: Cuando son controlados por el estado de un indicador o flag, y basándose en dicho estado se decide si se salta o no.
- INCONDICIONALES: Cuando modifican el contador de programa sin condición previa. Dentro de cada uno de estos tipos, podemos encontrar además la particularidad de que al efectuar los saltos se realicen con posibilidad de retorno o no.

6- INSTRUCCIONES DE ENTRADA/SALIDA: Son en realidad instrucciones de transferencia, pero no entre registros o posiciones de memoria, sino con elementos periféricos que permiten la comunicación del microprocesador con el exterior.

7- INSTRUCCIONES DE CONTROL: Sirven para actuar internamente sobre el microprocesador, provocando detenciones en la ejecución del programa, etc.

8- INSTRUCCIONES DE BIT: Trabajan o tratan bits independientes.

9- INSRUCCIONES DE DESPLAZAMIENTO: Desplazan o rtoan hacia la izquierda o hacia la derecha los bits de un registro (acumulador).

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

1- DIRECCIONAMIENTO INMEDIATO: En este caso el objeto (un operando) se encuentra incluído en la instrucción, es decir, a continuación del código de la instrucción se añade el operando propiamente dicho. Las instrucciones que emplean este direccionamiento pueden ser de dos o tres bytes y son instrucciones de ejecución rápida y sencilla.

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

3- DIRECCIONAMIENTO ABSOLUTO: En este caso las instrucciones incluyen la dirección de memoria donde se encuentra el dato con el que se va a operar. En este tipo de direccionamiento pueden darse tres supuestos:
a) La instrucción apunta a un registro que contiene la información deseada (direccionamiento también llamado de regsitro).
b) La instrucción contiene la dirección completa en la que se encuentra el dato, empleando para ello tres bytes.
c) Cuando la instrucción se refiere solo a una parte de la memoria (pàgina). En este caso el byte más alto lo suministra el contador de programa y el byte más bajo se expresa a continuación del código de instrucción, por tanto solo se emplean dos bytes (Este direccionamiento también se llama de página base).

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

5- DIRECCIONAMIENTO INDIRECTO: La instrucción contiene una dirección a la que llamaremos D1. El contenido de D1 no es el objeto directo de nuestra instrucción, sino que contiene otra dirección que llamaremos D2. Esta nueva dirección D2 es la que contiene el dato que sí es objeto de la instrucción.

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

DIRECCIONAMIENTO DIRECTO ABSOLUTO: La instrucción contiene la dirección exacta y completa donde se encuentra el dato. Por ejemplo:

LHLD A716H

DIRECCIONAMIENTO POR REGISTRO: La instrucción lleva el registro en el que está el dato que va a ser tratado. Como por ejemplo:

MOV A,B
MOV B,C

DIRECCIONAMIENTO POR REGISTRO INDIRECTO: En la instrucción se especifica un registro cuyo contenido apunta a una dirección de memoria en la que se encuentra el dato. Por ejemplo:

MOV A,M

M es una referencia simbólica a una dirección apuntada o señalada por el par de registros HL.

DIRECCIONAMIENTO INMEDIATO: La instrucción contiene el dato con el que se desea operar, pudiendo ser el dato de uno o dos bytes:

LXI H,A0B7H
ADI 3AH

   
   
 
Sobre bibliografía de: Ing. Celestino Benítez Vázquez