Fundamentos del Lenguaje Ensamblador: Características, Tipos y Código Máquina
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 5,9 KB
Fundamentos del Lenguaje Ensamblador
El lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir programas y constituye la representación más directa del código máquina específico para cada arquitectura de computadoras legible por un programador.
Características Principales
- Complejidad: Programar en lenguaje ensamblador puede ser difícil de aprender, entender, leer, escribir, depurar y mantener. Esta complejidad impulsó el desarrollo de los lenguajes compilados.
- Rendimiento vs. Desarrollo: Aunque se puede perder algo de rendimiento en un proceso de compilación, en la actualidad la mayoría de las computadoras son suficientemente rápidas, haciendo que la facilidad de los lenguajes de alto nivel sea a menudo preferible.
- Portabilidad: El lenguaje ensamblador no es portable; está ligado directamente a la arquitectura del hardware específico.
- Tiempo de Desarrollo: Programar en lenguaje ensamblador generalmente requiere mucho más tiempo que usar lenguajes de alto nivel.
- Velocidad de Ejecución: Los programas hechos en lenguaje ensamblador son generalmente más rápidos. Una programación cuidadosa puede resultar en programas de 5 a 100 veces más rápidos que sus equivalentes en lenguajes de alto nivel.
- Tamaño del Código: Los programas en ensamblador suelen ocupar menos espacio en memoria. Un buen programa puede ocupar casi la mitad de espacio que su contrapartida en lenguaje de alto nivel.
- Capacidades Únicas: Permite crear segmentos de código imposibles de generar directamente desde un lenguaje de alto nivel, ofreciendo un control total sobre el hardware.
Proceso de Ensamblado y Código Máquina
Un programa escrito en lenguaje ensamblador consiste en una serie de instrucciones que corresponden al flujo de órdenes ejecutables que pueden ser cargadas en la memoria de una computadora.
La transformación del lenguaje ensamblador en código máquina la realiza un programa llamado ensamblador. El proceso inverso, la traducción de código máquina a lenguaje ensamblador, la puede efectuar un desensamblador. A diferencia de los lenguajes de alto nivel, usualmente existe una correspondencia uno a uno (1:1) entre las instrucciones simples del ensamblador y las instrucciones del lenguaje de máquina.
Los ensambladores son, por lo general, más sencillos de implementar que los compiladores de lenguajes de alto nivel y han estado disponibles desde la década de 1950. Algunos ensambladores modernos (a veces llamados ensambladores con características avanzadas o de alto nivel) ofrecen posibilidades de abstracción que incluyen:
- Control avanzado de estructuras (bucles, condicionales).
- Declaración de procedimientos y funciones de alto nivel.
- Soporte para tipos de datos abstractos, incluyendo estructuras, registros, uniones, clases y conjuntos.
- Sofisticado procesamiento de macros.
Código Máquina
El código máquina está formado por instrucciones sencillas que, dependiendo de la estructura del procesador, pueden especificar:
- Registros específicos para operaciones aritméticas, direccionamiento o control de funciones.
- Posiciones de memoria específicas (offset).
- Modos de direccionamiento usados para interpretar operandos.
Tipos de Ensambladores
Los ensambladores se pueden clasificar de diversas maneras:
- Ensambladores Cruzados (Cross Assemblers): Permiten desarrollar programas en una máquina (ej. un PC potente) que luego se ejecutarán en un sistema diferente (ej. un microcontrolador), aprovechando el soporte de medios físicos y de programación de la primera. Son esenciales para sistemas embebidos o arquitecturas muy especializadas.
- Ensambladores Residentes: Son aquellos que se ejecutan en la misma computadora para la cual se está generando el código. Permanecen en la memoria principal y cargan, para su ejecución, al programa objeto producido.
- Macroensambladores: Permiten el uso de macroinstrucciones (macros). Una macro es una abreviatura para una secuencia de instrucciones de ensamblador, lo que facilita la reutilización de código, la modularidad y la legibilidad del programa fuente.
- Microensambladores: Se utilizan para escribir o modificar el microprograma de un procesador. El microprograma reside en una memoria de control dentro de la CPU e indica al intérprete de instrucciones cómo debe actuar para ejecutar cada instrucción de máquina. Existen procesadores (especialmente los más antiguos o especializados) que permiten la modificación de sus microprogramas.
- Ensambladores de una fase: Leen una línea del programa fuente y la traducen directamente para producir una instrucción en lenguaje máquina o la ejecutan si se trata de una pseudoinstrucción (una directiva para el ensamblador). Tienen limitaciones para manejar referencias futuras (símbolos definidos más adelante en el código), lo que a veces requiere restricciones en la programación o el uso de soluciones alternativas.
- Ensambladores de dos fases: Realizan la traducción en dos etapas para resolver el problema de las referencias futuras. En la primera fase, leen el programa fuente completo y construyen una tabla de símbolos, que almacena todas las etiquetas y variables definidas junto con sus direcciones de memoria relativas. En la segunda fase, vuelven a leer el programa fuente y realizan la traducción completa instrucción por instrucción, utilizando la tabla de símbolos para resolver todas las referencias a direcciones.