

Ensamblador
.png)
Creado por Luz Mireya Angarita Ardila
¿Como se define un Ensamblador ?
Se define, como un programa, el cual se encarga de convertir un fichero escrito en lenguaje ensamblador en código máquina o binario, ejecutable directamente por el microprocesador.

Ventajas
Entre las ventajas del programa, se puede decir que estos son más rápidos y consumen mucho menos recursos del sistema, además se maneja mejor control de la computadora y que casi todas las computadoras se puede ensamblar.
Desventajas
Entre las desventajas que se encuentra en el programa son la complejidad para el uso como la compresión de los errores más frecuentes en el programa y también que se maneja un mayor tiempo de codificación.
Tipos de Ensamblador
Ensambladores Cruzados:
Se utilizan en una computadora que posee el procesador diferente al que tendrán las computadoras donde se va a ejecutar el programa objeto producido.
Ensambladores residentes
Son aquellas que permanecen en la memoria principal de la computadora y se carga para su ejecución al programa objeto producido. Este tipo de ensamblador tiene la ventaja de que se puede comprobar inmediatamente el programa sin necesidad de transportarlo de un lugar a otro.
Microensambladores:
Son aquellos programas, que le indican al intérprete de instrucciones de la CPU, como se debe actuar a ese se le denomina micro programa.
Macroensambladores:
Son ensambladores que permiten el uso de macroinstrucciones. Debido a su potencia, normalmente son programas robustos que no permanecen en memoria una vez generado el programa objeto.
Ensambladores de una fase:
Leen una línea y la traducen directamente para producir una instrucción de lenguaje maquina o la ejecuta si se trata de una pseudosinstrucción.
Ensambladores de dos fases:
Realiza la traducción en dos etapas: 1° Fase leen el programa fuente y construyen la tabla de símbolos, 2° Fase vuelve a leer el programa fuente y pueden ir traduciendo totalmente pues reconocen la totalidad de los símbolos. Estos ensambladores son mas utilizados en la actualidad.

¿Como se define un Lenguaje Ensamblador ?
Se define como un lenguaje de programación de bajo nivel propio de cada procesador el cual usualmente es definido por el fabricante de hardware, que se usa para dar directamente órdenes al computador, constituye la representación más directa del código máquina específico. A diferencia de otros lenguajes el no usa intermediarios, sino que directamente le dá las órdenes a la máquina.
Ventajas
Entre las ventajas del lenguaje ensamblador encontramos que al trabajar directamente con el microprocesador la computadora procesa más rápido.
El lenguaje no ocupa mucho espacio de memoria ya que no tiene que cargar librerías además es muy flexible porque todo lo que puede hacerse con una máquina, puede hacerse en el lenguaje ensamblador de esta máquina, es decir, que en el lenguaje ensamblador se pueden hacer tareas específicas que en un lenguaje de alto nivel no se pueden llevar a cabo porque tienen ciertas limitan tes que no se lo permiten
Desventajas
Las desventajas son sin embargo mucho mayores: para empezar está limitado a las órdenes que el ordenador traiga memorizadas en su placa base, nada más. Y requiere unos conocimientos técnicos muy avanzados, cada vez que cada CPU incluye órdenes distintas e incluso formas distintas de darle esas órdenes, variando según el modelo, el fabricante etc Es por ello, entre otras cosas, que no se ha impuesto en el mercado como lenguaje de programación para aplicaciones o juegos.

Es aquel que le permite al programador ordenarle al computador exactamente cómo llevar a cabo una tarea específica, usando la menor cantidad de instrucciones.
​
El lenguaje ensamblador es utilizado en las siguientes circunstancias:
* Mejorar la eficiencia de una rutina específica que se ha transformado en un cuello de botella.
* Obtener acceso a funciones de bajo nivel del procesador para realizar tareas que no son soportadas por los lenguajes de alto nivel.
* Escribir manejadores de dispositivos para comunicarse directamente con hardware especial tales como tarjetas de red.
* Trabajar en ambientes con recursos limitados puede requerir el uso del lenguaje ensamblador pues el código ejecutable puede ser menor que el generado por el compilador.
Los lenguajes ensamblador tienen sus aplicaciones muy reducidas, se centran básicamente en aplicaciones de tiempo real, control de procesos y de dispositivos electrónicos.

¿Cómo funciona el ensamblador y el proceso de ensamblaje?
1. El programa utiliza un editor de texto para crear un archivo de texto ASCII, conocido como archivo de código fuente.
2. El ensamblador lee el archivo de código fuente y produce un archivo de código objeto, una traducción del programa a lenguaje máquina. De manera opcional, produce un archivo de listado. Si ocurre un error, el programador debe regresar al paso 1 y corregir el programa.
3. El enlazador lee el archivo de código objeto y verifica si el programa contiene alguna llamada a los procedimientos en una biblioteca de enlace.
4. La herramienta cargadora del sistema operativo lee el archivo ejecutable y lo carga en memoria, y redirecciona la CPU hacia la dirección inicial del programa, para que éste empiece a ejecutarse.
Ejemplo del proceso de Traducción
A continuación se describen las etapas correspondientes al conjunto de herramientas de compilación gcc3 que permite traducir programas escritos en el lenguaje de programación C.
Programa
Fuente
Pre-Compilador (CPP)
Compilador (CCL)
Ensamblador (AS)
Enlazador (ID)
Programa
Objeto
Se utilizara un programa en el lenguaje de programación C el cual estará guardado como ejemplo.c
#include <stdio.h>
int main()
{
printf("programa de ejemplo\n");
return 0;
}
se hará el siguiente procedimiento:
-
En la primera etapa el pre-procesador (cpp) modifica el programa original de acuerdo a lo indicado por las directivas que comienzan con el carácter #. En este caso la línea #include le indica al pre-procesador que debe leer el archivo de encabezado stdio.h e insertar su contenido en el texto del programa. La salida de esta etapa es el archivo intermedio ejemplo.i.
-
Luego, ejemplo.i entra en la siguiente etapa, el compilador (ccl) el cual traduce el programa a lenguaje ensamblador. La salida de esta etapa es el archivo ejemplo.s.
-
En la siguiente etapa, el ensamblador (as) lee el archivo ejemplo.s y lo traduce en instrucciones de lenguaje de máquina generando un archivo objeto relocalizable el cual se guarda como ejemplo.o.
-
Luego el enlazador (ld) enlaza ese archivo objeto con otros archivos asociados a él, en este caso ya que el programa llama una biblioteca (la función printf forma parte de la biblioteca estándar de entrada/salida) el enlazador se encarga de enlazar el programa con esta biblioteca en particular. Su salida es un archivo objeto ejecutable llamado ejemplo.
¿Qué es el backpatching y por qué es importante?
La técnica de “backpatching” o “relleno de retroceso” permite combinar dos pasadas en una sola. Se requiere una tabla de “saltos”.
Cuando se genera un código con saltos condicionales y expresiones booleanas se enfrenta un problema muy común, en la expresión if (B) S debemos establecer el salto hacia S cuando se da B, el problema es que no siempre se conoce B a la hora de hacer esta transformación. Backpatching es un enfoque donde al momento de generar un salto el objetivo de este salto se deja temporalmente indefinido. Cada salto es almacenado en una lista de saltos donde las etiquetas de sus destinos son establecidas en el momento en que ya pueden ser determinadas. La manipulación de la lista de etiquetas se realiza con los métodos:
• makelist(i) crea una nueva lista que contiene solo a i,un índice en el vector de instrucciones y además el método makelist retorna un puntero a la lista creada.
• merge(pl , p2 ) concatena las listas apuntadas por pl y p2 , y retorna el puntero a la nueva lista.
• backpatch(p, i) inserta i como la etiqueta objetivo para cada instrucción en la lista apuntada por p.
Referencias
-
http://repositori.uji.es/xmlui/bitstream/handle/10234/5916/codigo.apun.pdf?sequence=1&isAllowed=y
-
Leer más: https://informatica4194.webnode.mx/contactanos/tipos-de-ensambladores/
-
John Waldron: Introduction to RISC Assembly Language Programming. Addison Wesley. ISBN 0-201-39828-1 7. La Enciclopedia Libre
-
https://es.slideshare.net/TaquiWajuyatFlor/lenguaje-ensamblador-67248917
-
http://www.di-mare.com/adolfo/cursos/2008-1/pp-GenCodInterMed.pdf
-
https://cosyen.files.wordpress.com/2011/02/exposicion-equipo-4.pdf