lenguaje ensamblador


En programación informática , el lenguaje ensamblador (o lenguaje ensamblador , [1] o código de máquina simbólico [2] [3] ), es cualquier lenguaje de programación de bajo nivel con una correspondencia muy fuerte entre las instrucciones del lenguaje y las instrucciones del código de máquina de la arquitectura. . [4] El lenguaje ensamblador generalmente tiene una declaración por instrucción de máquina (1: 1), pero constantes, comentarios , directivas del ensamblador , [5] etiquetas simbólicas de, por ejemplo, ubicaciones de memoria , registros y macros [6] [1] generalmente también son compatibles.

El código ensamblador se convierte en código de máquina ejecutable mediante un programa de utilidad denominado ensamblador . El término "ensamblador" generalmente se atribuye a Wilkes , Wheeler y Gill en su libro de 1951 La preparación de programas para una computadora digital electrónica , [7] quienes, sin embargo, usaron el término para referirse a "un programa que ensambla otro programa que consta de varios secciones en un solo programa". [8] El proceso de conversión se conoce como ensamblado , como ensamblar el código fuente . El paso computacional cuando un ensamblador está procesando un programa se llamatiempo de montaje .

Debido a que el ensamblaje depende de las instrucciones del código de la máquina, cada lenguaje ensamblador [nb 1] es específico para una arquitectura de computadora en particular . [9]

A veces hay más de un ensamblador para la misma arquitectura y, a veces, un ensamblador es específico para un sistema operativo o para sistemas operativos particulares. La mayoría de los lenguajes ensambladores no proporcionan una sintaxis específica para las llamadas al sistema operativo, y la mayoría de los lenguajes ensambladores [nota 2] se pueden usar universalmente con cualquier sistema operativo, ya que el lenguaje brinda acceso a todas las capacidades reales del procesador , sobre las cuales se basan todos los mecanismos de llamada del sistema. en definitiva descansar. En contraste con los lenguajes ensambladores, la mayoría de los lenguajes de programación de alto nivel generalmente son portátiles a través de múltiples arquitecturas pero requieren interpretación ocompilar , una tarea mucho más complicada que ensamblar.

En las primeras décadas de la informática, era común que tanto la programación de sistemas como la programación de aplicaciones se realizaran completamente en lenguaje ensamblador. Si bien todavía es irremplazable para algunos propósitos, la mayoría de la programación ahora se lleva a cabo en lenguajes interpretados y compilados de alto nivel. En No Silver Bullet , Fred Brooks resumió los efectos del alejamiento de la programación en lenguaje ensamblador: "Seguramente el golpe más poderoso para la productividad, confiabilidad y simplicidad del software ha sido el uso progresivo de lenguajes de alto nivel para la programación. La mayoría de los observadores lo atribuyen desarrollo con al menos un factor de cinco en productividad, y con ganancias concomitantes en confiabilidad, simplicidad y comprensibilidad”.[10]

Hoy en día, es típico usar pequeñas cantidades de código de lenguaje ensamblador dentro de sistemas más grandes implementados en un lenguaje de nivel superior, por motivos de rendimiento o para interactuar directamente con el hardware de maneras no compatibles con el lenguaje de nivel superior. Por ejemplo, poco menos del 2% de la versión 4.9 del código fuente del kernel de Linux está escrito en ensamblador; más del 97% está escrito en C. [11]