El lenguaje ensamblador
¿Te imaginaste programando alguna vez sólo con unos y ceros? No puedes siquiera entender como hace algunos años las cosas eran así. Días programando de este modo quizás para obtener un par de líneas.
Afortunadamente una genia llamada Grace Hopper creó un compilador, un método más simple para desarrollar software para el resto de los mortales que no pensamos en binario.
Qué vas a encontrar aquí: Qué es el lenguaje ensamblador? Historia, características y tipos de lenguajes ensambladores. Programas de lenguaje ensamblador. IDEs gratuitas para lenguajes ensambladores. Libros sobre lenguajes ensambladores. Ejemplos y aplicaciones de lenguaje ensamblador.
- ¿Qué es un lenguaje de programación?
- ¿Qué tipos de lenguaje de programación existen?
- Historia y presente del lenguaje ensamblador
- Qué es el lenguaje ensamblador?
- Características del lenguaje ensamblador
- Tipos de ensambladores
- Como es un programa en lenguaje ensamblador
- Elementos básicos del lenguaje ensamblador
- Programas de lenguaje ensamblador
- IDEs gratuitas para lenguajes ensambladores
- Libros sobre lenguajes ensambladores
- Ejemplos de lenguaje ensamblador
- Aplicaciones del ensamblador
¿Qué es un lenguaje de programación?
De manera sencilla clara, se podría decir que un lenguaje de programación es un conjunto de símbolos, palabras clave, códigos y reglas semánticas.
Estos son utilizados para crear una secuencia o serie de instrucciones algorítmicas, las cuales serán utilizadas para crear un programa que pueda controlar el comportamiento tanto físico como lógico de una computadora. Esto es con el objetivo de obtener un determinado resultado.
Podría definirse en muy pocas palabras que el lenguaje de programación es un sistema estructurado de comunicación. Este permite el nexo entre el programador y el dispositivo que está programando.
En este punto, es fundamental saber cómo es qué funciona un lenguaje de programación.
Esto es debido a que todos los dispositivos electrónicos de la actualidad necesitan ser programados a través de un lenguaje de programación para poder llevar a cabo su tarea. Desde un televisor Smart TV hasta un lavarropas.
El lenguaje de programación es estos casos, y en muchos más, es utilizado para que el programador pueda comunicarse con el hardware o el software del equipo.
De este modo es posible proporcionarle los aspectos básicos y avanzados de su comportamiento.
Ejemplos de estos son con cuáles datos debe operar, cómo deben ser almacenados, transmitidos o tratados esos datos.
También finalmente se debe contar con la acción que debe tomar el software o hardware con estos datos dependiendo de las diferentes variables que se hayan impuesto.
¿Qué tipos de lenguaje de programación existen?
Como hemos establecido, el lenguaje de programación es el elemento clave de toda la tecnología moderna.
El lenguaje de programación le permite al programador darle vida a los programas y sistemas operativos y software de múltiples dispositivos.
Estos lenguajes de programación en la actualidad se clasifican en dos tipos bien diferenciados, lenguaje de bajo nivel y de alto nivel, sin embargo, existen otros que complementan o expanden las capacidades de los mencionados.
Cabe destacar en este punto que todos los programas deben ser programados mediante algoritmos, siendo una de las principales herramientas para ayudarnos con este tema Pseint, el del cual se habla en mucha más profundidad en este artículo.
Lenguaje máquina
El llamado “Lenguaje máquina” es uno de los lenguajes más viejos que existen; se forma mediante la combinación de “1” y “0”, es decir que es un lenguaje que sólo usa el sistema binario.
Esto es así debido a que este es el único sistema que los dispositivos y computadoras son capaces de interpretar.
Ver más sobre el lenguaje máquina
Lenguaje de programación de bajo nivel
La función básica de este lenguaje de programación es la de actuar a modo de interfaz entre el hardware y el software de un determinado dispositivo.
Lenguaje ensamblador
El lenguaje sobre el cual se profundiza en este artículo. El lenguaje ensamblador, o Assembly Language en inglés fue el primer intento en la búsqueda de un sustituto más sencillo de comunicarse de forma directa con el hardware de un dispositivo.
Cabe destacar en este punto que el número IEV de los programas del tipo ensamblador dado por la International Electrotechnical Commission es el 171-05-17, y está inscripto en la categoría “Digital technology – Fundamental concepts / Software”.
Este tipo de lenguajes actúan como conversores, ya que los dispositivos utilizan el lenguaje binario, y el programador un lenguaje de programación más flexible y sencillo de usar. Este es llamado lenguaje de alto nivel.
Lenguaje de programación de alto nivel
El objetivo principal del lenguaje de alto nivel es el de hacer las cosas más fáciles para el programador.
Esto es debido a que las instrucciones que puede utilizar para crear los programas se presentan de una manera mucho más entendible.
Si quieres saber más acerca de herramientas de programación como por ejemplo el pseudocódigo o las pseudo instrucciones, lo mejor que puedes hacer es pulsar sobre este enlace. Aquí encontrarás excelente información sobre el tema, además de unos buenos ejemplos de cómo se utiliza.
Historia y presente del lenguaje ensamblador
El lenguaje ensamblador y los programas ensambladores han sido parte de la historia de la informática desde los inicios de la misma.
Podría tomarse como la primera interacción en el año 1949, cuando fue desarrollada EDSAC, siglas en inglés de “Electronic Delay Storage Automatic Calculator”, cuya traducción es “Calculadora Automática de Almacenamiento con Retardo Electrónico”,
Esta fue la primera computadora en incorporar órdenes internas. Como dato de color podemos decir que OXO, el primer videojuego de la historia, fue desarrollador específicamente para poder ser ejecutado en esta computadora.
Entre las características más destacadas de EDSAC, se puede mencionar que contaba con el primer ensamblador del mundo, muy primitivo. Este aprovechaba el diseño mnemotécnico de la computadora.
El primero de muchos ejercicios llevados a cabo por este primer código ensamblador fue un programa de números cuadrados. Este desarrollo der Beatrice Worsley fue ejecutado sobre EDSAC el 6 de mayo de 1949, y utilizaba nemotécnicos y operaciones aritméticas complejas.
El segundo gran paso en la historia de los ensambladores se dio cuando Stan Poley desarrolló en el año 1954 SOAP, siglas del inglés que significan “Symbolic Optimal Assembly Program”. Esto en español se puede traducir como “Programa de Ensamblaje Óptimo Simbólico”.
Este ensamblador fue desarrollado en las instalaciones Thomas J. Watson Research Center de IBM específicamente para la computadora IBM 650 Magnetic Drum Data-Processing Machine.
SOAP era un ensamblador de pasos múltiples, lo que significa que es capaz de procesar el programa más de una vez para generar el programa de objetos.
Tras la implementación de estos primeros lenguajes ensambladores, su éxito fue creciendo de manera exponencial, ya que ofrecía muchas ventajas, sobre todo a los técnicos en programación de la época.
Con esta nueva tecnología podían desligarse de ciertas tareas como la de recordar largas secuencias de números y códigos. Otro de los problemas frecuentes que pudo resolver esta inclusión eran los relacionados con los datos en memoria.
Además ofrecían un tamaño de definiciones de datos mínimo. Este aspecto era fundamental en aquellos tiempos de las primeras computadoras comerciales, alta velocidad, y sobre todo una probada y eficaz confiabilidad.
Aunque este éxito también pueda deberse a la falta de compiladores de lenguaje de alto nivel diseñados específicamente para poder ser utilizados en este tipo de microcomputadores.
A partir de esto, muchas aplicaciones comerciales se comenzaron a desarrollar utilizando lenguajes ensambladores. Con ello muchas microcomputadoras dependían de forma inseparable de lenguajes ensambladores para poder operar estos programas con su hardware.
Ejemplos de esto son el IBM PC DOS o Lotus 1-2-3, o hasta incluso apps mucho más modernas como algunos juegos en la década de 1990.
En este sentido, la mayor parte de las computadoras desarrolladas entre las décadas de 1980 y 1990, como por ejemplo las Atari y las MSX estaban atadas al uso de un lenguaje ensamblador.
Sin embargo, todo esto iba a cambiar severamente con la aparición de los llamados lenguajes de alto nivel.
Gracias a este tipo de lenguajes y su amplio abanico de opciones y características, lograron que para la década de 1980 el uso de los lenguajes ensambladores se redujera drásticamente.
Si bien su uso se ha visto reducido, lo cierto es que en la actualidad, el lenguaje ensamblador todavía es ampliamente utilizado en infinidad de implementaciones.
Esto es debido a sus características, ya que permite comunicarse de forma directa con el hardware, con lo cual puedes llevar a cabo tareas con dispositivos que de otro modo sería imposible.
Ejemplos de ello serían la creación de códigos de arranque, la ingeniería inversa, la manipulación y programación de hardware y mucho más.
Esto significa que aún en la actualidad, un programador puede generar ingresos importantes gracias a los lenguajes compiladores, y es uno de los campos de la informática menos explorados. Esto motiva que sean pocos los profesionales con los que podemos competir aquí.
Si quieres conocer más acerca de las implementaciones modernas del lenguaje ensamblador, más adelante en este mismo artículo tenemos mucha más información al respecto.
Qué es el lenguaje ensamblador?
Básicamente, un lenguaje ensamblador es un lenguaje de programación de bajo nivel utilizado para manipular las instrucciones internas de un dispositivo.
Este lenguaje se puede utilizar de esta manera debido fundamentalmente a que siempre el lenguaje ensamblador ofrece una correspondencia uno a uno entre si y las instrucciones de código de máquina brutas del dispositivo que se está programando.
Esto significa que cada línea de código escrito del lenguaje ensamblador equivale perfectamente a una instrucción del dispositivo que se está programando. Esto permite que no deba ni interpretarse ni compilarse para que el hardware “entienda”.
En una explicación un poco más técnica, el lenguaje ensamblador, “Assembly” o “ASM” por su nombre en inglés, es una serie de mnemónicos que están diseñados para representar instrucciones básicas en electrónica.
Esto es útil para programar microprocesadores, microcontroladores y otros circuitos integrados programables.
Cabe destacar que este tipo de CI están presentes en toda computadora con sus procesadores, los televisores, dispositivos de audio, smartphones y mucho otro hardware.
Estos mnemónicos son básicamente una representación simbólica de los códigos de máquina binarios, constantes y demás elementos de programación.
Es decir todos los elementos que necesitas para llevar a cabo la tarea de hacer que un determinado procesador o microprocesador realice una determinada acción.
En este sentido, cabe destacar que para cada arquitectura de procesador es necesario un lenguaje ensamblador específico. Generalmente esto es siempre es definido por el fabricante del hardware.
Esto es así debido a que los desarrollos de dispositivos se basan en un conjunto de instrucciones, tipos de datos, registros, posiciones de memoria y otras características propias de un determinado lenguaje de ensamblador.
Si intentaras programar un dispositivo con un lenguaje ensamblador que no corresponde a su tipo, será imposible.
Esto significa que un lenguaje ensamblador es específico de una arquitectura de computadora en particular, al contrario de los modernos lenguajes de programación de alto nivel de la actualidad.
A los lenguajes de alto nivel los puedes usar independientemente de la arquitectura en la que fue desarrollado el dispositivo, como lo explicamos más abajo.
Características del lenguaje ensamblador
Así como los seres humanos necesitamos de un lenguaje para poder comunicarnos, el hardware también requiere de una manera que nos permita “hablar” con sus procesadores y hacerlos llevar a cabo lo que pretendemos.
El hardware es incapaz de entender lo que le proponemos, ya que sólo usa una combinación de unos y ceros, llamado lenguaje de máquina. Así que es necesario tener un lenguaje que oficie de intermediario.
Esta es la función básica de un lenguaje ensamblador.
Sin embargo, la tarea no es tan sencilla, ya que existen muchos tipos de hardware, con procesadores y microprocesadores diseñados en torno a arquitecturas muy distintas entre sí.
Esto le otorga a la tarea un grado de dificultad bastante alto. Pero los lenguajes ensambladores comparten cierto tipo de características, las cuales vamos a citar a partir de este punto.
Como mencionamos más arriba en este artículo, una de las principales características del lenguaje ensamblador es que no permite portarse a otras arquitecturas.
Esto significa que un código que haya sido escrito para un determinado microprocesador o procesador no servirá para otro modelo o fabricante, salvo que lleves a cabo un rediseño muy importante.
En este sentido, las arquitecturas de procesador más conocidas y usadas son las Intel x86 e Intel x64, las arquitecturas de AMD y la arquitectura ARM. Esta última arquitectura es utilizada en smartphones, tablet y computadoras portátiles más modernas.
El hecho de que cada lenguaje de ensamblado sea específico para una arquitectura determinada, tanto de una computadora física o computadora virtual, impide que se puedan crear desarrollos verdaderamente multiplataforma.
Esto sí lo puedes desarrollar en lenguajes de programación de alto nivel como JAVA o C.
Otra característica sobresaliente de las apps desarrolladas directamente en un lenguaje ensamblador, es que son mucho más eficientes en términos de recursos del sistema, y mucho más rápidos también.
Un programa desarrollado en lenguaje ensamblador puede ser bastante más eficiente que un programa desarrollado en un lenguaje de alto nivel.
Sin embargo, gracias a los compiladores de los lenguajes de programación de alto nivel actuales, esta característica es cada vez menos requerida.
Esto es debido a que mediante estos lenguajes en la actualidad se pueden crear también programas muy eficientes en términos de velocidad y estabilidad.
También mediante el lenguaje ensamblador los desarrolladores pueden tener un control mucho más efectivo de los procesos a llevar a cabo por el procesador que se está programando.
Esto es gracias a que este lenguaje, como mencionamos, ofrece la particularidad de poder comunicarse directamente con el hardware. Esta es una función que no se encuentra disponible en lenguajes de alto nivel, y que permite diseñar código muy específico.
Cabe destacar que el código fuente resultante de este desarrollo en lenguaje ensamblador tiene la extensión “asm”. A partir de este archivo se crea el código máquina, el cual suele tener una extensión de archivo “Hex”.
Tipos de ensambladores
En la actualidad existen múltiples tipos de lenguaje ensamblador, así como categorías de ensambladores que si bien realizan la misma función final, varían de acuerdo al tipo de escenario en el que se lo utiliza.
- Ensamblador Cruzado: El primer tipo de ensamblador permite el soporte de medios físicos tales como periféricos de entrada y salida. Es utilizado principalmente en el desarrollo de programación para sistemas específicos.
- Ensamblador Residente: Este tipo de ensambladores permanecen en la memoria de la computadora, y solamente se cargan para permitir la ejecución del programa objeto producido. Este tipo de ensamblador es el más usado para la ingeniería de sistemas de control más pequeños.
- Macroensambladores: Este tipo específico de ensamblador permite el uso de macroinstrucciones. Son aplicaciones, muchas veces de gran tamaño, que tienen la particularidad de no permanecer en memoria una vez que se ha terminado de generar el código objeto.
- Microensambladores: Este tipo de ensambladores le proporciona al interprete instrucciones precisas de cómo debe llevar a cabo la CPU una determinada tarea.
- Ensambladores de una fase: Los ensambladores de una fase tienen la particularidad de leer una línea de programa fuente, traducirla directamente y producir una instrucción en lenguaje máquina por vez. Este tipo de ensambladores son sencillos de utilizar, y además brindan como beneficio ocupar poco espacio en memoria.
- Ensambladores de dos fases: Es el tipo de ensamblador más usado en la actualidad. Su nombre se debe a que todo el proceso de traducción y ejecución se lleva a cabo en dos etapas. En la primera de ellas el ensamblador analiza el código fuente y lo construyen en una tabla de símbolos. En la segunda etapa, se vuelve a analizar el código fuente del programa ya para traducirlo.
Como es un programa en lenguaje ensamblador
Básicamente, un programa realizado en lenguaje ensamblador estará formado por una secuencia de sentencias. Cada una de estas sentencias ocupa una sola línea y se puede observar de la siguiente manera:
[etiqueta] [operación] [operando] [ comentarios]
Los cuatro campos de la sentencia son opcionales. En el caso que no se completara cualquiera de ellos, se tendría una sentencia vacía.
- Instrucciones: Estas sentencias representan órdenes al procesador y tras el proceso de compilación, son capaces de generar código ejecutable.
- Directivas: Estas sentencias dirigen el proceso de compilación o construcción del programa ejecutable, pero no son capaces de generar código ejecutable. Usualmente son utilizadas para aumentar la legibilidad del código fuente.
- (Model) Segmento de datos: Contiene la dirección donde inicia la declaración de variables. Se escribe la variable.
- (Stack) Segmento de código: Contiene la dirección de inicio donde se encuentran las instrucciones del programa. Se escribe todo el código del programa a desarrollar.
- (Data) Segmento de pila: Contiene la dirección donde se encuentra la pila.
- (Code) Segmento Extra: Contiene la dirección donde podemos almacenar datos extras.
Elementos básicos del lenguaje ensamblador
Desde hace muchos años, existe una importante dispersión entre los diferentes desarrolladores de lenguajes ensambladores a la hora de nombrar y categorizar las diferentes partes de su lenguaje.
Sin embargo, lo cierto es que puedes tener la seguridad que ellos se corresponden con una nomenclatura más estándar.
Podría decirse que los elementos básicos del lenguaje ensamblador son:
- Etiquetas: Básicamente, una etiqueta es una palabra utilizada para designar alguna línea o sección del programa. Esta se puede usar hacer saltos entre diferentes partes del código hacia esa etiqueta. Cabe destacar que estas etiquetas siempre deben comenzar con una letra o con un guion bajo “_”. El tamaño máximo de una etiqueta puede alcanzar hasta los 32 caracteres de longitud.
- Instrucciones: Las instrucciones no son otra cosa que las operaciones que debe realizar el microcontrolador. Estas instrucciones que pueden llevar a cabo cada microcontrolador ya se encuentran definidas en su hoja de datos.
- Operandos: Los operandos son los elementos básicos empleados en la instrucción que se está ejecutando en ese momento. Generalmente, los operandos son todos los registros, las variables o las constantes.
- Directivas: Las directivas cumplen una función parecida a las instrucciones. Sin embargo existe una diferencia. Las directivas son propias del lenguaje ensamblador, pero son independientes del chip microcontrolador que se utilice en el proyecto. Las directivas representan ciertas características del lenguaje ensamblador, y se utilizan para especificar el procesador empleado así como su configuración. También son utilizadas con el propósito de asignar locaciones de memoria, entre muchas otras tareas.
- Comentarios: Los comentarios no son otra cosa que cualquier frase que puedes escribir en el propio código para hacerlo más claro para quien lo lea, o para ti mismo. Cabe destacar que estos comentarios los puedes ubicar en cualquier parte de tu código, siempre y cuando comiencen con un punto y coma “;”.
Quieres aprender más? Lenguajes de programación
Programas de lenguaje ensamblador
En la actualidad tienes disponibles unas cuantas ofertas como para comenzar a hacer tus propios programas en lenguaje ensamblador.
Alguna de las alternativas más usadas y populares entre los desarrolladores son las siguientes:
- Assembler RosAsm: RosAsm o “ReactOS ASseMbler” básicamente es un lenguaje ensamblador x86 de 32 bits para Win32 ofrecido bajo los términos de la licencia GNU.
- Flat Assembler: Flat Assembler, también conocido como “FASM”, es un ensamblador libre, multi-paso para arquitecturas IA-32,2 y x86-64.
- Microsoft Macro Assembler: Microsoft Macro Assembler, también conocido como “MASM” es un ensamblador para la familia x86 de microprocesadores, desarrollado por Microsoft.
- Turbo Assembler: Turbo Assembler, también conocido como “TASM” es básicamente un paquete ensamblador desarrollado por Borland específicamente para la plataforma del IBM PC y microprocesadores x86.
- GNU Toolchain: GNU Toolchain es un paquete conteniendo las herramientas de desarrollo para la plataforma GNU. También se incluye un ensamblador.
- Assembler GNU: GNU Assembler, también conocido como “GAS”, es el ensamblador del proyecto GNU, usado para compilar Linux y otros sistemas operativos GNU.
- a86 Assemblers: Este ensamblador comercial fue desarrollado para su uso con la familia de procesadores Intel x86.
- a86 y a386: A86 es un compacto ensamblador comercial desarrollado para la familia de procesadores Intel X86 por Eric Isaacson. El ensamblador es capaz de producir archivos .COM o .OBJ compatibles con Windows/DOS desde un archivo de texto de código fuente. El a86/d86 están dirigidos a la plataforma x86 de 16 bits, al contrario que el a386 y d386, los cuales fueron desarrollados plataformas de 32 bits.
IDEs gratuitas para lenguajes ensambladores
Muchas veces las IDEs son tan importante como el lenguaje de programación es sí, ya que son una importante ayuda en la labor del programador.
Si no sabes que son una IDE, te contamos que básicamente es un entorno de desarrollo integrado.
Esto proviene de las palabras en inglés “Integrated Development Environment”. En pocas palabras se trata de un programa de computación desarrollado con el fin de hacer más sencilla la tarea de programar.
Para ello cuenta con una cantidad de herramientas muy interesantes, como por ejemplo un editor de código fuente, depurador, compilador e intérprete, además de otras opciones de construcción automáticas.
A partir aquí te mostraremos las IDEs que puedes utilizar en tus proyectos con lenguaje ensamblador.
- Fresh IDE: En este caso, se trata de una IDE muy visual desarrollado para el lenguaje ensamblador con un compilador integrado Flat Assembler (FASM). Fue escrito en Fresh IDE y es una aplicación independiente compilable. Entre sus características más destacables podemos citar que es compatible con FASM, pero además permite que el código pueda ser compilado en todas las versiones de FASM. Fresh IDE está disponible sólo para Windows, pero los usuarios de Linux lo pueden utilizar sin problemas a través de Wine. Si lo deseas, puedes descargar esta IDE para lenguaje ensamblador gratis en este enlace.
- WinAsm Studio: Esta app es un entorno de desarrollo integrado completamente gratuito para desarrollar programas para las plataformas Windows de 32 bits y DOS de 16 bits. Para ello se pueden utilizar lenguajes como Microsoft Macro Assembler MASM y FASM. Para este último, se deberá usar el plugin para FASM. Si lo quieres, puedes tener esta IDE para Assembler gratuita pulsando sobre este enlace.
- Visual Studio Code: Lo más interesante de esta app de edición de código fuente es que ha sido desarrollada por Microsoft. Entre las funciones más importantes de este programa se Incluyen soporte para la depuración, refactorización de código resaltado de la sintaxis, control de embebido Git, autocompletado de código inteligente y muchas otras opciones de configuración. Si quieres descargar de forma gratuita Visual Studio Code puedes hacerlo pulsando sobre este enlace.
- Assembler IDE: Este entorno de desarrollo para código ensamblador, fue creado con el propósito de automatizar al máximo el proceso de ensamblado. Para ello integra diversas herramientas como un editor de código, un debugger y un desensamblador. Este IDE es capaz de trabajar con lenguajes ensambladores como NASM, TASM/MASM y FASM, con los que puede realizar acciones como la depuración de código, la edición del código, el desensamblador y la compilación. Cabe destacar que es un ensamblador online. Lo puedes encontrar en este enlace.
- Easy Code: Esta IDE para desarrollo en lenguaje ensamblador fue desarrollado con elobjetivo de generar aplicaciones de la plataforma de Windows en 32 bits. Entre las características más destacables de esta IDE para lenguaje ensamblador se encuentran una interfaz cómoda, que nos recuerda a Visual Basic, y la posibilidad de desarrollar apps en ensamblador de manera sencilla y veloz, gracias a las múltiples herramientas que ofrece. Si quieres hacerte con esta IDE para Assembly de manera completamente gratuita, lo único que tienes que hacer es pulsar sobre este enlace.
- RadASM: Por último, tienes RadASM. Esta es una IDE completamente gratis para ensambladores de 32 bits para Windows. Entre sus características más importantes se puede citar su compatibilidad y soporte con MASM, TASM, FASM, NASM, GoASM y HLA. Si quieres descargar de forma gratuita esta IDE para ensamblador, lo puedes hacer pulsando sobre este enlace.
Libros sobre lenguajes ensambladores
Como sabes, el término ensamblador sirve para denominar uno de los procesos más importantes de la programación de computadoras. Y esta suele ser una tarea bastante complicada si no se tienen las nociones básicas sobre estos temas.
Por este motivo, si estás interesado en comenzar una carrera en programación, lo mejor que puedes hacer es comenzar a hacerte de una buena biblioteca.
En este sentido existen algunas editoriales que se especializan en temas de computación, como Addison Wesley y Prentice Hall, dos referentes del sector.
Lamentablemente, la mayoría de sus libros se encuentran en idioma inglés.
En el caso que no domines este último idioma, también puedes comenzar a estudiarlo, y teniendo en cuenta la importancia de esa lengua en la informática, no estaría para nada mal hacerlo lo más pronto posible.
Ejemplos de lenguaje ensamblador
El siguiente es un ejemplo de programa desarrollado en lenguaje ensamblador para la arquitectura de procesador x86.
.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
int 20h
end programa
Podrás notar aquí el uso frecuente de la instrucción MOV, la cual es una de las más importantes de un lenguaje ensamblador, ya que su propósito es la transferencia de datos entre registros de procesador o registro y memoria.
También con la instrucción MOV es posible usar datos absolutos, como por ejemplo mover un número cualquiera a un registro del procesador.
Aplicaciones del ensamblador
En los inicios de la informática, y por consiguiente de la programación, las aplicaciones eran desarrolladas en forma total o parcial en alguno de los lenguajes ensambladores.
Esto era así ya que los recursos existentes para procesar información eran más bien escasos, y el lenguaje ensamblador era una solución más que viable para conseguir una aplicación eficiente.
Es decir que funcionara bien con la poca memoria y potencia de procesador con que se contaba en las computadoras de aquella época.
Con los años, la capacidad de las memorias y los procesadores se multiplicó varias veces en términos de potencia y velocidad. Esto trajo como consecuencia que los programas fueran cada vez más complejos aprovechando las virtudes de estos nuevos procesadores y memorias.
En este punto, los lenguajes ensambladores, tan necesarios en otras épocas, fueron reemplazados en las tareas de programación por lenguajes de alto nivel como por ejemplo C, FORTRAN y COBOL.
También fueron reemplazados con lenguajes orientados a objetos, los que son capaces de lograr millones de líneas de código y crear código tan eficiente como el logrado con el lenguaje ensamblador.
En este sentido, los lenguajes de programación orientados a objetos han permitido crear desarrollos de software enormes, lo que sería imposible de llevar a cabo mediante un lenguaje ensamblador.
Esto es debido fundamentalmente a que son millones de líneas de código.
Recuerda que cada orden del lenguaje ensamblador equivale a una instrucción en un procesador, por lo cual podían tardarse años en escribir softwares complejos y enormes como los actuales.
Sin embargo, el lenguaje ensamblador todavía se utiliza en la actualidad en los desarrollos modernos para conseguir tener acceso al hardware.
No obstante, también se lo utiliza para programar dispositivos pequeños, ya que es ideal, por el poco espacio que ocupan los programas desarrollados en lenguaje ensamblador, para este tipo de tareas.
A continuación encontraremos algunos ejemplos de cómo se usa hoy en día el lenguaje ensamblador.
Lenguaje ensamblador en consolas de videojuegos
Una consola de videojuegos necesita que el software y el hardware que la controle se encuentren perfectamente optimizado para que puede ejecutarse de la manera más efectiva y rápida posible.
Por este motivo los desarrolladores de este tipo de dispositivos utilizan el lenguaje ensamblador para escribir el código necesario que aproveche hasta el último bit del hardware existente.
El uso del lenguaje ensamblador les permite a los diseñadores obtener acceso directo al hardware de las consolas y por lo tanto hacer los ajustes manuales pertinentes para obtener toda la potencia de los diferentes componentes de la misma.
En este sentido los programadores de aplicaciones también hacen uso del lenguaje ensamblador para sus desarrollos en lugar de usar lenguajes de alto nivel más fáciles de implementar.
Esta técnica básicamente les permite tener altos valores de eficiencia, debido a que el software interactúa directamente con el hardware.
Lenguaje ensamblador en sistemas embebidos
Los sistemas embebidos son aquellos programas que controlan las funciones de diversos dispositivos específicos.
Ejemplos de estos tipos de dispositivos son las tarjetas de video, discos duros, sistemas de seguridad, módems, teléfonos celulares, sistemas de control de aire acondicionado, instrumentos para la adquisición de datos y muchos otros.
Este tipo de dispositivos se programan mediante un lenguaje ensamblador debido a que estos son pequeños y se pueden almacenar de manera sencilla en la ROM de estos aparatos.
Al cumplir con una única función, su desarrollo no es tan complicado.
En la actualidad, la programación de los microcontroladores de sistemas embebidos es el uso más corriente de un lenguaje ensamblador.
Cualquiera de las funciones que nos ofrezca un dispositivo, sea una heladera o la computadora de un automóvil es controlada por un procesador de este tipo, el cual debe ser programado con anterioridad para llevar a cabo esa función específica.
Lenguaje ensamblador en controladores de dispositivos de hardware
Un controlador de dispositivos básicamente es un programa informático que le permite al sistema operativo interaccionar de manera directa con un periférico.
El objetivo de ello es que el usuario lo pueda usar sin tener que conocer su funcionamiento, tan sólo pulsar sobre un botón para obtener un resultado. Sin un controlador de dispositivos sería imposible utilizar un hardware.
Debido a esta condición, la programación de un controlador de dispositivo se lleva a cabo mediante un lenguaje de ensamblador, ya que se puede acceder directamente al hardware para que este haga lo que el diseñador quiere, y presentarlo al usuario de la manera más sencilla y clara posible.
Deja una respuesta