sábado, 13 de octubre de 2012

Hanoi en Assembler A86

El punto de partida del peregrinaje de Hanoi fue la implementación del algoritmo de las Torres de Hanoi en lenguaje de máquina del microprocesador 6800 de Motorola. Para "programarlo", tuve que escribir un pseudo código, pasarlo a lenguaje ensamblador de 6800, posteriormente “ensamblarlo” en el papel, instrucción por instrucción, para luego ingresarlo por medio de un teclado hexadecimal, directamente en la memoria del MEK-6800.

Fig. 1 Teclado del MEK-6800

En memoria de ese acontecimiento, hace unos años repetí la experiencia, pero en esa ocasión, con una PC y por medio del Debug de DOS. Hoy, tanto el código fuente de la versión "light" como la versión "de Luxe" se perdieron en alguna de las tantas migraciones de PC. Pero, el artículo que publiqué en este blog aun permanece, de manera que es lo que usaré como punto de partida para la realizar esta nueva versión en A86.

Vean el Proceso Completo

El video muestra el código fuente en A86, el proceso de compilación y su puesta en funcionamiento.

El A86 es un Macroassembler, de manera que el código que usé para ensamblar con Debug requerirá varias modificaciones para que el A86 lo acepte y me genere un ejecutable.

El Código Original

El siguiente listado corresponde al código tal como está publicado en este blog: Reursion and Machine Language.

            

Listado 1

Si observamos en detalle el Listado 1, notaremos la aparente ausencia de "variables", tampoco se observan "procedimientos" o "subrutinas". En realidad, tanto las variables como las subrutinas están ahí, solo que no tienen nombre, son solo posiciones en la memoria.

La primera tarea consiste en asignar nombres "simbólicos" a esas posiciones de memoria, para convencer al A86 de que se trata de un programa en lenguaje ensamblador y no de una lista de compras. Para eso, primero vamos a ensamblar el código (con Debug), para determinar donde están las posiciones de memoria a las que hacemos referencia.

Compilación con Debug

E:\TC\A86>debug <hanoi.txt

El Debug genera un archivo ejecutable .COM

Pruebo el Funcionamiento

E:\TC\A86>hanoi
1 A B 2 A C 1 B C 3 A B 1 C A 2 C B 1 A B 4 A C 1 B C 2 B A 1 C A 3 B C 1 A B 2 A C 1 B C

Funciona!

Para ahorrar tiempo

  • Genero un listado con el debug
  • E:\TC\A86>debug hanoi.com >prog.txt
  • Luego escribo cinco veces u y luego q.

Obtengo el siguiente listado

            

Listado 2

Procesamiento con Excel

Esta es una de las aplicaciones prácticas de Excel, nos permite trabajar con texto en forma tabular y aplicar funciones para agregarle o quitarle elementos (también es muy útil para trabajar con páginas web).

  • Separamos las direcciones de las instrucciones (B y D).
  • Insertamos una columna (C).
  • Asignamos Nombres a las direcciones representativas.
  • Copiamos las columas C y D en un archivo de texto con la extensión .8 que es la extensión de los programas fuentes en A86.

Listado A86 Coompleto

            

Listado 3 Programa Completo en A86

Compilación y Prueba

E:\TC\A86>A86 HANOI.8
A86 macro assembler, V3.72 Copyright 1994 Eric Isaacson
Source:
HANOI.8
Object: HANOI.COM
Symbols: HANOI.SYM

E:\TC\A86>HANOI
1 A C
2 A B
1 C B
3 A C
1 B A
2 B C
1 A C

El código funciona perfectamente e incluye la generación del carácter "\n" o (0D0A) provisto por la subrutina NL, para mejorar la salida por pantalla. El A86 genera un archivo .COM y no requiere enlazarlo. Este A86 en particular lo bajé del sitio de su autor. Cuando vivía en USA, yo había comprado un A86 (shareware) que generaba .OBJ además de .COM, pero es posible que su autor haya modificado su esquema de distribución.

¡Que tengan un gran día!

Sergio Otaño

0 comentarios: