MICROPROGRAMACIÓN Y PROGRAMACIÓN EN LENGUAJE ENSAMBLADOR El lenguaje ensamblador, o asamblea (assembly lenguaje en inglés), es un lenguaje de programación de bajo nivel para los computadores, microprocesadores, micro controladores y otros circuitos integrados programables. Implementa una representación simbólica de los códigos de máquina binarios y otras constantes necesarias para programar una arquitectura dada de CPU y constituye la representación más directa del código máquina específico para cada arquitectura legible por un programador. Esta representación es usualmente definida por el fabricante de hardware, y está basada en los mnemónicos que simbolizan los pasos de procesamiento (las instrucciones), los registros del procesador, las posiciones de memoria y otras características del lenguaje. Un lenguaje ensamblador es por lo tanto específico de cierta arquitectura de computador física (o virtual). Esto está en contraste con la mayoría de los lenguajes de programación de alto nivel, que idealmente son portátiles.
Una vez que se establece la configuración de una computadora y su unidad de control micro programado, es tarea del diseñador generar el micro código para la memoria de control. Esta generación de código se llama microprogramación y es un proceso similar a la programación de lenguaje de máquina convencional. Para apreciar este proceso, aquí presentamos una computadora digital simple y cómo se programa.
El programa de bloque de una computadora consta de dos unidades de memoria: una memoria principal para almacenar instrucciones y datos y una memoria de control para almacenar el microprograma. Se asocian cuatro registros con la unidad del procesador y dos con la unidad de control. Los registros del procesador son el contador de programa PC, el registro de direccionamiento AR, el registro de datos DR y el registro acumulador AC. La unidad de control tiene un registro de direccionamiento de control CAR y un registro de subrutina SBR. La memoria de control y sus registros se organizan como una unidad de control microprograma da.
La transferencia de información entre los registros del procesador se realiza mediante multiplexores, no por el bus común. DR puede recibir información de AC, PC o de la memoria. AR puede recibir información de PC o DR. PC sólo puede recibir información de AR. La unidad aritmética, lógica y de corrimiento realiza micro operaciones con datos de AC y DR y coloca el resultado en AC. Nótese que la memoria recibe su dirección de AR. Los datos de entrada escritos en la memoria provienen de DR, y los datos que se leen en la memoria sólo pueden ir a DR.
El formato de instrucción de computadora aparece. Consta de tres campos: un campo de 1 bit para direccionamiento indirecto representado por 1, un código de operación de 4 bits y un campo de dirección de 11 bits. La lista de cuatro de las 16 instrucciones posibles de referencia a memoria. La instrucción ADD suma el contenido del operando que se encuentra en la dirección efectiva al contenido de AC. La instrucción BRANCH provoca un brinco a la dirección efectiva sí el operando en AC es negativo. El programa pasa a ejecutar la siguiente instrucción si AC no es negativo. AC es negativo si su bit de signo (el bit a la extrema izquierda del registro) es un 1. La instrucción STORE transfiere el contenido de AC a la palabra de memoria especificada por la dirección efectiva. La instrucción EXCHANGE intercambia los datos entre AC y la palabra de memoria especificada por la dirección efectiva.
Después se mostrará que cada instrucción de computadora debe micro programarse. Para no complicar el ejemplo de microprogramación, aquí sólo se consideran cuatro instrucciones. Debe recordarse que pueden incluirse otras 12 operaciones y cada instrucción debe micro programarse mediante el procedimiento que se muestra enseguida.
Los componentes básicos de una unidad de control microprograma da son la memoria y los circuitos que seleccionan la dirección siguiente. La parte de selección de dirección se llama secuenciador de microprograma. Puede construirse un secuenciador de microprograma con funciones digitales que se ajusten a una aplicación particular. Sin embargo, al igual que existen grandes unidades RQM disponibles en encapsulados de circuitos integrados, también hay secuenciadores de propósito general convenientes para la construcción de unidades de control de microprograma. Para garantizar un amplio rango de aceptabilidad, un secuenciador de circuitos integrados debe proporcionar una organización interna que pueda adaptarse a un amplio rango de aplicaciones.
Un conjunto de microinstrucciones es una microprograma encargada de ejecutar una determinada instrucción
El conjunto de microprogramas que ejecutan las instrucciones se llama firmware o micro código
Requisitos a tener en cuenta:
– Limitación del tamaño de la memoria de control a utilizar – Establecer una correspondencia entre cada instrucción máquina y
su microprograma correspondiente
– Control del secuencia miento
Multiplicación en lenguaje ensamblador con sumas sucesivas
Sumas sucesivas.
Antes de escribir el código siempre es recomendable resolver el problema sin pensar en la programación así que explicare las sumas sucesivas primero.
Una multiplicación no es más que la suma de un mismo número N veces, por ejemplo.
Si multiplicamos 5 x 3 el 5 es el número que se va a sumar y el 3 es el número de veces que se realiza la suma si tomamos en cuenta que iniciamos en cero.
0+5= 5 //primera suma
5+5=10 // segunda suma
10+5=15 //tercer suma
Ahora al código.
Instrucciones en ensamblador
Como ya mencione tenemos que iniciar siempre en cero así que nos aseguramos que el acumulador este en 0 con la instrucción mvi.
Después necesitamos los números que se van a multiplicar (en este caso 5 y 3 como en el ejemplo anterior) los cuales también asignaremos con la instrucción mvi.
mvi b, 05
mvi c, 03
Podemos tomar cualquiera de los dos números para sumar y el otro para saber el numero de veces que se debe realizar la suma, así que uno se sumara al acumulador con add y el otro se le restara 1 con la instrucción dcr, así al llegar a 0 sabremos que hemos realizado las sumas necesarias.
add b
dcr c
Estas operaciones se deben hacer varias veces para poder llegar al resultado deseado así que necesitas un ciclo que repita las instrucciones, para esto usare una etiqueta que llamaremos salto y jnz como condición para que realice el salto siempre que la operación anterior sea diferente de 0.
salto:
add b
dcr c
jnz salto
El código completo quedaría así.
mvi b, 05h
mvi c, 03h
mvi a, 00h
salto:
add b
dcr c
Si queremos obtener los datos sin que los asignemos nosotros lo hacemos con la instrucción in y se lo asignamos a B y C de la siguiente forma.
in 00
mov b, a
in 00
mov c, a
mvi a, 00h
salto:
add b
dcr c
jnz salto
Espero que les sirva, Pueden dejarme sus comentarios y los responderé lo mas rápido que me sea posible.
Hasta la próxima.