Palindrome (win32, masm32)

0/5 (5 avis)

Vue 8 133 fois - Téléchargée 329 fois

Description

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.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
28
zip remis.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
28
Exact, encore un zip qui a souffert du plantage chez frontier en mars.
Le temps de le recomposer et je le remplace.
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Fichier zip invalide : ouverture avec WinRar 3.3...
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
28
Parce que c'est codé.
Messages postés
154
Date d'inscription
samedi 3 août 2002
Statut
Membre
Dernière intervention
12 décembre 2008

comment sai le prog si c un palindrome ou pas ?

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.