Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

Retrocomputación: El Petroleo Informático

–Aprende a programar con los antiguos maestros–

Una de las cosas mas interesantes con las que me he topado en mis andanzas como programador de ensamblador es sin lugar a dudas la retrocomputación. La retrocomputación consiste en el estudio o simple interés por sistemas de computación antiguos. Por sistemas antiguos se refieren a computadoras de por lo menos una década de haber salido al mercado. Computadoras obsoletas que es imposible encontrar en las tiendas y que circulan entre los coleccionistas. En fin, historia antigua. De hecho si en esto de las computadoras hay algo semejante a lo histórico es sin duda la retrocomputación. Pero veamos un poco de historia.

Ahora mismo, mientras escribo esta nota escucho una canción en formato digital de hace por lo menos medio siglo que se dice inspiró el tema principal de un juego del que no tiene caso discutir ahora. Y comparto con ustedes un interesante viaje al pasado computacional. Por cierto, un encanto que tiene esto de la retrocomputación es que hace que las computadoras no luzcan tan amenazadoras. Pues cuando uno ve como apenas dos décadas las supercomputadoras valuadas en decenas o cientos de miles de dólares apenas si se comparaban con nuestros modestos equipos personales actuales o que la computadora con la que los humanos llegaron por primera vez a la luna no era mas poderosa que el mas sencillo de nuestros teléfonos móviles siente una paz inexplicable. Por otro lado cuando uno ve que en otro tiempo existieron programadores capaces de hacer grandes cosas con esos equipos de poder tan insignificante a nuestros ojos no puede dejar de sentir un gran respeto. Por cierto, no importa si vamos tan atrás en el tiempo como a finales de la segunda guerra o hace tan solo unos cuantos años. En todas las eras nos encontramos con un viejo amigo (mas viejo de lo que muchos creen) que aunque cambie de aspecto siempre es el mismo: El Lenguaje Máquina, también conocido simplemente como ensamblador.

Así es, al igual que un vetusto ser inmortal que tan solo cambia de ropas y profesión al paso de las generaciones, el lenguaje ensamblador siempre ha existido en todas las épocas de las computadoras. Incluso si nos remontáramos a la época en la que las computadoras eran programadas cambiando de posición unos cuantos interruptores esas posiciónes bien pueden traducirse en lenguaje binario y con ello formar instrucciones y datos que pueden ser representados en forma de instrucciones de ensamblador de manera directa. Lo mismo aplica con las secuencias de agujeros en las venerables tarjetas perforadas o cualquier otro sistema capaz de ejecutar instrucciones almacenadas en cualquier representación física que pudiera existir del lenguaje binario. Aunque para ser justos hay que admitir que la programación en ensamblador que hoy conocemos comenzó con la invención de los microprocesadores. Poco ha cambiado desde aquel viejo 4004 o el mas conocido 6502. El código en ASM sigue luciendo igual: Una columna de instrucciones y otras mas de operandos y de vez en cuando una etiqueta para indicar posiciones dentro de la memoria. Con el paso de los años y los nuevos sistemas las instrucciones van cambiando y las capacidades del hardware aumentan en números. Pero el funcionamiento es siempre el mismo. Incluso al momento de escribir esta nota las computadoras mas avanzadas siguen programándose en ensamblador cuando la situación lo requiere. Y si bien el ensamblador ya no tiene la presencia que tuvo en la época antigua aún podemos invocar su ayuda si es que sabemos donde buscarlo.


Petroleo Informático, Antiguos Maestros y Retrogaming

El concepto de petroleo informático lo leí hace no mucho en una revista de computación y hacía referencia a las grandes oportunidades de negocio existentes en software que hace mucho tiempo que dejó de funcionar. Podría ponerme a hablar de los sistemas informáticos de las empresas que no han sido capaces de migrar a plataformas nuevas o equipos ‘legacy’ que resultan imposibles de reparar pero mejor toco un tema en el que muchos de mis lectores de seguro tienen una vasta experiencia: La comunidad de emulación. La emulación de sistemas antiguos es el perfecto ejemplo de retrocomputación a nivel software. Un emulador es un programa de computadora que aunque puede ser ejecutado en una computadora actual, es capaz de imitar el funcionamiento de un sistema antiguo y ejecutar programas para estas plataformas olvidadas. Voy a ignorar de momento todos los huecos legales que hay alrededor de estas tecnologías y hablaré sobre el caso particular de los retrogamers, que es la rama de la retrocomputación interesada en los videojuegos antiguos. Un emulador de una consola de videojuegos es capaz de imitar el funcionamiento de uno de estos aparatos y hacerle creer a los juegos (software) que están siendo ejecutados en un sistema de verdad. Para hacer un emulador (decente) es necesario conocer a fondo tanto el sistema a imitar como el que va a llevar a cabo la imitación y programar un entorno de máquina virtual que imite el sistema emulado tanto en el aspecto de ejecución de instrucciones como los dispositivos periféricos. Pero eso ya es programación al detalle.

Lo interesante del fenómeno del retrogaming es ver que hay juegos que aunque muy viejos siguen siendo divertidos de jugar, y no me refiero solo a geeks con canas que quieren recordar los sistemas de 8 bits de su infancia, incluso hay retrogamers muy jóvenes que ni siquiera habían nacido cuando dichos sistemas tuvieron su mejor momento. Todo eso software antiguo del que es posible sacar un gran provecho y que por cuestiones técnicas es imposible de explotar a menos que se tengan buenos conocimientos de retrocomputación; eso, mis amigos inversionistas es lo que le llaman petroleo informático.

Haciendo un simil con el petroleo físico, primero el hardware sale al mercado, casi al mismo tiempo comienzan a escribirse programas para dichos equipos, conforme pasa el tiempo el hardware avanza pero mantiene compatibilidad con el software durante un corto tiempo. Luego de una generación de aproximadamente 5 años comienzan los problemas entre ambas entidades, el software tiene que evolucionar mucho para adaptarse al nuevo hardware o el hardware no es lo suficientemente poderoso para adaptarse a las nuevas demandas del software, al final tanto la computadora como el programa se hacen obsoletos simultaneamente y ya nadie los utiliza de manera comercial. Pasado el tiempo caen en el olvido y se pudren. Y quedan atrapados en el pasado junto con todo el conocimiento y esfuerzo invertido en ellos. En este punto el sistema se ha convertido en petroleo informático. Con el tiempo la gente de retrocomputación rescata esos sistemas y los reconstruye cual si se tratara de piezas arqueológicas.

Mientras que desde el punto de vista económico saber de retrocomputación es muy buen negocio si se sabe encontrar a los clientes adecuados o una fuente inagotable de juegos gratis diversión para los entusiastas de los sistemas antiguos, para un programador de ensamblador la retrocomputación tiene un valor único. Y es que el buen programador de ensamblador es capaz de aprender técnicas muy poderosas cuando desensambla y estudia código máquina antiguo. En todas esas lineas de software muerto hay una gran cantidad de técnicas y algoritmos olvidadas que pueden ser implementados en los sistemas mas modernos. Sobre todo si uno encuentra aquellos códigos escritos originalmente en ensamblador. Cosas que por supuesto solo pueden ser usadas en este lenguaje. Los ejemplos de técnicas que yo mismo he encontrado haciendo retrocomputación son muchas y muy elaboradas, cada una de ellas necesitaría su propia entrada para poder tan siquiera entenderse.

Por último, la retrocomputación pone a prueba la actitud con la que un programador ve a las computadoras. Los usuarios mas jóvenes suelen reirse de estos venerables equipos y los mas viejos aunque se alegran al verlos no siempre son capaces de obtener y adaptar el verdadero valor de estos antiguos tesoros tecnológicos. El programador de ensamblador ve constantemente como el equipo se le vuelve obsoleto en las manos. Yo personalmente recuerdo haber despreciado en otros tiempos muchos documentos de ensamblador por considerarlos obsoletos o por no tener acceso a cierto tipo de hardware. Pero tengo que decir que he aprendido mucho de esos libros tan antiguos. Con el tiempo vi que en esos documentos podía aprender cosas que podía aplicar en los equipos mas recientes. El único consejo que les tengo a los programadores, sobre todo a los principiantes es que vean el producto de la retrocomputación, ese petroleo informático, como a los viejos maestros. Que aunque ya están fuera de acción aún pueden darte consejos y revelarte técnicas que no vas a encontrar en ningún otro lado. Por otra parte, estos viejos maestros son bastante bondadosos, están tan solos y abandonados que a nadie le importa si te revelan información que se supone no debes de saber como pasa con el software aun vigente y protegido por tantos candados legales, o como dicen en latinoamérica: El que no oye consejo lo hacen… Digo, el que no oye consejo no llega a viejo.

Anuncios

julio 14, 2011 - Posted by | Uncategorized | , , ,

7 comentarios »

  1. muy buen tema! me gusta la retrocomputacion, jaja y tengo una duda.. tu utilizas algoritmos para hacer tu programas? cual es el primer paso para empesar a programar en ensamblador? hacer el algoritomo y despues representarlo en asm

    Comentario por Pavon | julio 14, 2011 | Responder

    • Ovbiamente hay que saber de algoritmos para hacer un programa, pues estos no dependen del lenguaje. La manera mas rapida de aprender ensamblador es desensamblando programas sencillos. Basta un desensamblador, editor hexadecimal e informacion sobre el CPU. Si conoces un algoritmo puedes aplicarlo en ASM aunque si desde antes sabes ASM puedes entender mejor muchos algoritmos.

      Por algoritmo espero que te refieras cosas como algoritmos de busqueda como el quicksort o el de liang-barsky para recorte de lineas. Pues en algunas escuelas suele confundirse el termino algoritmo con el del pseudocodigo que se escribe antes de codificar el programa. Hay algoritmos viejos y nuevos pero al final solo se trata de pasos definidos para resolver un problema.

      Comentario por asm86 | julio 15, 2011 | Responder

      • es cierto estaba confundido.. oseas, aveces realizas primero el pseudocodigo..? osea lo que quiero es empezar a hacer mis propios programas.. estoy aprendiendo la sobre arquitectura ARM

        Comentario por Pavon | julio 15, 2011

      • El pseudocodigo no es obligatorio, pero te ayuda a entender mejor lo que estas haciendo. Si un problema es lo bastante dificil para no poder teclearse directamente merece escribirse primero en pseudocodigo. En cuanto al ARM, te recomiendo que busques las extensiones de ARM del Flatassembler o uses alguno de los compiladores de linux. Vas a necesitar conocer conceptos como las jump tables y literal pools para manejar mejor tus variables y recuerda que el SWI no es como las llamadas a interrupciones de intel. Por lo demas suerte con el ensamblador ARM, y si puedes encontrar manuales de arm mejor, hay algunos por ahi muy buenos escritos por Samsung

        Comentario por asm86 | julio 16, 2011

  2. De que caricatura es esa imagen donde sale codigo en ASM

    Comentario por b1ackpig | agosto 16, 2011 | Responder

  3. Muy interesante. Me gustaría agregar, que, a mi parecer, incluso más atrás en el tiempo se pueden encontrar muestras de sistemas computacionales exóticos e incluso distintos sistemas computacionales analógicos, mecánicos, etc…. que no son maquinas programables de propósito general, pero sí son computadoras (aunque hay excepciones).

    Comentario por mvr 1981 | mayo 3, 2017 | Responder


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: