You are on page 1of 42

Perspectiva histrica

Los lenguajes ensambladores fueron primero desarrollados en los


aos 1950, cuando fueron referidos como lenguajes de
programacin de segunda generacin. Por ejemplo, el SOAP
(Symbolic Optimal Assembly Program) era un lenguaje
ensamblador de 1957 para el computador IBM 650. Los lenguajes
ensambladores eliminaron mucha de la propensin a errores y del
consumo de tiempo de la programacin de los lenguajes de
primera generacin que se necesitaba con los primeros
computadores, liberando a los programadores del tedio tal como
recordar cdigos numricos y clculo de direcciones. Una vez
fueron ampliamente usados para todo tipo de programacin.

Perspectiva histrica
Sin embargo, por los aos 1980 (1990 en los
microcomputadores), su uso haba sido en gran parte
suplantado por los lenguajes de alto nivel, en la bsqueda de
una mejorada productividad en programacin. Hoy en da,
aunque el lenguaje ensamblador es casi siempre manejado y
generado por los compiladores, todava se usa para la
manipulacin directa del hardware, acceso a instrucciones
especializadas del procesador, o para resolver problemas de
desempeo crtico. Los usos tpicos son drivers de
dispositivo, sistemas embebidos de bajo nivel, y sistemas de
tiempo real.

Histricamente, un gran nmero de programas han sido


escritos enteramente en lenguaje ensamblador. Los sistemas
operativos fueron casi exclusivamente escritos en lenguaje
ensamblador hasta la aceptacin mplia del lenguaje de
programacin C en los aos 1970 y principios de los 1980.
Tambin, muchas aplicaciones comerciales fueron escritas
en lenguaje ensamblador, incluyendo una gran cantidad del
software escrito por grandes corporaciones para mainframes
de IBM

Los lenguajes COBOL y FORTRAN eventualmente


desplazaron mucho de este trabajo, aunque un nmero de
organizaciones grandes conservaran las infraestructuras de
aplicaciones en lenguaje ensamblador hasta bien entrados
los aos 1990.

Por qu programar en ensamblador


La

programacin en lenguaje ensamblador ofrece


diferentes ventajas. Un programa escrito en lenguaje
ensamblador requiere considerablemente menos memoria
y tiempo de ejecucin que un programa escrito en un
lenguaje de alto nivel. La programacin en lenguaje
ensamblador depende de la arquitectura del computador
sobre el cual se trabaja, sto es importante para entender el
funcionamiento interno de la mquina, por ello al
programar en ensamblador se llega a comprender cmo
funciona el computador y cmo es su estructura bsica.

La capacidad de poder escribir programas en lenguaje

ensamblador es muy importante para los profesionales del


rea de Sistemas Operativos debido a que los programas
residentes y rutinas de servicio de interrupcin casi siempre
son desarrollados en lenguaje ensamblador. Adems, aun
cuando la mayora de los especialistas en programacin
desarrolla aplicaciones en lenguajes de alto nivel, que son
ms fciles de escribir y de mantener, una prctica comn
es codificar en lenguaje ensamblador aquellas rutinas que
han causado cuellos de botella en el procesamiento.

La mayora de los primeros microcomputadores confiaron


en el lenguaje ensamblador codificado a mano, incluyendo
la mayora de los sistemas operativos y de las aplicaciones
grandes. Esto era porque estos sistemas tenan limitaciones
severas de recursos, impusieron idiosincrticas arquitecturas
de memoria y de pantalla, y proporcionaron servicios de
sistema limitados y con errores.

Quizs ms importante era la falta de compiladores de


primera clase de lenguajes de alto nivel adecuados para el
uso en el microcomputador. Un factor psicolgico tambin
pudo haber jugado un papel: la primera generacin de
programadores de los microcomputadores conserv una
actitud de aficionado de "alambres y alicates".

En un contexto ms comercial, las ms grandes razones para


usar el lenguaje ensamblador era hacer programas con
mnimo tamao, mnima sobrecarga, mayor velocidad y
confiabilidad.
Los tpicos ejemplos de programas grandes en lenguaje
ensamblador de ese tiempo son los sistemas operativos IBM
PC DOS y aplicaciones tempranas tales como la hoja de
clculo Lotus 1-2-3, y casi todos los juegos populares para
la familia Atari 800 de computadores personales. Incluso en
los aos 1990,

la mayora de los videojuegos de cnsola fueron escritos en


ensamblador, incluyendo la mayora de los juegos para la
Mega Drive/Genesis y el Super Nintendo Entertainment
System. Segn algunos insiders de la industria, el lenguaje
ensamblador era el mejor lenguaje de programacin a usar
para obtener el mejor desempeo del Sega Saturn, una
cnsola para la cual era notoriamente desafiante desarrollar
y programar juegos.

El popular juego de arcade NBA Jam (1993) es otro


ejemplo. El ensamblador ha sido por largo trecho, el
lenguaje de desarrollo primario en los computadores
hogareos Commodore 64, Atari ST, as como el ZX
Spectrum. Esto fue as en gran parte porque los dialectos del
BASIC en estos sistemas ofrecieron insuficiente velocidad
de ejecucin, as como insuficientes caractersticas para
aprovechar completamente el hardware disponible.

Algunos sistemas, ms notablemente el Amiga, incluso


tienen IDEs con caractersticas de depuracin y macros
altamente avanzados, tales como el freeware ASM-One
assembler, comparable a las del Microsoft Visual Studio (el
ASM-Uno precede al Microsoft Visual Studio).

El ensamblador para el VIC-20 fue escrito por Don French y


publicado por French Silk. Con 1639 bytes de longitud, su
autor cree que es el ms pequeo ensamblador simblico
jams escrito. El ensamblador soportaba el direccionamiento
simblico usual y la definicin de cadenas de caracteres o
cadenas hexadecimales. Tambin permita expresiones de
direcciones que podan combinarse con las operaciones de
adicin, substraccin, multiplicacin, divisin, AND lgico,
OR lgico, y exponenciacin.

Caractersticas
El cdigo escrito en lenguaje ensamblador posee una

cierta dificultad de ser entendido ya que su estructura se


acerca al lenguaje mquina, es decir, es un lenguaje de
bajo nivel.

El lenguaje ensamblador es difcilmente portable, es decir,

un cdigo escrito para un microprocesador, puede


necesitar ser modificado, para poder ser usado en otra
mquina distinta. Al cambiar a una mquina con
arquitectura diferente, generalmente es necesario
reescribirlo completamente.

Los programas hechos por un programador experto en

lenguaje ensamblador son generalmente mucho ms


rpidos y consumen menos recursos del 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 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 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 estn disponibles en los
lenguajes de alto nivel.

Tambin se puede controlar el tiempo en que tarda una

rutina en ejecutarse, e impedir que se interrumpa durante


su ejecucin.

Importancia del lenguaje ensamblador


La

importancia del lenguaje ensamblador radica


principalmente que se trabaja directamente con el
microprocesador; por lo cual se debe de conocer el
funcionamiento interno de este, tiene la ventaja de que en
el se puede realizar cualquier tipo de programas que en los
lenguajes de alto nivel no lo pueden realizar. Otro punto
sera que los programas en ensamblador ocupan menos
espacio en memoria.

Ventajas y desventajas del Lenguaje


Ensamblador
Ventajas
1. Como trabaja directamente con el microprocesador al
ejecutar un programa, pues como este lenguaje es el ms
cercano a la mquina la computadora lo procesa mas
rpido.
2. Eficiencia de tamao .- Un programa en ensamblador no
ocupa mucho espacio en memoria porque no tiene que
cargan libreras y dems como son los lenguajes de alto
nivel

3. Flexibilidad .- Es flexible porque todo lo que puede

hacerse con una mquina, puede hacerse en el lenguaje


ensamblador de esta mquina; los lenguajes de alto nivel
tienen en una u otra forma limitantes para explotar al
mximo los recursos de la mquina. O sea que en
lenguaje ensamblador se pueden hacer tareas especficas
que en un lenguaje de alto nivel no se pueden llevar
acabo porque tienen ciertas limitantes que no se lo
permite

Desventajas
a) Tiempo de programacin.
b) Programas fuente grandes.
c) Peligro de afectar recursos inesperadamente.
d) Falta de portabilidad.

Tiempo de programacin.
Como es un lenguaje de bajo nivel 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.

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


Que todo error que podamos cometer, o todo riesgo que
podamos tener, podemos afectar los recursos de la maquina,
programar en este lenguaje lo ms comn que pueda pasar
es que la mquina se bloquee o se reinicialice. 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.

Falta de portabilidad
Porque para cada mquina existe un lenguaje ensamblador;
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.

Relacin entre el cdigo binario y el


lenguaje ensamblador
En el cdigo binario se utilizan ceros y unos, mientras que

el lenguaje ensamblador es una coleccin de smbolos


mnemnicos que representan: operaciones, nombres
simblicos, operadores y smbolos especiales.
La relacin entre estos dos lenguajes sera que el binario
es el lenguaje que la mquina entiende y el ensamblador
se acerca mas lenguaje de esta.
Manejo de la memoria: Direccionamiento (interno y
externo)

El manejo de la memoria depende de que procesador

tenga la mquina, entre los cuales a continuacin se


mencionan los siguientes:
Memoria de Programa
Memoria Externa de Datos
Memoria Interna de Datos
Registros de Funciones Especiales
Memoria de Bit.

El espacio de la Memoria de Programa contiene todas las


instrucciones, datos, tablas y cadenas de caracteres (strings)
usadas en los programas. Esta memoria se direcciona
principalmente usando el registro de 16 bits llamado Data
Pointer. El tamao mximo de la Memoria de Programa es
de 64 Kbytes.

La Memoria Externa de Datos contiene todas las variables y


estructuras de datos que no caben en la memoria interna del
Microprocesador.
Esta
memoria
se
direcciona
principalmente por el registro de 16 bits Data Pointer ,
aunque tambin se puede direccionar un banco de Memoria
Externa de Datos de 256 bytes usando los dos primeros
registros de propsito general .

El espacio de Memoria Interna de Datos funcionalmente es


la memoria de datos ms importante, ya que ah es donde
residen cuatro bancos de registros de propsito general; la
pila o stack del programa; 128 bits de los 256 bits de un rea
de memoria direccionable por bit y todas las variables y
estructuras de datos operadas directamente por el programa.
El tamao mximo de la Memoria Interna de Datos es de
256 bytes.

Contiene un espacio para los denominados Registros de


Funciones Especiales destinado para los puertos de
entrada/salida, temporizadores y puerto serie del circuito
integrado. Estos registros incluyen al Stack Pointer; al
registro de la palabra de estado del programa y al
Acumulador. La cantidad mxima de Registros de
Funciones Especiales es 128.

Todos los Registros de Funciones Especiales tienen


direcciones mayores a 127 y se ubican en los 128 bytes
superiores de la Memoria Interna de Datos. Estas dos reas
de la Memoria Interna de Datos se diferencian por el modo
de direccionamiento usado para accesarlas. Los Registros de
Funciones Especiales solo se pueden accesar usando el
modo de direccionamiento Directo, mientras que los 128
bytes superiores solo se pueden accesar con el modo de
direccionamiento Indirecto.

Por otra parte, el espacio de Memoria de Bit se usa para


almacenar variables y banderas de un bit. El tamao
mximo de la Memoria de Bit es de 256 bits, 128 de los bits
comparten su espacio con 16 bytes del espacio de la
Memoria Interna de Datos y los otros 128 bits lo hacen con
los Registros de Funciones Especiales.

Diseo de Lenguaje
Elementos bsicos
Hay un grado grande de diversidad en la manera en que los autores

de los ensambladores categorizan las sentencias y en la nomenclatura


que usan. En particular, algunos describen cualquier cosa como
pseudo-operacin (pseudo-Op), con excepcin del mnemnico de
mquina o del mnemnico extendido.
Un tpico lenguaje ensamblador consiste en 3 tipos de sentencias de
instruccin que son usadas para definir las operaciones del programa:
Mnemnicos de opcode
Secciones de datos
Directivas de ensamblador

9. Bibliografa
Abel, P.; Lenguaje Ensamblador para IBM PC y Compatibles; Ed. Prentice Hall; 3 Edicin; 1996.
Brey, B.; Los microprocesadores de Intel: Arquitectura, Programacin e Interfaces; Ed. Prentice Hall; 3 Edicin; 1995.
Caballar, J.; El libro de las comunicaciones del PC: tcnica, programacin y aplicaciones; Ed. Rama-Computec; 1

Edicin; 1997.
Morgan y Waite; Introduccin al microprocesador 8086/8088; Ed. Byte Books/Mc Graw Hill; 1 Edicin; 1992.
Pawelczak; Pass32 32 bit Assembler V 2.5 Instruction Manual; 1997.
Rojas, A.; Ensamblador Bsico; Ed. Computec; 2 Edicin; 1995.
Socha y Norton; Assembly Language for the PC; Ed. Brady Publishing; 3 Edicin; 1992.
Tannenbaum, A.; Organizacin de Computadoras un enfoque estructurado; Ed. Prentice Hall; 3 Edicin; 1992.
Pginas en Internet con informacin relacionada
NASM Home Page:
Esta pgina contiene informacin sobre la programacin en lenguaje ensamblador y una gran cantidad de enlaces hacia
otras pginas con temas relacionados.
http://www.cryogen.com/Nasm
Pass32 Home Page:
Esta pgina contiene la informacin ms reciente sobre el desarrollo y nuevas versiones del ensamblador Pass32
http://www.geocities.com/SiliconValley/Bay/3437/index.html

Referencias
http://
lenguajes-e-interpretes.blogspot.mx/2012/11/importancia-dellenguaje-ensamblador.html
http://
ilustrados.com/tema/3805/Programacion-lenguaje-ensamblador
.html
http://www.daypo.com/examen-lenguaje-ensamblador.html
http://148.204.211.134/polilibros/portal/Polilibros/P_proceso/
Organizacion_de_computadoras_Oscar_Garcia_Hernandez/Or
ganizacion%20de%20computadoras/unidad%203/indice.html
Este es muy utl
http://learnassembler.com/index.html

You might also like