En réponse à une demande sur le forum.
Une dialogbox avec un editbox.
On entre texte et ENTER.
Réponse NON ou OUI si est palindrome.
On se retouve aussi sur:
http://www.dev.winsysdev.com/
Source / Exemple :
.586
.model flat, stdcall
option casemap :none
option prologue:none
option epilogue:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
IDD_APP EQU 101
ID_TXT EQU 1000
.data
htxt DD 0
szappname DB "Palindrome",0
.code
start:
ALIGN 4
push 0
call GetModuleHandle
push 0
push offset AppDlgProc
push 0
push IDD_APP
push eax
call DialogBoxParam
progEnd:
push 0
call ExitProcess
AppDlgProc PROC ; callback evenements de fenetre
mov eax, [esp+8] ; EAX = message
mov edx, [esp+12] ; EDX = wParam
mov ecx, [esp+4] ; ECX = hdlg
cmp eax, WM_COMMAND
je short onCOMMAND
cmp eax, WM_INITDIALOG
je short onINITDIALOG
xor eax, eax
ret 16
onINITDIALOG:
lea eax, [esp-44]
xor edx, edx
mov dword ptr[eax+4], IDI_APPLICATION
mov dword ptr[eax+12], GCL_HICON
mov [eax+8], ecx
mov [eax], edx
mov [eax+20], ecx
mov dword ptr[eax+24], ID_TXT
mov [eax+40], edx
mov esp, eax
mov dword ptr[eax+36], 59
mov dword ptr[eax+32], EM_SETLIMITTEXT
call LoadIcon
mov [esp+8], eax
call SetClassLong
call GetDlgItem
mov [esp], eax
mov htxt, eax
call SendMessage
ret 16
onCOMMAND: ; EDX = wParam
cmp edx, IDOK
je short onOK
cmp edx, IDCANCEL
je short onCANCEL
ret 16
onCANCEL:
push 0
push ecx
call EndDialog
ret 16
onOK:
sub esp, 72 ; szbuff[60]+GetWindowText(12)
mov ecx, htxt
lea eax, [esp+12] ; adr szbuff(ma chaine)
mov dword ptr[esp+8], 60
mov [esp], ecx
mov [esp+4], eax
call GetWindowText
mov eax, esp ; param szbuff pour Palindrome
call Palindrome
mov ecx, esp ; adr szbuff(ma chaine)
test eax, eax
mov edx, [esp+64] ; hdlg
jne short palOK
mov dword ptr[ecx], 4E4F4Eh ; "NON",0
jmp short msgResult
palOK:
mov dword ptr[ecx], 49554Fh ; "OUI",0
msgResult:
push MB_ICONINFORMATION
push offset szappname
push ecx
push edx
call MessageBox
add esp, 60
ret 16
AppDlgProc ENDP
Palindrome PROC ; *psz dans EAX
xor ecx, ecx
mov edx, eax
L1:
cmp byte ptr[eax], cl
je short L2
inc eax
jmp short L1
L2:
dec eax
cmp edx, eax
jae short plndExit ; chaine vide OK
L3: ; BOUCLAGE SUR CHAINE
cmp byte ptr[eax], 32
jne short verif1
dec eax
jmp short L3
verif1:
cmp edx, eax
jae short plndExit ; OK
L4:
cmp byte ptr[edx], 32
jne short verif2
inc edx
jmp short L4
verif2:
cmp edx, eax
mov cl, [eax]
jae short plndExit ; OK
cmp cl, [edx]
jne short palindBAD
inc edx
dec eax
cmp edx, eax
jb short L3
ret 0
palindBAD:
xor eax, eax
plndExit:
ret 0
Palindrome ENDP
end start
Conclusion :
Palindrome PROC reçoit ptr sur texte dans EAX.
Tient compte des espaces possibles dans chaine mais est CASE SENSITIVE.
Sort EAX != 0 si OK.
Tout dans zip pour assembler et exe pour tester directement.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.