El lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir programas
informticos, y constituye la representacin ms directa del cdigo mquina especfico para
cada arquitectura de computadoras legible por un programador. Fue usado ampliamente en el pasado para el desarrollo de software, pero actualmente slo se utiliza en contadas ocasiones, especialmente cuando se requiere la manipulacin directa del hardware o se pretenden rendimientos inusuales de los equipos. Un programa utilitario llamado ensamblador es usado para traducir sentencias del lenguaje ensamblador al cdigo de mquina del computador objetivo. El ensamblador realiza una traduccin ms o menos isomorfa (un mapeo de uno a uno) desde las sentencias mnemnicas a las instrucciones y datos de mquina. Esto est en contraste con los lenguajes de alto nivel, en los cuales una sola declaracin generalmente da lugar a muchas instrucciones de mquina. Muchos sofisticados ensambladores ofrecen mecanismos adicionales para facilitar el desarrollo del programa, controlar el proceso de ensamblaje, y la ayuda de depuracin. Particularmente, la mayora de los ensambladores modernos incluyen una facilidad de macro (descrita ms abajo), y se llaman macro ensambladores. Fue usado principalmente en los inicios del desarrollo de software, cuando an no se contaba con potentes lenguajes de alto nivel y los recursos eran limitados. Actualmente se utiliza con frecuencia en ambientes acadmicos y de investigacin, especialmente cuando se requiere la manipulacin directa de hardware, alto rendimiento, o un uso de recursos controlado y reducido. Tambin es utilizado en el desarrollo de controladores de dispositivo (en ingls, device drivers) y en el desarrollo de sistemas operativos, debido a la necesidad del acceso directo a las instrucciones de la mquina. Muchos dispositivos programables (como los microcontroladores) an cuentan con el ensamblador como la nica manera de ser manipulados. Caractersticas 1. Programar en lenguaje ensamblador es difcil de aprender, entender, leer, escribir, depurar y mantener, por eso surgi la necesidad de los lenguajes compilados. 2. A pesar de perder rendimiento en un proceso de compilacin, en la actualidad la mayora de las computadoras son suficientemente rpidas. 3. El lenguaje ensamblador no es portable. 4. Programar en lenguaje ensamblador lleva mucho tiempo. 5. Los programas hechos en lenguaje ensamblador son generalmente ms rpidos. Al programar cuidadosamente en lenguaje ensamblador se pueden crear programas de 5 a 100 veces ms rpidos que con lenguajes de alto nivel. 6. Los programas hechos en lenguaje ensamblador generalmente ocupan menos espacio. Un buen programa en lenguaje ensamblador puede ocupar casi la mitad de espacio que su contrapartida en lenguaje de alto nivel. 7. Con el lenguaje ensamblador se pueden crear segmentos de cdigo imposibles de formar en un lenguaje de alto nivel. La mayora de las CPU tienen ms o menos los mismos grupos de instrucciones, aunque no necesariamente tienen todas las instrucciones de cada grupo. Las operaciones que se pueden realizar varan de una CPU a otra. Una CPU particular puede tener instrucciones que no tenga otro y viceversa. Los primeros microprocesadores de 8 bits no tenan operaciones para multiplicar o dividir nmeros, por ejemplo, y haba que hacer subrutinas para realizar esas operaciones. Otras CPU puede que no tengan operaciones de punto flotante y habra que hacer o conseguir bibliotecas que realicen esas operaciones. Las instrucciones de la CPU pueden agruparse, de acuerdo a su funcionalidad, en: Operaciones con enteros: (de 8, 16, 32 y 64 bits dependiendo de la arquitectura de la CPU, en los sistemas muy viejos tambin de 12, 18, 24, 36 y 48 bits) Estas son operaciones realizadas por la Unidad aritmtico lgica de la CPU
Operaciones aritmticas. Como suma, resta, multiplicacin, divisin, mdulo, cambio de
signo Operaciones booleanas. Operaciones lgicas bit a bit como AND, OR, XOR, NOT Operaciones de bits. Como desplazamiento o shift lgico y rotaciones u Operadores a nivel de bits (hacia la derecha o hacia la izquierda, a travs del bit del acarreo o sin l) Comparaciones Operaciones de mover datos: Entre los registros y la memoria: Aunque la instruccin se llama "mover", en la CPU, "mover datos" significa en realidad copiar datos, desde un origen a un destino, sin que el dato desaparezca del origen. Se pueden mover valores:
Desde un registro a otro
Desde un registro a un lugar de la memoria Desde un lugar de la memoria a un registro Desde un lugar a otro de la memoria Un valor inmediato a un registro Un valor inmediato a un lugar de memoria Operaciones de pila (stack, en ingls):
PUSH (escribe datos hacia el tope de la pila)
POP (lee datos desde el tope de la pila) Operaciones de entrada/salida: Son operaciones que mueven datos de un registro, desde y hacia un puerto; o de la memoria, desde y hacia un puerto
INPUT Lectura desde un puerto de entrada
OUTPUT Escritura hacia un puerto de salida Operaciones para el control del flujo del programa:
Llamadas y retornos de subrutinas
Llamadas y retornos de interrupciones Saltos condicionales de acuerdo al resultado de la comparaciones Saltos incondicionales Operaciones con nmeros reales: El estndar para las operaciones con nmeros reales en las CPU est definido por el IEEE 754. Una CPU puede tener operaciones de punto flotante con nmeros reales mediante el coprocesador numrico (si lo hay), como las siguientes: Operaciones aritmticas. Suma, resta, multiplicacin, divisin, cambio de signo, valor absoluto, parte entera Operaciones trascendentales Operaciones trigonomtricas. Seno, coseno, tangente, arcotangente Operaciones con logaritmos, potencias y races Otras El lenguaje ensamblador tiene mnemnicos para cada una de las instrucciones de la CPU en adicin a otros mnemnicos a ser procesados por el programa ensamblador (como por ejemplo macros y otras sentencias en tiempo de ensamblado).