Programación General > ASM (Ensamblador)
Str2morse
(1/1)
Enko:
Lo que hace el programa es convertir una cadena de caracteres al codigo morse.
Se me ocurió hacerlo por:
http://foros.solocodigo.com/index.php?showtopic=28012
La cadena entrada solo debe contener mayusculas y espacios, los otros caracteres serán ignorados. Como estoy en el trabajo y no encontré la funcion para pasar de minusculas a mayusculas, y mia no quice hacer. (en la msvcrt hay una, pero bue...)
Lo hice porque vi la solucion en JavaScript de una pagina que hacía unos 30 ifs..... no se como que no da
--- Código: Text --- format PE GUI 4.0entry 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 retendp section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL' include '..\include\api\kernel32.inc' include '..\include\api\user32.inc'
Bicholey:
:blink: :smartass: :rolleyes: :huh:
Ahora ya todos podremos participar en el dicho foro y colocar nuestras opiniones en morse...
Hablando de tonterias que no seria buena idea eso de subir programas hechos para que los usuarios del foro ya no estuvieran pidiendo, no tienen un programa de esto de lo otro de aquello, de seguro muchos de nosotros no tenemos mas que programas ociosos que no hace nada importante pero son muy didacticos...
Navegación
Ir a la versión completa