top of page



El lenguaje ensamblador, o assembler (assembly language en inglés), es un lenguaje de programación de bajo nivel para los computadores, microprocesadores, microcontroladores y otros circuitos integradosprogramables. 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.

Un programa utilitario llamado ensamblador es usado para traducir sentencias del lenguaje ensamblador al código de máquina del computador objetivo. El ensamblador realiza una traducción más o menos isomorfa(un mapeo de uno a uno) desde las sentencias mnemónicas a las instrucciones y datos de máquina. Esto está en contraste con los lenguajes de alto nivel, en los cuales una sola declaración generalmente da lugar a muchas instrucciones de máquina.

Muchos sofisticados ensambladores ofrecen mecanismos adicionales para facilitar el desarrollo del programa, controlar el proceso de ensamblaje, y la ayuda de depuración. Particularmente, la mayoría de los ensambladores modernos incluyen una facilidad de macro (descrita más abajo), y son llamados macro ensambladores.

Fue usado principalmente en los inicios del desarrollo de software, cuando aún no se contaba con potentes lenguajes de alto nivel y los recursos eran limitados. Actualmente se utiliza con frecuencia en ambientes académicos y de investigación, especialmente cuando se requiere la manipulación directa de hardware, alto rendimiento, o un uso de recursos controlado y reducido.

Muchos dispositivos programables (como los microcontroladores) aún cuentan con el ensamblador como la única manera de ser manipulados.


 

  • El código escrito en lenguaje ensamblador posee una cierta dificultad de ser entendido ya que su estructura se acerca al lenguaje máquina, es decir, es un lenguaje de bajo nivel.

  • El lenguaje ensamblador es difícilmente portable, es decir, un código escrito para un microprocesador, puede necesitar ser modificado, para poder ser usado en otra máquina distinta. Al cambiar a una máquina con arquitectura diferente, generalmente es necesario reescribirlo completamente.

  • Los programas hechos por un programador experto en lenguaje ensamblador son generalmente mucho más rápidos y consumen menos recursos del sistema (memoria RAM y ROM) que el programa equivalente compilado desde un lenguaje de alto nivel. Al programar cuidadosamente en lenguaje ensamblador se pueden crear programas que se ejecutan más rápidamente y ocupan menos espacio que con lenguajes de alto nivel.

  • Con el lenguaje ensamblador se tiene un control muy preciso de las tareas realizadas por un microprocesador por lo que se pueden crear segmentos de código difíciles y/o muy ineficientes de programar en un lenguaje de alto nivel, ya que, entre otras cosas, en el lenguaje ensamblador se dispone de instrucciones del CPU que generalmente no están disponibles en los lenguajes de alto nivel.

  • También se puede controlar el tiempo en que tarda una rutina en ejecutarse, e impedir que se interrumpa durante su ejecución.

 

Una vez que se establece la configuración de una computadora y su unidad de control microprogramado, es tarea del diseñador generar el microcó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 microprogramada.

 

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 microoperaciones 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 microprogramarse. Para no complicar el ejemplo de microprogramacíón, aquí sólo se consideran cuatro instrucciones. Debe recordarse que pueden incluirse otras 12 operaciones y cada instrucción debe microprogramarse mediante el procedimiento que se muestra enseguida.

 

Los componentes básicos de una unidad de control microprogramada son la memoria y los circuitos que seleccionan la dirección siguiente. La parte de selección de dirección se llama secuenciador de mícroprograma. 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 un microprograma encargado 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 secuenciamiento de las μIs

 

3. MICROPROGRAMACIÓN Y PROGRAMACIÓN EN LENGUAJE ENSAMBLADOR

bottom of page