Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

Perdido en el Programa

–Como orientarse dentro de un programa confuso–

Por lo general trato de no subir entradas a este blog cuando estoy enojado, y esta nota no será le excepción. Resulta que me lancé a programar el editor de texto del que se habló en la entrada anterior. Pero cuando lleguéa apenas a las 500 lineas me atoré con la famosa notación húngara y las macros. Es increíble como el código máquina es mucho mas entendible que ese horrible sistema.

Para esto retomamos el problema del bote de pintura. Mientras mas larga es la linea que pintamos en la carretera, mas lejos nos queda el recipiente. Cualquiera diría que lo mejor es llevar consigo el bote conforme uno pinta. Pero este bote es muy pesado y no puede moverse al mismo tiempo que se pinta. Una solución temporal, o al menos una que me ayude a encontrar una verdadera solución, sería conseguir un bote mas pequeño para rellenarlo con pintura mientras que mantengo el bote mas grande a una distancia razonable del fin de la linea. Pero bueno, al fin y al cabo este blog no es sobre pintura sino sobre Lenguaje Ensamblador, aunque para como voy puede que acabe en la calle y no precisamente pintando. Pasemos a lo que representa el bote de pintura en la programación.

Por analogía, el hecho de pintar es programar, la brocha es el editor de código y la pintura la información que necesito para construir un programa. El bote de pintura son las representaciones materiales de esas fuentes como lo son los libros, los archivos de ayuda, código fuente escrito en otra época, la información retornada por los depuradores de código y cualquier otro tipo de referencia.

Conforme uno avanza en el código se ve frenado por no saber que hacer y tiene que recurrir a estas fuentes. Pero esas fuentes, rara vez están diseñadas para quienes programan en Ensamblador, y es necesario convertirlas y adaptarlas, además de que unas dependen de otras, por ejemplo, si uno quiere llamar a la función CreateWindowEx, primero tiene que consultar en la Win32 API Reference, pero en esta API vienen muchisimas constantes cuyo valor no se especifica, entonces hay que hacer otra búsqueda en el diccionario de constantes y una vez que dimos con los valores y los combinamos del modo que lo dicta la llamada a la API, aún tenemos que hacer un código que funcione en Ensamblador. Luego de convertirlo y teclearlo es necesario buscar el porque no funciona.

Este largo proceso puede tomar desde unos diez o quince minutos hasta mas de una hora dependiendo de la paciencia del programador. Al principio, sobre todo cuando uno explora una tecnología nueva, es mas o menos manejable, pero cuando el programa crece mucho continuar con este proceso se vuelve físicamente imposible. Este acto equivale a caminar desde el fin de la linea hasta donde está el bote de pintura, humedecer la brocha y regresar. Eso sin contar con la búsqueda de errores dentro del propio código.

tiempo perdido

Aquí hay un diagrama de estados que representa el proceso de programación en Ensamblador cuando uno investiga algo nuevo. Aunque este dibujo está idealizado porque no se considera la búsqueda y corrección de errores en las implementaciones. Lo ideal sería no depender de las referencias y programar todo de memoria, así como no cometer errores nunca. Pero la cosa aquí es como disminuir al mínimo el tiempo necesario en que no se está escribiendo código.

La pregunta es: ¿Cual sería el equivalente a la pequeña lata para llevar pintura?

Para empezar, se supone que estoy construyendo un editor que me ayude a programar, pero para programar algo como eso necesito un editor que me ayude. Esto no tiene sentido. ¿Y si me ayudara con los humildes editores de texto?

Hice una pausa para ir a cagar y mientras estaba en eso, se me ocurrió que si uso el humilde Notepad de Windows y mantengo varios archivos abiertos tendría suficientemente información para programar. Estos archivos de texto estarían abiertos de manera simultanea y se irían llenando conforme el programa creciera. Un poco como hacer un mapa con lapiz y papel. Puede sonar tardado pero es mucho mejor perder unos minutos haciendo un mapa que dias completos caminando en círculos.

En otra entrada les platicaré como me fue con este experimento.

Anuncios

mayo 7, 2009 - Posted by | Uncategorized | ,

9 comentarios »

  1. Acabo de descubrir este blog.Es fantástico.Muchas gracias , ahora que estoy empezando lo encuentro interesantísimo.Ánimo y sigue adelante , muchas gracias ;)

    Comentario por kang | mayo 11, 2009 | Responder

    • Pues se bienvenido al mundo del Ensamblador!

      Comentario por asm86 | mayo 11, 2009 | Responder

  2. buenas tardes licenciado
    espero y este muy bien
    solo pasaba por aqui buscando
    un programa o una funcion
    o mejor dicho
    como decimos nosotros los programadores
    una clase
    en ensamblador para hacer animaciones
    en tercera dimension
    y disparar unos sprites graficos
    si me pudieras pasar alguna funcion en java
    con llamadas a ensamblador
    con mucho gusto te lo agradeceria
    porfavor ok
    como programadores que somos
    ok
    suerte
    JAH te acompañe

    Comentario por sara garcia | mayo 13, 2009 | Responder

    • Este es un blog de Ensamblador. Aunque por tu dirección IP, estoy seguro de que puedes invocar a una poderosa entidad conocida como El Señor Java. Si te arrodillas ante El y aceptas su superioridad, el podrá llenarte con su sabiduria. Este ser es fácil de invocar en las noches, sobre todo despues de las 6 de la tarde justo en el lugar indicado por tu direccion IP.

      No me lo agradezcas…

      Comentario por asm86 | mayo 15, 2009 | Responder

  3. buenas
    quisiera saber
    si hay alguna rutina en ensamblador
    para importarla desde la api de java
    para poder hacer mas eficiente un desarrollo de un demo ,
    bueno de un videojuego que tengo en mente
    y lo voy a desarrollar en java
    http://www.sun.com/java/jdk1.4.0.5_06
    espero y me puedas ayudar
    ok
    una pregunta
    verdad que si me conviene utilizar la libreria swing.*;
    y la libreria awt.*;
    y la graphics.*;
    para poder crear sprites en una aplicacion web?
    o que me puedes recomendar?

    espero tu respuesta

    Comentario por eulalio | mayo 15, 2009 | Responder

    • En realidad no se ni me importa Java, pero he oido al pasar que existe algo llamado JNI (java native interface) que te permite mezclar codigo dependiente de la maquina como lo es el ensamblador con java. Aunque hacer esto acaba con la velocidad del Ensamblador y la portabilidad de Java. Asi que si los combinas solo te quedaras con lo peor de ambos.
      Ademas este es un blog sobre Ensamblador, lo mas cercano que hablare de java puede que sea la Java Assembly Interface, la que te da la velocidad del java con la facilidad de desarrollo del Ensamblador. Asi que tu sabras si te conviene entrarle.

      Comentario por asm86 | mayo 15, 2009 | Responder

  4. hola a todos soy un novato pero novato en lenguaje ensamblador necesito q me ayuden como pintar el dibujo de un jing-jang se lo agradeciria demasiado yaque apenas estoy iniciando con este lindo lenguaje

    Comentario por LUIS CARlos | junio 15, 2009 | Responder

    • si no quieres batallar busca como abrir un archivo grafico. El PCX es el mas sencillo y ahi dibujas lo que quieras.
      Ahora que si quieres escribir directo a la memoria necesitaras:
      tener acceso a la memoria de video
      conocer el algoritmo de circulos de bresenham o alguno similar
      saber como llenar un area con llenado recursivo

      avisame si estas trabajando con ensamblador de 16 o 32 bits, hay gran diferencia en como hacerlos. Pero considera mejor abrir un PCX en ensamblador, es mas sencillo que los algoritmos de arriba.

      Comentario por asm86 | junio 15, 2009 | Responder

  5. Creo que hay una libreria en java
    que te permite pintar circulos, en este caso el jing-jang
    investiga en la api de java
    o mas bien en la libreria de graphics
    creo que ahi vienen varios metodos
    o si no busca en internet un programa que contenga el algoritmo de circulos de bresenham
    te sera util

    suerte

    Manuel Garza

    Comentario por Manuel Garza | junio 17, 2009 | 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: