Código:
include 'c:\fasm\include\win32ax.inc'
.data
lpTextOk db 'notepad encontrado',0
lpTextError db 'no se encontró notepad',0
lpCaption db 'Mi Primer programa',0
lpClassName db 'notepad',0
lpWindowName db 0
NuevoTitulo db 'Modificando un caption',0
lpString db 'hello world',0
nCount dd 11
hWin dd ?
hdc dd ?
.code
start:
push 0 ;linea 19 original: push lpWindowName (no encuentra el notepad)
push lpClassName
call [FindWindowA]
mov [hWin],eax ;linea 22 original: mov hwin,eax
cmp [hWin],0
jne encontrado
jmp noencontrado
.end start
encontrado:
push 64
push lpCaption
push lpTextOk
push 0
call [MessageBoxA]
push NuevoTitulo
push [hWin]
call [SetWindowTextA]
push [hWin]
call [GetDC]
mov [hdc],eax ;linea 39 original: mov hdc,eax
push [nCount]
push lpString
push 25
push 25
push [hdc]
call [TextOutA]
push 1
push [hWin]
call [FlashWindow]
push 333
call [Sleep]
push 0
push [hWin]
call [FlashWindow]
push 333
call [Sleep]
push 1
push [hWin]
call [FlashWindow]
jmp salida
ret
noencontrado:
push 16
push lpCaption
push lpTextError
push 0
call [MessageBoxA]
jmp salida
ret
salida:
push 0
call [ExitProcess]
ret
la teoria del "mov destino,origen" dice que mueve info del origen al destino, y en FASM al poner la variable entre "[]" [variable] se refiere al valor que contiene supongo que al poner variable sin nada entonces se refiere a su direccion en memoria, en la linea 19 del codigo al principio puse "mov hWin,eax" lo entiendo de esta manera: "lo que valga eax muevelo a la direccion de hWin", pero me daba error (al igual que la linea 39), asi que le puse [hWin] y funciona , el uso del mov y de pasar las variables entre "[]" y sin nada no me queda muy claro ¿alguien me podria dar una mejor explicacion de esto?