You are on page 1of 16

ESTRUCTURA DE UN PROGRAMA

.386 .model flat, stdcall option casemap:none Esta directiva sirve para establecer el tipo de procesador y sus instrucciones con lo que se va a trabajar, en esta caso 80386. Aqu establecemos el modelo de memoria requerido para nuestros programas de 32 bits. Esta opcin hace sensible las maysculas de las minsculas.

Include y Includelib

MASM32 incluye archivos y libreras para manejar un gran numero de funciones APi que existen en Windows, como por ejemplo la API ExitProcess que esta en nuestro cdigo. include se utiliza para agregar archivos con extensin .inc y .asm includelib se utiliza para agregar libreras con extensin .lib
MASM32 tambin incluye el archivo window.inc donde encontramos un gran numero de constantes y estructuras usadas por las API de Windows

.data y .data? .const

.data para la informacin inicializada y .data? Para la no inicializada Esta seccin contiene declaraciones de constantes usadas por tu programa. Las constantes NUNCA pueden ser modificadas en tu programa. Slo son constantes Indica a MASM32 donde empieza el cdigo del programa y tambin donde termina, para ello se ponen etiquetas seguido de : para indicarle que abajo empieza el cdigo de nuestro programa, y al terminar el cdigo del programa se escribe end mas la etiqueta que hemos declarado.

.code

EJEMPLO
.386.model flat, stdcall .data .code

start:
end start

WINDOWS API
La API de Windows es una enorme coleccin de funciones muy tiles que residen en el propio sistema Windows, listas para ser usadas por cualquier programa de Windows. Estas funciones estn almacenadas en varias libreras de enlace dinmico tales como:
Kernel32.dll contiene las funciones de la API que tienen que ver con el manejo de memoria y de los procesos. User32.dll controla los aspectos de la interface de usuario de tu programa. Gdi32.dll es la responsable de las operaciones grficas.

Existen otras DLLs que nuestros programas pueden emplear, siempre y cuando se tenga la suficiente informacin sobre las funciones de la API que nos interesan.

WINDOWS API
Los programas de Windows se enlazan dinmicamente a estas DLLs, con el fin de que tu programa pueda encontrar en tiempo de ejecucin las funciones de la API deseadas, hay que meter esa informacin dentro del archivo ejecutable. Esta informacin se encuentra dentro de archivos .LIB. Se deben enlazar los programas con las libreras de importacin correctas o no sern capaces de localizar las funciones de la API. Hay dos categoras de funciones de la API: Los nombres de las funciones de la API para ANSI terminan con "A", por ejemplo, MessageBoxA. Los de Unicode terminan con "W" Sin embargo, la mayora de las veces, se usar un archivo include que puede determinar y seleccionar las funciones de la API apropiadas para tu plataforma. Slo hay que referenciar los nombres de las funciones de la API sin su sufijo.

PROTOTIPOS DE FUNCIONES
Muchos de los prototipos de funciones API se conservan en archivos include, se encuentran en la carpeta MASM32/include.

Los archivos include tienen extensin .inc los prototipos de funcin para las funciones en una DLL se almacenan en archivos .inc con el mismo nombre que la DLL.

Por ejemplo, ExitProcess es exportado por kernel32.lib de manera que el prototipo de funcin para ExitProcess est almacenado en kernel32.inc. Tambin puedes crear prototipos para tus propias funciones.

API MESSAGEBOX
La funcin MessageBox crea, muestra y ejecuta un cuadro de mensaje. El cuadro de mensaje contiene un mensaje definido por la aplicacin y un ttulo, y adems cualquier combinacin de iconos predefinidos y botones.

int MessageBox(HWND lpCaption, UINT uType);

hWnd,LPCTSTR

lpText,LPCTSTR

HWND.- Este parmetro sirve para identificar el manejador de la ventana padre, nuestro caso colocamos NULL 0 por que no tiene manejador (handle). LpText.- Aqu colocamos la direccin donde se encuentra nuestro mensaje. LpCaption.- Titulo del mensaje uType.- Sirve para personalizar nuestro mensaje. Podemos especificar que tipo de botones deseamos y tambin el icono

API EXIT PROCESS


Todo programa que escribimos en debemos colocarle la siguiente funcin: VOID ExitProcess(UINT uExitCode) Con esta funcin cerramos nuestro programa, en el parmetro uExitCode se especifica el cdigo de salida, es el valor que quieres que el programa regrese a Windows despus de que el programa termina. MASM32

FUNCION INVOKE
invoke.- MASM32 tambin tiene un sintaxis de alto nivel, que nos facilita llamar a nuestras funciones de forma correcta, es decir que al momento de compilar MASM32 comprobara si los parmetros de nuestra funcin son los correctos y se emplea de esta manera: INVOKE FUNCION, Argumentos

COMPLETANDO EL EJEMPLO
.386 .model flat,stdcall option casemap:none include windows.inc include kernel32.inc includelib kernel32.lib include user32.inc includelib user32.lib .data MsgBoxCaption db Curso de Ensamblador",0 MsgBoxText db Usando MASM32",0 .code start: invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK invoke ExitProcess, NULL end start

OPERADOR ADDR Y OFFSET


addr.- Este operador sirve para pasar la direccin de nuestra etiqueta hacia nuestra funcin por ejemplo las etiquetas MsgTexto y MsgTitulo. offset.- Es similar al addr pero con algunas diferencias como muestra el siguiente cuadro:

Addr
utilizado con instrucciones mnemonic Trabaja solo con referencias que estn delante del cdigo. Puede operar con estructuras.

offset
Se utiliza con instrucciones mnemonic Trabaja con referencias que estn delante y atrs del cdigo. No puede operar con estructuras.

VARIABLES

EJEMPLOS DE VARIABLES

EJEMPLO DE PROGRAMA
.386 .model flat,stdcall option casemap:none
include windows.inc include kernel32.inc include user32.inc includelib user32.lib includelib kernel32.lib .data

include EJEMPLO 1.inc


.code ejemplo1:

Texto db "PRIMER PROGRAMA EN MASM",0 Titulo db WIN32,0

invoke MessageBox, NULL, addr Texto, addr Titulo, MB_OK invoke ExitProcess, NULL end ejemplo1

CREACION DE UNA PLANTILLA


Nos sirven para no volver a escribir toda la estructura de nuestros programas cada vez que queremos programar

OPERADOR DUP
significa duplicacin, se utiliza para separar espacios en la memoria y su sintaxis es de esta manera: Contador dup (valor inicial)

En contador escribimos el tamao que vamos a duplicar, y el valor inicial lo escribimos dentro del parntesis si se pone el signo ? significa que es un valor indefinido.
Ejemplo: Buffer db 225 dup (?) NombreApp db 50 dup (?) Si se va ha utilizar una variable para almacenar todo tipo de cadenas de texto devueltas por las funciones, las variables declaradas tengan un espacio considerable a lo que se va obtener.

OTRAS APIS (MASM32.LIB)


GetModuleFileName, HWND hWnd, addr Buffer, size Esta funcin devuelve el directorio de la aplicacin solicitada, si el manejador es nulo, enviar el directorio del programa actual, y lo har en la variable que hemos puesto en este caso Buffer y se quedara almacenado hasta que otra funcin remplace el dato que contiene la variable. NameFromPath, addr Buffer, addr NombreApp Buffer contiene el nombre mas el directorio de la aplicacin por que ya fue utilizada por la API GetModuleFileName , y la funcin NameFromPath extraer solo el nombre y la almacenara en la variable NombreApp.

You might also like