format PE GUI 4.0
entry start
include '..\include\win32a.inc'
section '.data' data readable writeable
hInstance dd 0
szString db 1024 dup 0 ;cadena salida
szMessage db 'AAA AAA', 0 ;solo mayusculas señores
szFormat db '%s%s', 0
szSpace db '|',0
length dd 0
;vector con cadenas de letras de morse alineado a 8 bytes
szMorse db '.- ',0 ,0,0,0,0,\;A 0
'-... ',0,0,0,\;B 1
'-.-. ',0,0,0,\;C 2
'-.. ',0,0,0,0,\;D 3
'. ',0,0,0,0,0,0,\;E 4
'..-. ',0,0,0,\;F 5
'--. ',0,0,0,0,\;G 6
'.... ',0,0,0,\;H 7
'.. ',0,0,0,0,0,\;I 8
'.--- ',0,0,0,\;J 9
'-.- ',0,0,0,0,\;K 10
'.-.. ',0,0,0,\;L 11
'-- ',0,0,0,0,0,\;M 12
'-. ',0,0,0,0,0,\;N 13
'--- ',0,0,0,0,\;0 14
'.--. ',0,0,0,\;P 15
'--.- ',0,0,0,\;Q 16
'.-. ',0,0,0,0,\;R 17
'... ',0,0,0,0,\;S 18
'- ',0,0,0,0,0,0,\;T 19
'..- ',0,0,0,0,\;U 20
'...- ',0,0,0,\;V 21
'.-- ',0,0,0,0,\;W 22
'-..- ',0,0,0,\;X 23
'-.-- ',0,0,0,\;Y 24
'--.. ',0,0,0 ;Z
section '.code' data readable
start:
invoke GetModuleHandle,0
mov [hInstance], eax
stdcall str2morse, szMessage, szString
invoke MessageBox, 0, szString, szMessage, MB_OK
invoke ExitProcess,0
proc str2morse strin, strout
push esi edi ebx
;tamaño cadena entrada
invoke lstrlen, [strin]
mov [length], eax
xor ebx, ebx
mov esi, [strin]
mov edi, [strout]
for_i:
mov eax, [esi + ebx]
and eax, 0x000000FF
;aca iria una funcion tipo StrUpper
;verificamos si es un espacio, si lo es se imprime una barra
cmp eax, 32
jne notspace
invoke wsprintf, edi, szFormat, [strout], szSpace
notspace:
;verificamos que este entre A..Z
cmp eax, 65
jl next
cmp eax, 90
jg next
;como la letra A es 65 y el arreglo comienza desde 0
;se resta 65
sub eax, 65
;multiplicamos por 8 porque esta alineado a 8
imul eax, 8
lea edx, [szMorse+ eax]
;strSalida = strSalida + ChrToMorse(strEntrada[ebx]);
invoke wsprintf, edi, szFormat, [strout], edx
next:
;cosas del bucle
inc ebx
cmp ebx, [length]
jle for_i
xor eax, eax
end_for:
pop ebx edi esi
ret
endp
section '.idata' import data readable writeable
library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL'
include '..\include\api\kernel32.inc'
include '..\include\api\user32.inc'