1. REPÚBLICA BOLIVARIANA DE VENEZUELA
MINISTERIO DEL PODER POPULAR PARA LA EDUCACIÓN SUPERIOR
INSTITUTO UNIVERSITARIO DE TECNOLOGÍA “ANTONIO JOSÉ DE SUCRE”
SAN FELIPE- YARACUY
EMSAMBLADORES
ALAN VERASTEGUI ESCUELA: 78
C.I 12.078.560
FEBRERO, 2014
3. INTRODUCCIÓN
Un lenguaje de programación permite al usuario crear programas que serán
entendidos por el ordenador (directa o indirectamente) con el objetivo de realizar
alguna tarea.
A grandes rasgos podemos clasificar los lenguajes de programación en tres
categorías: máquina, bajo nivel (ensamblador) y alto nivel.
Los traductores son un tipo de programas cuya función es convertir el
código de un lenguaje en otro. Un ejemplo de ellos son los Ensambladores
que son un tipo de traductor que convierte programas escritos en lenguaje
ensamblador en programas escritos en código máquina.
4. SISTEMAS ENSAMBLADORES PRIMITIVOS
Cuando se abstraen los opcodes y se sustituyen por una palabra que sea
una clave de su significado, a la cual comúnmente se le conoce como mnemónico,
se tiene el concepto de Lenguaje Ensamblador. Así, se puede definir simplemente
al Lenguaje Ensamblador de la siguiente forma:
Lenguaje Ensamblador es la primera abstracción del Lenguaje de Máquina,
consistente en asociar a los opcodes palabras clave que faciliten su uso por parte
del programador
El Lenguaje Ensamblador es directamente traducible al Lenguaje de
Máquina, y viceversa; simplemente, es una abstracción que facilita su uso para los
seres humanos.
Por otro lado, la computadora no entiende directamente al
Lenguaje Ensamblador; es necesario traducirle a Lenguaje de Máquina.
Originalmente, este proceso se hacía a mano, usando para ello hojas donde se
escribían tablas de programa. Pero, al ser tan directa la traducción, pronto
aparecieron los programas Ensambladores, que son traductores que convierten el
código fuente (en Lenguaje Ensamblador) a código objeto (es decir, a Lenguaje de
Máquina).
El lenguaje ensamblador, o assembler (assembly language en inglés), es un
lenguaje de programación de bajo nivel para los computadores,microprocesadores
microcontroladores y otros circuitos integrados programables. Implementa una
representación simbólica de los códigos de máquina binarios y otras constantes
necesarias para programar una arquitectura dada de CPU y constituye la
representación más directa del código máquina específico para cada arquitectura
legible por un programador. Esta representación es usualmente definida por el
fabricante de hardware, y está basada en los mnemónicos que simbolizan los
pasos de procesamiento (las instrucciones), los registros del procesador, las
posiciones de memoria y otras características del lenguaje. Un lenguaje
ensamblador es por lo tanto específico de cierta arquitectura de computador física
(o virtual). Esto está en contraste con la mayoría de los lenguajes de programación
de alto nivel, que idealmente son portátiles.
Un programa utilitario llamado ensambladores usado para traducir
sentencias del lenguaje ensamblador al código de máquina del computador
objetivo. El ensamblador realiza una traducción más o menos isomorfa (un mapeo
de uno a uno) desde las sentencias mnemónicas a las instrucciones y datos de
máquina. Esto está en contraste con los lenguajes de alto nivel, en los cuales una
sola declaración generalmente da lugar a muchas instrucciones de máquina.
5. Muchos sofisticados ensambladores ofrecen mecanismos adicionales para
facilitar el desarrollo del programa, controlar el proceso de ensamblaje, y la ayuda
de depuración. Particularmente, la mayoría de los ensambladores modernos
incluyen una facilidad de macro (descrita más abajo), y son llamados macro
ensambladores.
Fue usado principalmente en los inicios del desarrollo de software, cuando
aún no se contaba con potentes lenguajes de alto nivel y los recursos eran
limitados. Actualmente se utiliza con frecuencia en ambientes académicos y de
investigación, especialmente cuando se requiere la manipulación directa
de hardware, alto rendimiento, o un uso de recursos controlado y reducido.
Muchos dispositivos programables (como los microcontroladores) aún
cuentan con el ensamblador como la única manera de ser manipulados.
FUNCIONES
La tarea fundamental de un ensamblador es traducir un programa en
lenguaje de ensamblador al código correspondiente en lenguaje de máquina. En
esencia, el ensamblador debe realizar las siguientes tareas:
1. Convertir los códigos ("opcode" o mnemónicos: ej. LDA, STX) a su código
equivalente en lenguaje de máquina
2. Convertir los operandos simbólicos (las etiquetas o variables) en las direcciones
correspondientes de los operandos
3. Construir las instrucciones en lenguaje de máquina en el formato apropiado
4. Convertir las constantes definidas en el programa en su verdadera
representación
5. Escribir el "listing" en lenguaje de ensamblador con el código en lenguaje de
máquina correspondiente
6. Procesar las directrices al ensamblador (las directrices son instrucciones
o comandos dirigidos al ensamblador, que éste procesa y ejecuta al hallarlos en el
programa en lenguaje de ensamblador; estas directrices no se traducen a lenguaje
de máquina, si no que el ensamblador ejecuta alguna acción, como reservar
memoria para variables, entre otras)
En general, la mayoría de las tareas se puede realizar si se recorre el programa
línea por línea. Pero surge una dificultad si se trata de traducir una instrucción
cuyo operando está definido más abajo en el programa. Si esto ocurre, el
ensamblador desconoce la dirección del operando y la instrucción no se podría
ensamblar.
6. TIPOS DE ENSAMBLADORES
Aunque todos los ensambladores realizan básicamente las mismas tareas,
podemos clasificarlos de acuerdo a características en:
Ensambladores Cruzados (Cross-Assembler).
Se denominan así los ensambladores que se utilizan en una computadora
que posee un procesador diferente al que tendrán las computadoras donde va a
ejecutarse el programa objeto producido.
El empleo de este tipo de traductores permite aprovechar el soporte de
medios físicos (discos, impresoras, pantallas, etc.), y de programación que ofrecen
las máquinas potentes para desarrollar programas que luego los van a ejecutar
sistemas muy especializados en determinados tipos de tareas.
Ensambladores Residentes.
Son aquellos que permanecen en la memoria principal de la computadora y
cargan, 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, como se hacía en
cross-assembler, y sin necesidad de programas simuladores.
Sin embargo, puede presentar problemas de espacio de memoria, ya que el
traductor ocupa espacio que no puede ser utilizado por el programador. Asimismo,
también ocupará memoria el programa fuente y el programa objeto. Esto obliga a
tener un espacio de memoria relativamente amplio. Es el indicado para desarrollos
de
pequeños
sistemas
de
control
y
sencillos
automatismo
empleando microprocesadores.
La ventaja de estos ensambladores es que permiten ejecutar
inmediatamente el programa; la desventaja es que deben mantenerse en la
memoria principal tanto el ensamblador como el programa fuente y el programa
objeto.
Macroensambladores.
Son ensambladores que permiten el uso de macroinstrucciones (macros).
Debido a su potencia, normalmente son programas robustos que no permanecen
en memoria una vez generado el programa objeto. Puede variar la complejidad de
los mismos, dependiendo de las posibilidades de definición y manipulación de las
macroinstrucciones, pero normalmente son programas bastantes complejos, por lo
que suelen ser ensambladores residentes.
7. Microensambladores.
Generalmente, los procesadores utilizados en las computadoras tienen un
repertorio fijo de instrucciones, es decir, que el intérprete de las mismas
interpretaba de igual forma un determinado código de operación.
El programa que indica al intérprete de instrucciones de la UCP cómo debe
actuar se denomina microprograma. El programa que ayuda a realizar este
microprograma se llama microensamblador. Existen procesadores que permiten la
modificación de sus microprogramas, para lo cual se utilizan microensambladores.
Ensambladores de una fase
Estos ensambladores leen una línea del programa fuente y la traducen
directamente para producir una instrucción en lenguaje máquina o la ejecuta si se
trata de una pseudoinstrucción. También va construyendo la tabla de símbolos a
medida que van apareciendo las definiciones de variables, etiquetas, etc.
Debido a su forma de traducción, estos ensambladores obligan a definir los
símbolos antes de ser empleados para que, cuando aparezca una referencia a un
determinado símbolo en una instrucción, se conozca la dirección de dicho símbolo
y se pueda traducir de forma correcta. Estos ensambladores son sencillos, baratos
y ocupan poco espacio, pero tiene el inconveniente indicado.
Ensambladores de dos fases
Los ensambladores de dos fases se denominan así debido a que realizan la
traducción en dos etapas. En la primera fase, leen el programa fuente y
construyen una tabla de símbolos; de esta manera, en la segunda fase, vuelven a
leer el programa fuente y pueden ir traduciendo totalmente, puesto que conocen la
totalidad de los símbolos utilizados y las posiciones que se les ha asignado. Estos
ensambladores son los más utilizados en la actualidad.
CARACTERÍSTICAS
El código escrito en lenguaje ensamblador posee una cierta dificultad de ser
entendido ya que su estructura se acerca al lenguaje máquina, es decir, es un
lenguaje de bajo nivel.
El lenguaje ensamblador es difícilmente portable, es decir, un código escrito
para un microprocesador, puede necesitar ser modificado, para poder ser
usado en otra máquina distinta. Al cambiar a una máquina con arquitectura
diferente, generalmente es necesario reescribirlo completamente.
Los programas hechos por un programador experto en lenguaje ensamblador
son generalmente mucho más rápidos y consumen menos recursos del
8. sistema (memoria RAM y ROM) que el programa equivalente compilado desde
un lenguaje de alto nivel. Al programar cuidadosamente en lenguaje
ensamblador se pueden crear programas que se ejecutan más rápidamente y
ocupan menos espacio que con lenguajes de alto nivel.
Con el lenguaje ensamblador se tiene un control muy preciso de las tareas
realizadas por un microprocesador por lo que se pueden crear segmentos de
código difíciles y/o muy ineficientes de programar en un lenguaje de alto nivel,
ya que, entre otras cosas, en el lenguaje ensamblador se dispone de
instrucciones del CPU que generalmente no están disponibles en los lenguajes
de alto nivel.
También se puede controlar el tiempo en que tarda una rutina en ejecutarse, e
impedir que se interrumpa durante su ejecución.
9. CONCLUSIÓN
A los programas que permiten pasar del programa escrito con instrucciones
simbólicas del lenguaje maquina (programa fuente, en ensamblador) al
lenguaje máquina también se les denomina normalmente ensambladores. Un
programa escrito en el lenguaje ensamblador requiere considerablemente
menos memoria y tiempo de ejecución que un programa escrito en los
conocidos lenguajes de alto nivel, como Pascal y C. Aunque la mayoría de los
especialistas en Software desarrolla aplicaciones en lenguajes de alto nivel,
que son más fáciles de escribir y de dar mantenimiento, una práctica común es
recodificar en lenguaje ensamblador aquellas rutinas que han causado cuellos
de botella en el procesamiento. Los programas residentes y rutinas de servicio
de interrupción casi siempre son desarrollados en el lenguaje ensamblador.