El llinguaxe ensamblador, o assembler (n'inglés assembly language y la abreviación asm), ye un llinguaxe de programación de baxu nivel. Consiste nun conxuntu de mnemónicos que representen instruiciones básiques pa los ordenadores, microprocesadores, microcontroladores y otros circuitos integraos programables. Implementa una representación simbólica de los código de máquina binarios y otres constantes necesaries pa programar una arquiteutura de procesador y constitúi la representación más direuta del código máquina específicu pa cada arquiteutura legible por un programador. Cada arquiteutura de procesador tien el so propiu llinguaxe ensamblador que usualmente ye definida pol fabricante de hardware, y ta basada nos mnemónicos que simbolicen los pasos de procesamientu (les instruiciones), los rexistros del procesador, les posiciones de memoria y otres carauterístiques del llinguaxe. Un llinguaxe ensamblador ye polo tanto específicu de cierta arquiteutura d'ordenador física (o virtual). Esto ta en contraste cola mayoría de los llinguaxes de programación d'altu nivel, qu'idealmente son portables.
Un programa utilitariu llamáu ensamblador ye usáu pa traducir sentencies del llinguaxe ensamblador al códigu de máquina del ordenador oxetivu. L'ensamblador realiza una traducción más o menos isomorfa (un mapeo d'unu a unu) dende les sentencies mnemónicas a les instruiciones y datos de máquina. Esto ta en contraste colos llinguaxes d'altu nivel, nos cualos una sola declaración xeneralmente da llugar a munches instruiciones de máquina.
Munchos sofisticaos ensambladores ufierten mecanismos adicionales pa facilitar el desenvolvimientu del programa, controlar el procesu d'ensamblaxe, y l'ayuda de depuración. Particularmente, la mayoría de los ensambladores modernos inclúin una facilidá de macro (descrita más embaxo), y llámense macro ensambladores.
Foi usáu principalmente nos principios del desenvolvimientu de software, cuando entá nun se cuntaba con potentes llinguaxes d'altu nivel y los recursos yeren llindaos. Anguaño utilízase con frecuencia n'ambientes académicos y d'investigación, especialmente cuando se riquir la manipulación direuta de hardware, altu rendimientu, o un usu de recursos controláu y amenorgáu. Tamién ye utilizáu nel desenvolvimientu de Manejador de dispositivu controladores de dispositivu (n'inglés, device drivers) y nel desenvolvimientu de sistemes operativos, por cuenta de la necesidá del accesu direutu a les instruiciones de la máquina. Munchos dispositivos programables (como los microcontroladores) entá cunten col ensamblador como la única manera de ser manipoliaos.
Carauterístiques El códigu escritu en llinguaxe ensamblador tien una cierta dificultá de ser entendíu yá que la so estructura averar al llinguaxe máquina, esto ye, ye un llinguaxe de baxu nivel. El llinguaxe ensamblador ye difícilmente portable, esto ye, un códigu escritu pa un microprocesador, puede precisar ser modificáu, pa poder ser usáu n'otra máquina distinta. Al camudar a una máquina con arquiteutura distinta, xeneralmente ye necesariu reescribilo dafechu. Los programes fechos por un programador espertu en llinguaxe ensamblador son xeneralmente muncho más rápidos y peracaben menos recursos del sistema (memoria RAM y ROM) que'l programa equivalente compilado dende un llinguaxe d'altu nivel. Al programar curioso en llinguaxe ensamblador pueden crease programes que s'executen más rápido y ocupen menos espaciu que con llinguaxes d'altu nivel. Col llinguaxe ensamblador tiense un control bien precisu de les xeres realizaes por un microprocesador polo que pueden crease segmentos de códigu difíciles y/o bien ineficientes de programar nun llinguaxe d'altu nivel, yá que, ente otres coses, nel llinguaxe ensamblador disponer d'instruiciones del CPU que xeneralmente nun tán disponibles nos llinguaxes d'altu nivel. Tamién puede controlase el tiempu en que tarda una rutina n'executase, y torgar que s'ataye mientres la so execución.
Programa ensamblador
Xeneralmente, un programa ensamblador (assembler n'inglés) modernu crea códigu oxetu traduciendo instruiciones mnemónicas de llinguaxe ensamblador en opcodes, y resolviendo los nomes simbólicos pa les llocalizaciones de memoria y otres entidaes.David Salomon (1993). Assemblers and Loaders L'usu de referencies simbóliques ye una carauterística clave del llinguaxe ensamblador, evitando aburribles cálculos y actualizaciones manuales de les direiciones dempués de cada cambéu del programa. La mayoría de los ensambladores tamién inclúin facilidaes de macros pa realizar sustitución testual - ej. xenerar curties secuencies d'instruiciones como espansión en llinia en cuenta de llamar a subrutines.
Los ensambladores son xeneralmente más simples d'escribir que los compiladores pa los llinguaxes d'altu nivel, y tuvieron disponibles dende los años 1950. Los ensambladores modernos, especialmente pa les arquitectures basaes en RISC, tales como MIPS, Sun SPARC, y HP PA-RISC, según tamién pal x86 (-64), optimicen la planificación d'instruiciones pa esplotar la segmentación del CPU eficientemente.
Nos compiladores pa llinguaxes d'altu nivel, son el postreru paso antes de xenerar el códigu ejecutable.
Númberu de camín Hai dos tipos de ensambladores basaos en cuántos pasos al traviés de la fonte son necesarios pa producir el programa ejecutable.
Los ensambladores d'un solu pasu pasen al traviés del códigu fonte una vegada y asumen que tolos símbolos van ser definíos antes de cualquier instruición que los refiera. Los ensambladores de dos pasos crean una tabla con tolos símbolos y los sos valores nel primer pasu, dempués usen la tabla nun segundu pasu pa xenerar códigu. L'ensamblador debe a lo menos poder determinar el llargor de cada instruición nel primer pasu por que puedan ser calculaes les direiciones de los símbolos.
La ventaya d'un ensamblador d'un solu pasu ye la velocidá, que nun ye tan importante como lo foi nun momentu daos les meyores en velocidá y capacidaes del ordenador. La ventaya del ensamblador de dos pasos ye que los símbolos pueden ser definíos uquier nel códigu fonte del programa. Esto dexa a los programes ser definíos de maneres más lóxiques y más significatives, faciendo los programes de ensamblador de dos pasos más fáciles de lleer y caltener.
Ensambladores d'altu nivel
Los más sofisticaos ensambladores d'altu nivel apurren astraiciones del llinguaxe tales como:
Estructures de control avanzaes Declaraciones y invocaciones de procedimientos/funciones d'altu nivel Tipos de datos astractos d'altu nivel, incluyendo les estructures/records, uniones, clases, y conxuntos Procesamientu de macros sofisticáu (anque ta disponible nos ensambladores ordinarios dende finales de 1960 pal IBM/360, ente otres máquines) Carauterístiques de programación empobinada a oxetos
Usu del términu
Note que, nel usu profesional normal, el términu ensamblador ye frecuentemente usáu tantu pa referise al llinguaxe ensamblador como tamién al programa ensamblador (que convierte'l códigu fuente escritu nel llinguaxe ensamblador a códigu oxetu que depués va ser enllazáu pa producir llinguaxe de máquina). Los dos espresiones siguientes utilicen el términu "ensamblador":
Llinguaxe
El llinguaxe ensamblador reflexa direutamente l'arquiteutura y les instruiciones en llinguaxe de máquina de la CPU, y pueden ser bien distintes d'una arquiteutura de CPU a otra. Cada arquiteutura de microprocesador tien el so propiu llinguaxe de máquina, y en consecuencia'l so propiu llinguaxe ensamblador una y bones esti atópase bien amestáu a la estructura del hardware pal cual se programa. Los microprocesadores difieren nel tipu y númberu d'operaciones que soporten; tamién pueden tener distinta cantidá de rexistros, y distinta representación de los tipos de datos en memoria. Anque la mayoría de los microprocesadores son capaces de cumplir esencialmente les mesmes funciones, la forma en que lo faen difier y los respeutivos llinguaxes ensamblador reflexen tal diferencia.
Instruiciones de CPU
La mayoría de les CPU tienen más o menos los mesmos grupos d'instruiciones, anque non necesariamente tienen toles instruiciones de cada grupu. Les operaciones que pueden realizase varien d'una CPU a otra. Una CPU particular puede tener instruiciones que nun tenga otru y viceversa. Los primeros microprocesadores de 8 bits nun teníen operaciones pa multiplicar o estremar númberos, por casu, y había que faer subrutinas pa realizar eses operaciones. Otres CPU pue que nun tengan operaciones de puntu flotante y habría que faer o consiguir biblioteques que realicen eses operaciones.
Les instruiciones de la CPU pueden arrexuntase, d'alcuerdu a la so funcionalidad, en:
Operaciones con enteros: (de 8, 16, 32 y 64 bits dependiendo de l'arquiteutura de la CPU, nos sistemes bien vieyos tamién de 12, 18, 24, 36 y 48 bits)
Estes son operaciones realizaes pola Unidá aritméticu lóxica de la CPU
Operaciones aritmétiques. Como suma, resta, multiplicación, división, módulu, cambéu de signo * Operaciones booleanas. Operaciones lóxiques bit a bit como AND, OR, XOR, NOT Operaciones de bits. Como desplazamientu o shift lóxicu y rotaciones o Operadores a nivel de bits (escontra la derecha o escontra la esquierda, al traviés del bit del acarretu o ensin él) Comparances
Operaciones de mover datos:
Ente los rexistros y la memoria:
Anque la instruición llámase "mover", na CPU, "mover datos" significa en realidá copiar datos, dende un orixe a un destín, ensin que'l datu suma del orixe.
Pueden movese valores: Dende un rexistru a otru :* Dende un rexistru a un llugar de la memoria :* Dende un llugar de la memoria a un rexistru :* Dende un llugar a otru de la memoria :* Un valor inmediatu a un rexistru :* Un valor inmediatu a un llugar de memoria
Operaciones de pila (stack, n'inglés):
PUSH (escribe datos escontra'l tope de la pila) POP (llee datos dende'l tope de la pila)
Operaciones de entrada/salida:
Son operaciones que mueven datos d'un rexistru, dende y escontra un puertu; o de la memoria, dende y escontra un puertu
INPUT Llectura dende un puertu d'entrada :* OUTPUT Escritura escontra un puertu de salida
Operaciones pal control del fluxu del programa:
Llamaes y tornes de subrutinas Llamaes y tornes d'interrupciones Salto condicionales d'alcuerdu al resultáu de la comparances Saltos incondicionales
Operaciones con númberos reales:
L'estándar pa les operaciones con númberos reales nes CPU ta definíu pol IEEE 754.
Una CPU puede tener operaciones de puntu flotante con númberos reales por aciu el coprocesador numbéricu (si hai), como les siguientes:
Operaciones aritmétiques. Suma, resta, multiplicación, división, cambéu de signu, valor absolutu, parte entera * Operaciones trascendentales Operaciones trigonométriques. Senu, cosenu, tanxente, arcotangente Operaciones con logaritmo, potencies y raigaños Otros
El llinguaxe ensamblador tien mnemónicos pa caúna de les instruiciones de la CPU en adición a otros mnemónicos a ser procesaos pol programa ensamblador (como por casu macros y otres sentencies en tiempu de ensamblado).
Ensamblado