Está en la página 1de 8

Los programas hechos en lenguaje ensamblador

son generalmente ms rpidos y consumen


menos recursos del sistema (memoria RAM y
ROM). Al programar cuidadosamente en
lenguaje ensamblador se pueden crear
programas que se ejecutan ms rpidamente y
ocupan menos espacio que con lenguajes de
alto nivel.
Entre los programas que es crtico el uso mnimo
de memoria, tenemos a los virus y manejadores
de dispositivos (drivers). Muchos de ellos, por
supuesto, estn escritos en lenguaje
Ensamblador.

LENGUAJE ENSAMBLADOR
MODOS DE DIRECCIONAMIENDO

Los llamados modos de direccionamiento son las


diferentes maneras de especificar
en informtica un operando dentro de una
instruccin en lenguaje ensamblador.

Un modo de direccionamiento especifica la forma


de calcular la direccin de memoria efectiva de un
operando mediante el uso de la informacin
contenida en registros y / o constantes, contenida
dentro de una instruccin de la mquina o en otra
parte.
INTRODUCCION AL LENGUAJE
ENSAMBLADOR
LA MEMORIA PRINCIPAL (RAM)

RAM
Este tipo de memoria puede ser borrada y grabada
las veces que deseemos. La nica desventaja es
que la informacin grabada en ella solo puede ser
utilizada mientras tenga energa. En cuanto se
corte la alimentacin, los datos que se grabaron se
borrarn instantneamente. Se usan solo como
almacenamiento temporal.

La RAM tiene dos modos de operacin


posibles:

RAM esttica: flips-flops internos que


almacenan informacin binaria. La
informacin almacenada es vlida mientras la
unidad est encendida.

RAM dinmica: conjunto de pequeos


condensadores que pueden estar cargados o
descargados. Debe refrescarse cada pocos
milisegundos para impedir la prdida de
informacin. Tienen mayor capacidad que las
estticas.
DEFINICION
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 principalmente en los inicios del desarrollo de software, cuando aun
no se contaba con los potentes lenguajes de alto nivel. Actualmente se utiliza con
frecuencia en ambientes acadmicos y de investigacin, especialmente cuando se
requiere la manipulacin directa de hardware, se pretenden altos rendimientos o
un uso de recursos controlado y reducido.
Muchos dispositivos programables (como los microcontroladores) aun cuentan
con el ensamblador como la nica manera de ser manipulados.

CARACTERISTICAS

El cdigo escrito en lenguaje ensamblador posee una cierta dificultad de ser


entendido directamente por un ser humano ya que su estructura se acerca mas
bien al lenguaje mquina, es decir, lenguaje de bajo nivel.

El lenguaje ensamblador es difcilmente portable, es decir, un cdigo escrito


para un microprocesador en particular necesita ser modificado muchas veces en
su totalidad para poder ser usado en otro microprocesador.

Los programas hechos en lenguaje ensamblador son generalmente ms rpidos


y consumen menos recursos del sistema (memoria RAM y ROM). Al programar
cuidadosamente en lenguaje ensamblador se pueden crear programas que se
ejecutan ms rpidamente 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
cdigo difciles de programar en un lenguaje de alto nivel.

IR A MENU PRINCIPAL

Las operaciones disponibles en la mayora de los conjuntos de instrucciones


incluye:
1. mover

o llenar un registro con un valor constante

o mover datos de una posicin de memoria a un registro o viceversa

o escribir y leer datos de dispositivos

2. computar

o sumar, restar, multiplicar o dividir los valores de dos registros,


colocando el resultado en uno de ellos o en otro registro

o realizar operaciones binarias, incluyendo operaciones lgicas


(AND/OR/XOR/NOT)

o comparar valores entre registros (mayor, menor, igual)

3. afectar el flujo del programa

o saltar a otra posicin en el programa y ejecutar instrucciones all

o saltar si se cumplen ciertas condiciones (IF)

o saltar a otra posicin, pero guardar el punto de salida para retornar


(CALL, llamada a subrutinas)

IR A MENU PRINCIPAL
El siguiente es un ejemplo del programa clsico Hola mundo escrito para la
arquitectura de procesador x86 (bajo el sistema operativo DOS).
.model small
.stack
.data
Cadena1 DB 'Hola Mundo.$'
.code

programa:
mov ax, @data
mov ds, ax
mov dx, offset Cadena1
mov ah, 9
int 21h
end programa

VENTAJAS Y DESVENTAJAS DEL LENGUAJE ENSAMBLADOR


Una vez que hemos visto la evolucinde los lenguajes, cabe preguntarse: En
estos tiempos "modernos", para qu quiero el Lenguaje Ensamblador?
El proceso de evolucin trajo consigo algunas desventajas, que ahora veremos
como las ventajas de usar el Lenguaje Ensamblador, respecto a un lenguaje de
alto nivel:
Velocidad
Eficiencia de tamao
Flexibilidad

Por otro lado, al ser un lenguaje ms primitivo, el Ensamblador tiene ciertas


desventajas respecto a los lenguajes de alto nivel:
Tiempo de programacin
Programas fuente grandes
Peligro de afectar recursos inesperadamente
Falta de portabilidad

IR A MENU PRINCIPAL

Velocidad
El proceso de traduccin que realizan los intrpretes, implica un proceso de
cmputo adicional al que el programador quiere realizar. Por ello, nos
encontraremos con que un intrprete es siempre ms lento que realizar la misma
accin en Lenguaje Ensamblador, simplemente porque tiene el costo adicional de
estar traduciendo el programa, cada vez que lo ejecutamos.
De ah nacieron los compiladores, que son mucho ms rpidos que los
intrpretes, pues hacen la traduccin una vez y dejan el cdigo objeto, que ya es
Lenguaje de Mquina, y se puede ejecutar muy rpidamente. Aunque el proceso
de traduccin es ms complejo y costoso que el de ensamblar un programa,
normalmente podemos despreciarlo, contra las ventajas de codificar el programa
ms rpidamente.
Sin embargo, la mayor parte de las veces, el cdigo generado por un compilador
es menos eficiente que el cdigo equivalente que un programador escribira. La
razn es que el compilador no tiene tanta inteligencia, y requiere ser capaz de
crear cdigo genrico, que sirva tanto para un programa como para otro; en
cambio, un programador humano puede aprovechar las caractersticas especficas
del problema, reduciendo la generalidad pero al mismo tiempo, no desperdicia
ninguna instruccin, no hace ningn proceso que no sea necesario.
Para darnos una idea, en una PC, y suponiendo que todos son buenos
programadores, un programa para ordenar una lista tardar cerca de 20 veces ms
en Visual Basic (un intrprete), y 2 veces ms en C (un compilador), que el
equivalente en Ensamblador.
Por ello, cuando es crtica la velocidad del programa, Ensamblador se vuelve un
candidato lgico como lenguaje.
Ahora bien, esto no es un absoluto; un programa bien hecho en C puede ser
muchas veces ms rpido que un programa mal hecho en Ensamblador; sigue
siendo sumamente importante la eleccin apropiada de algoritmos y estructuras
de datos. Por ello, se recomienda buscar optimizar primero estos aspectos, en el
lenguaje que se desee, y solamente usar Ensamblador cuando se requiere ms
optimizacin y no se puede lograr por estos medios.

Tamao
Por las mismas razones que vimos en el aspecto de velocidad, los compiladores e
intrpretes generan ms cdigo mquina del necesario; por ello, el programa
ejecutable crece. As, cuando es importante reducir el tamao del ejecutable,
mejorando el uso de la memoria y teniendo tambin beneficios en velocidad,
puede convenir usar el lenguaje Ensamblador. Entre los programas que es crtico
el uso mnimo de memoria, tenemos a los virus y manejadores de dispositivos
(drivers). Muchos de ellos, por supuesto, estn escritos en lenguaje
Ensamblador.

Flexibilidad
Las razones anteriores son cuestin de grado: podemos hacer las cosas en otro
lenguaje, pero queremos hacerlas ms eficientemente. Pero todos los lenguajes de
alto nivel tienen limitantes en el control; al hacer abstracciones, limitan su propia
capacidad. Es decir, existen tareas que la mquina puede hacer, pero que un
lenguaje de alto nivel no permite. Por ejemplo, en Visual Basic no es posible
cambiar la resolucin del monitor a medio programa; es una limitante, impuesta
por la abstraccin del GUI Windows. En cambio, en ensamblador es sumamente
sencillo, pues tenemos el acceso directo al hardware del monitor.

IR A MENU PRINCIPAL

Tiempo de programacin
Al ser de bajo nivel, el Lenguaje Ensamblador requiere ms instrucciones para
realizar el mismo proceso, en comparacin con un lenguaje de alto nivel. Por otro
lado, requiere de ms cuidado por parte del programador, pues es propenso a que
los errores de lgica se reflejen ms fuertemente en la ejecucin.
Por todo esto, es ms lento el desarrollo de programas comparables en Lenguaje
Ensamblador que en un lenguaje de alto nivel, pues el programador goza de una
menor abstraccin.

Programas fuente grandes


Por las mismas razones que aumenta el tiempo, crecen los programas fuentes;
simplemente, requerimos ms instrucciones primitivas para describir procesos
equivalentes. Esto es una desventaja porque dificulta el mantenimiento de los
programas, y nuevamente reduce la productividad de los programadores.

Peligro de afectar recursos inesperadamente


Tenemos la ventaja de que todo lo que se puede hacer en la mquina, se puede
hacer con el Lenguaje Ensamblador (flexibilidad). El problema es que todo error
que podamos cometer, o todo riesgo que podamos tener, podemos tenerlo
tambin en este Lenguaje. Dicho de otra forma, tener mucho poder es til pero
tambin es peligroso.
En la vida prctica, afortunadamente no ocurre mucho; sin embargo, al
programar en este lenguaje vern que es mucho ms comn que la mquina se
"cuelgue", "bloquee" o "se le vaya el avin"; y que se reinicialize. Por qu?,
porque con este lenguaje es perfectamente posible (y sencillo) realizar secuencias
de instrucciones invlidas, que normalmente no aparecen al usar un lenguaje de
alto nivel.
En ciertos casos extremos, puede llegarse a sobrescribir informacin del CMOS
de la mquina (no he visto efectos ms riesgosos); pero, si no la conservamos,
esto puede causar que dejemos de "ver" el disco duro, junto con toda su
informacin.

Falta de portabilidad
Como ya se mencion, existe un lenguaje ensamblador para cada mquina; por
ello, evidentemente no es una seleccin apropiada de lenguaje cuando deseamos
codificar en una mquina y luego llevar los programas a otros sistemas
operativos o modelos de computadoras. Si bien esto es un problema general a
todos los lenguajes, es mucho ms notorio en ensamblador: yo puedo reutilizar
un 90% o ms del cdigo que desarrollo en "C", en una PC, al llevarlo a una
RS/6000 con UNIX, y lo mismo si despus lo llevo a una Macintosh, siempre y
cuando est bien hecho y siga los estndares de "C", y los principios de la
programacin estructurada. En cambio, si escribimos el programa en
Ensamblador de la PC, por bien que lo desarrollemos y muchos estndares que
sigamos, tendremos prcticamente que reescribir el 100 % del cdigo al llevarlo a
UNIX, y otra vez lo mismo al llevarlo a Mac.

También podría gustarte