¿por qué me da errores en este code MASM? saltos y etiquetas

Iniciado por theghost_te, 27 Noviembre 2010, 01:48 AM

0 Miembros y 1 Visitante están viendo este tema.

theghost_te

Hola, estaba practicando saltos condicionales y etiquetas en MASM32, e hice este code:

.386
.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data
classname db "notepad",0    ;classname del block de notas
nuevotitulo db "caption cambiado en MASM32",0
titulo db "ejemplos de saltos y etiquetas",0
mensajeencontrado db "Se encontró el classname",0
mensajenoencontrado db "No se encontró el classname",0


.data?
controlador dd ?

.code
inicio:
invoke FindWindow, addr classname, NULL
mov controlador, eax
cmp controlador,0 ; NULL
jne encontrado  ;si es diferente de cero salta a encontrado
cmp controlador,0
je noencontrado ;si es igual a cero salta a noencontrado
ret

encontrado:
invoke MessageBox, NULL, addr mensajeencontrado, addr titulo, MB_OK
invoke SetWindowText, controlador,addr nuevotitulo  ;cambia el titulo del block de notas
invoke ExitProcess, NULL
ret

noencontrado:
invoke MessageBox, NULL, addr mensajenoencontrado, addr titulo, MB_ICONERROR
invoke ExitProcess, NULL
end noencontrado


Como ven lo que hace es buscar al block de notas por su classname, si encuentra se va a la etiqueta encontrado donde muestra mensaje y cambia el caption del block, sino saca  un mensaje de que no necontro, he abierto el block de notas antes de ejecutar mi code pero siempre me salta a la etiqueta "noencontrado", lo curioso es que cuando cambio los saltos condicionales y le pongo el incondicional JMP para que vaya directo a la etiqueta encontrado aún asi tambien este salta a noencontrado.

.386
.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data
classname db "notepad",0    ;classname del block de notas
nuevotitulo db "caption cambiado en MASM32",0
titulo db "ejemplos de saltos y etiquetas",0
mensajeencontrado db "Se encontró el classname",0
mensajenoencontrado db "No se encontró el classname",0


.data?
controlador dd ?

.code
inicio:
invoke FindWindow, addr classname, NULL
mov controlador, eax
jmp encontrado
ret

encontrado:
invoke MessageBox, NULL, addr mensajeencontrado, addr titulo, MB_OK
invoke SetWindowText, controlador,addr nuevotitulo  ;cambia el titulo del block de notas
invoke ExitProcess, NULL
ret

noencontrado:
invoke MessageBox, NULL, addr mensajenoencontrado, addr titulo, MB_ICONERROR
invoke ExitProcess, NULL
end noencontrado


Pero cuando ejecuto solo la etiqueta inicio sin salto ni nada es decir: findwindow, mov y setwindowtext si me cambia el caption al block de notas:

.code
inicio:
invoke FindWindow, addr classname, NULL
mov controlador, eax
invoke SetWindowText, controlador, addr nuevotitulo
invoke ExitProcess, NULL
end inicio


Please una mano con esto llevo un buen rato en esta dificultad, estuve buscando saltos y etiquetas en MASM32 pero solo encuentro ejemplo que no me sacan de duda, en este codigo ¿qué  hice mal?

Eternal Idol

#1
No mire el codigo demasiado pero si lo depuras vas a ver inmediatamente que no hace nada de lo que esperas por una razon: el entry point del programa no es inicio.

Al poner end noencontrado eso hace que noencontrado sea el entry point, es decir el programa se ejecuta desde ahi hasta el final ...  mejor pone end inicio :silbar:
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

theghost_te

#2
Gracias man, eso era el problema.

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón