Anteayer he terminado la práctica de procesadores. Actualizar la documentación, probar todas los ejemplos y depurar un par de fallos. Esto último me ha llevado mucho más de lo que pensaba.
Para los que no sepan de qué va la práctica, se trata de hacer un pequeño compilador en java, que lee de un fichero un programa en una especie de lenguaje C y genera un fichero con el código ensamblador de dicho programa. El ensamblador tiene unas instrucciones sencillas, y deben ser interpretadas por una máquina virtual (que es la ampliación para los que se presentan en septiembre).
Tras el desbarajuste que fue la convocatoria de Junio, en la que descubrí un par de errores gordísimos, he decidido probar todo lo mejor posible. En Junio arreglé todos, pero no me dio tiempo a terminar la modificación pedida. Y al decidir terminar la práctica de una vez por todas, para poder empezar con otras, me topé con dos errores. Uno de ellos lo resolví en unos minutos, porque ya me había topado con otro similar en otra zona del código.
Pero el segundo me llevó mucho rato. No sé cuanto fue, pero estuve a punto de tirarme de los pelos. El programa se generaba bien, pues el fabuloso intérprete que nos dio Raúl (uno de los profesores de la asignatura) y que podría compararse con el Visual Studio para ensamblador (es intérprete y debugger integrado). Sin embargo, mi intérprete hacía algo raro.
El programa pasaba un array por dirección y aplicaba el método de ordenación de la burbuja. Al salir, en mi intérprete el contenido del array no se modificaba. Al final, llendo paso a paso por las instrucciones y comparando con lo que hacía el depurador de Raúl, me dí cuenta de que fallaba al calcular una condición. El error era que al sacar los parámetros de la pila, para hacer una resta entre ellos, hacía la operación pop en orden incorrecto.
Paso a paso por un programa relativamente complejo, con bucles, ifs y llamadas a función, traducido a un fichero ensamblador de más de 400 líneas. A veces no resulta difícil preguntarse como lo hacen los que trabajan a tan bajo nivel en proyectos comerciales. Cada mínimo error resulta prácticamente como buscar una aguja en un pajar. Al menos aquí hubo final feliz.
- Java2Rtf
- DLDI, nuevo estándar para el homebrew en DS
- ¿Qué estoy haciendo ahora?
- Mejores momentos del cursillo de Flash
- Flexo



