Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

Mensaje En Una Botella

–Sistema de Mensajes en Windows–

Supe un día de alguien que se había asociado con un artesano para vendes esos famosos barcos a escala dentro de botellas. Uno de ellos vaciaba las botellas y el otro armaba los barquitos. Otro ejemplo de chiste sin gracia. Ahora a programar:

Con lo visto en las 3 entradas sobre CALL, es suficiente para continuar nuestro descenso a las infernales profundidases del WinMain del Ultimo código. Lo primero que sigue después de la etiqueta que indica el WinMain es precisamente un Stack Frame de 80 bytes. Por cierto, aquí la resta es un exótico ‘add esp, 0ffffffb0h’ porque se trata de la suma de un número negativo. (Este tema es relativamente avanzado y se verá cuando podamos al menos imprimir el contenido de un registro). Lo dejé así porque así es como venía en el tutorial de Iczelion. Ahora volvamos con el código

Este Stack Frame contiene 2 misteriosas estructuras de datos que pertenecen 100% a la programación en Windows. Así que si esto les da miedo, les advierto que se volverán a topar con ellas aunque abandonen el Ensamblador y busquen protección en los brazos de Visual Basic. Se trata de MSG y WNDCLASSEX. Esta entrada está dedicada exclusivamente a MSG.

No, para quien se pase de listo, MSG no tiene nada que ver con el Glutamato Monosódico, Es la abreviatura de Message, mensaje. Esta entidad se compone de 7 DWORDS. He aquí cuales son, recuerden que estos datos pueden aparecer en notación húngara:

hWnd.- Este es el manejador de ventana, es un concepto completamente diferente al manejador de instancia. Es un entero de 32 bits (DWORD) que se usa para identificar una ventana de manera única. Un programa enWindows puede tener mas de una ventana, o incluso ninguna como el caso de PEDEMO.EXE.

Wmsg.- Este es el mas importante, pues es el mensaje en si. Un entero DWORD que tiene un significado especial para la aplicación que la recibe. Existe todo un documento de constantes de windows que tienen significados especiales.

Wparam.- Otro entero de 32 bits que se usa para pasar argumentos de mensaje

lparam.- Lo mismo que el anterior. Recuerden que wparan NO es de 16 bits como podría pensarse por la letra w.

Time.- Otro entero de 32 bits que indica el momento exacto en que el mensaje fue enviado.

Ptx.- Coordenada X del puntero del ratón.

Pty.- Coordenada Y del puntero del ratón.

Esta estructura es muy importante en Windows. Pues recuerden que este es un sistema Multitarea y existen multitud de programas trabajando simultaneamente. Todo esto es coordinado por el sistema operativo valiéndose de algo llamado Modo Protegido. En este modo cada programa piensa que tiene a su disposición un CPU con 4 gigabytes en RAM. Esto ha sido válido desde la época del Pentium cuando las máquinas tenían 8 o 16 megabytes. Para comunicarse entre ellos, tienen que comunicarse por medio de un sistema de mensajes que recuerda mucho a arrojar mensajes embotellados a una corriente de agua. La aplicación que pretende enviar un mensaje a otra ventana escribe el mensaje que quiere enviar en wMsg y escribe el destinatario en hWnd. Wparam y lparam son llenados según el tipo de mensaje. El resto lo rellena el sistema operativo. Por medio de una función la botella se arroja a ese mar de mensajes y poco después llega a su destino, donde quien lo recibe primero hurga en el agua para ver si hay botellas y si las encuentra las abre y reacciona al contenido. Mas adelante detallaré este sistema cuando lleguemos al Ciclo de Mensajes de la aplicación.

Esta nota resultó ser mas corta de lo que esperaba, pero tengan por seguro que será ampliada antes de terminar el análisis del último código. Esto de los mensajes es manejado con una serie de funciones API de Windows. Sus contenidos son manejados por una complicada serie de constantes de windows que para los principiantes son indistinguibles de las estructuras y las variables normales. Afortunadamente siempre podremos usar un editor hexadecimal para ver realmente lo que la máquina está haciendo.

Pues aquí acaba esta nota. De tarea les dejo que si tienen algo de experiencia programando en c–, busquen algún libro que hable específicamente de la programación en Windows. Con un poco mas de práctica seremos capaces de traducir uno de estos libros y traducirlo al todopoderoso ensamblador.

Anuncios

enero 21, 2009 - Posted by | Uncategorized

Aún no hay comentarios.

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: