El ensamblador es el lenguaje más bajo, más cercano a la máquina, que normalmente uno utiliza. Sólo hay un escalón más: el código máquina. Sólo hay dos motivos por el cual alguien programaría en código máquina:
Estoy convencido que la mayoría de programadores huirán del ensamblador como una lengua maldita. No me extraña, al ser un lenguaje de bajo nivel todo tiene que ser controlado por el programador y no existe ningún tipo de facilidad.
En junio de 1996 yo estaba finalizando mi segundo título de FPII: Tecnico especialista en electrónica de equipos informáticos. La asignatura de programación estaba orientada a la realización de un proyecto, en quinto podíamos elegir entre C/C++ o ensamblador. Yo elegí este último.
Me gustaba el ensamblador, esa mezcla de control total y tener que hacerlo todo uno mismo era algo a lo que no podía resistirme.
Mi proyecto consistió en crear una librería para ser utilizada en QuickBasic, la versión “profesional” de Basic que tenía Microsoft por aquel entonces. Con el MS-DOS venía una versión interpretada que se llamó QBasic. Dado que ambos interpretes/compiladores compartían sintaxis se les denominó QB. Las diferencias entre QuickBasic y QBasic no sólo consistían en que el primero permitía compilar nuestros proyectos para crear ejecutables, sino que además QuickBasic permitía el uso de librerías. Oficialmente QBasic no podía cargar librerías, pero como todo eso se podía hacer por medio de trucos, básicamente leyendo la librería y cargándola a mano en la memoria para que QBasic pudiera atacar las funciones almacenadas en ella.
Escribiría mi librería en ensamblador, pero ¿qué contendría?. El caso es que me había comprado el libro PC al límite en el que con la escusa de enseñar a crear videojuegos los autores (Boris Bertelsons -The CoExistence- y Mathias Rasch -Vision Factory-) te enseñaban a programar un montón de cosas fuera de lo habitual. Entre esas cosas estaba exprimir los límites de las tarjetas gráficas y los modos de vídeo normales para crear otros modos de vídeo más adecuados para crear juegos.
Así que dedicaría meses a desarrollar una librería para que QB pudiera utilizar el Modo X. En dicho modo se tenía una resolución de 320×240 pixels y 256 colores, realmente asombroso en los años 80 y principios de los 90.
Dado que el libro me explicaba de manera detallada cómo crear y utilizar dicho modo gráfico la dificultad no estaba en escribir el código. Además contaba con todo el código escrito en Pascal por los autores. Sin tener ni idea de Pascal me sirvió perfectamente a modo de pseudocódigo para entender qué es lo que había que hacer.
Así pues, la dificultad real y lo que me costó mucho tiempo era descubrir cómo tenía que escribir la librería para que esta pudiera acceder a los parámetros pasados por el usuario en las funciones y cómo devolver tipos de datos más allá de un entero.
Tuve la inconmensurable ayuda de un par de libros en los que describía cómo interactuaba el intérprete de Basic con las funciones en ensamblador. Sin embargo dichos libros sólo daban unas piceladas y no describían tipos de datos complejos ni diferencias ente compilador/intérprete que me dieron algún que otro dolor de cabeza.
En GitHub está lo que he podido recuperar, ha sido un poco difícil descubrir que copia de las muchas que tenía era la buena.
El código es el que entregué como proyecto, sin embargo he reemplazado la documentación original entregada con el proyecto por archivos en Markdown. Así mismo he añadido un par de documentos que cree con el resumen de la documentación utilizada para entender la interfaz ensamblador/QB.
Hace ya tiempo de mi última entrada de apuntes de electrónica. Fue la entrada sobre…
Looking for cheap multimeters I found the Zoyi ZT-300AB, for about €20 we have a…
In my search for interesting multimeters I came across a manufacturer whose multimeters were sold…
Desde que la industria empezó a deslocalizar sus fabricas llevando gran parte del peso de…
Desde que vi por primera vez una pinza amperimétrica quise tener una. Con la aparición…