El lenguaje ensamblador es el más bajo nivel al que podemos llegar a la hora de programar.
Una computadora consta en esencia de un procesador, que es el cerebro de la máquina y que se comunica con la memoria y todos los demás dispositivos. Cada tipo (o "familia") de procesadores posee su propio conjunto de instrucciones (llamadas "instrucciones de lenguaje máquina") de bajo nivel para llevar a cabo o gestionar diversas operaciones, como leer o colocar un dato en memoria, realizar una operación aritmética o lógica, y cuestiones muy simples de ese estilo. Nada que ver con las operaciones que podemos hacer con los lenguajes y plataformas de "alto nivel" que usamos en nuestro día a día. Esas instrucciones no son más que conjuntos de ceros y unos que se le pasan directamente al procesador...
Una persona no puede programar usando solamente 0's y 1's. Sería una locura. Así que para tratar de simplificarlo y que fuese más sencillo se inventó el lenguaje ensamblador. Este lenguaje consta de una serie de palabras que representan cada una de esas operaciones sencillas que el procesador puede realizar. Gracias a él, en lugar de utilizar ristras inmanejables de ceros y unos, se pueden usar algunas palabras. Luego hay un programa "ensamblador" que traduce esas instrucciones en el código máquina que el procesador entiende.
No es una gran mejora pero supone la diferencia entre poder programar una máquina a bajo nivel o no poder hacerlo.
Uno podría pensar que el lenguaje ensamblador, siendo tan árido y complejo, no sería muy popular. Sin embargo si ves el conocido índice TIOBE de popularidad, en junio de 2017 ensamblador es el décimo lenguaje más popular de la lista, ¡por delante de Swift, Ruby, Go o Visual Basic!.
¿Cómo es posible?
Bueno, algunos hablan de la velocidad que puedes conseguir con ensamblador, pero quitando aplicaciones muy concretas esa posible ganancia no es apreciable. Pero sí es cierto que puede suponer una ventaja en muchas aplicaciones de bajo nivel en cuanto a tamaño del programa, eliminación de posibles fuentes impredecibles de inestabilidad o retardo, uso de instrucciones directas que no están disponibles en los compiladores de alto nivel... Por supuesto es indispensable para crear drivers, virus, criptografía avanzada dependiente del tiempo...
Más allá de que tengamos una aplicación práctica en la que utilizarlo, aprender al menos los rudimentos del lenguaje ensamblador puede ayudarnos a comprender muchas cosas sobre el funcionamiento de un computador:
- Cómo ejecuta las instrucciones el procesador.
- Cómo se representa y maneja la información en la memoria de los dispositivos.
- Cómo se accede a los diversos dispositivos.
- Cómo se establece la interacción entre el procesador y el Sistema operativo.
Es decir, bajo nivel, pero ayudándonos a tener los conceptos muy claros de modo que luego trabajar con lenguajes de más alto nivel nos resulte más simple y entendamos muchas cosas.
Aprender ensamblador no tiene que ser aburrido
Lo malo de aprender ese lenguaje es cómo abordarlo, pues es muy árido. Hay pocos libros (nuestro tutor Francisco Charte escribió algunos hace años, ya descatalogados), y muchos menos cursos. Y en cualquier caso, si no quieres meterte a fondo, solo aprender los rudimentos, es un poco "matar moscas a cañonazos".
Sin embargo existen otras opciones...
Quizá te sorprenderá saberlo, pero hace tiempo que existen algunos juegos que están especialmente diseñados para aprender ensamblador al mismo tiempo que nos divertimos.
A mí me sorprendió también cuando lo vi en la revista Spectrum del IEE de mayo. Me hicieron mucha gracia, me he acordado ahora y me apetece reflejarlos aquí, así que ¡vamos a ello!
El juego te pone en la piel de un trabajador de oficina que está entre dos cintas transportadoras. Por una de ellas llegan letras y números, y tú debes colocarlas en la cinta de salida pero cumpliendo unas determinadas reglas. Para ello te proporcionan dos elementos: el suelo (que actúa como un espacio temporal de memoria) y algunas operaciones que puedes realizar (las instrucciones). De entrada solamente tienes dos, pero a medida que superas niveles (y aprendes) aparecen más opciones.
Es muy original y con su planteamiento podrías jugar a él y no saber que estás aprendiendo ensamblador al mismo tiempo :-)
Disponible para Windows, Linux, Mac, en Steam y para la nueva Nintendo Switch por $9.99.
Este, más que un juego, es ya un simulador. Lo que simula es la interfaz de un microprocesador de los años 80.
La trama del juego es que has heredado un ordenador de los '80 que era de un tío tuyo. El chisme no funciona bien porque está corrompido. El objeto del juego es resolver ciertos puzles en ensamblador para recuperar algunas porciones de la memoria y descubrir el propósito original del aparato. Como interfaz tienes una pantalla de texto con varios nodos de procesamiento que se pasan mensajes unos a otros.
Este requiere más de tu parte para empezar y avanzar, pero la dificultad es más gradual y quizá engancha más una vez que arrancas con él. Eso sí, trae hasta manual de instrucciones, clavado a los que había hace 30 años (¡qué tiempos!).
Está disponible para Steam (Windows, Linux, Mac) por unos 6€ y para iPad por menos de 4 dólares.
De la misma casa que el anterior, este es más reciente (lanzado en noviembre del año pasado).
En esta ocasión eres un ingeniero electrónico occidental que decide irse al lugar en dónde se fabrica todo hoy en día: Shenzen, en China. Allí compras muchos componentes diferentes como memoria, micro-controladores y puertas lógicas y debes usarlos para ir construyendo diversos aparatos según los pedidos recibidos. Al igual que el anterior, unos componentes se comunican con los otros en función de las instrucciones que les vayas poniendo a cada uno. Cada componente tiene su propia hoja de especificaciones que debes leer para aprender a utilizarlo.
Palabras mayores, pero divertido :-)
Se puede conseguir para las mismas plataformas que el anterior a excepción de iPad.
En resumen
Si te gustan los juegos de "romperte la cabeza" y de paso quieres aprender los entresijos de cómo funciona un procesador, aquí tienes tres opciones estupendas que te darán horas de diversión en esta época veraniega.
Yo, el primero (Human Machine Resources), lo recomendaría incluso para personas jóvenes (¿12-14?) que tengan cierta predisposición para este tipo de pensamiento estructurado. Les ayudará a comprender mejor algunos conceptos, a desarrollar más su pensamiento lógico y ordenado, y quién sabe si quizá les abrirá una vocación profesional :-)