Pangramme

vifo2008 Messages postés 3 Date d'inscription vendredi 28 décembre 2007 Statut Membre Dernière intervention 21 septembre 2010 - 21 avril 2010 à 12:01
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 21 avril 2010 à 17:17
Bjr je suis un débutant en programmation assembleur et et je voudrai 1 programme qui teste si toutes les lettres de l'alphabet sont présentes dans une chaine de caractères.
simple

1 réponse

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
21 avril 2010 à 17:17
Fait sur Win7 x64, tu adapteras en 32 bits si besoin.


L'alphabet dans un buffer: BYTE btALPHA[256]

Voila qui permet de changer l'alphabet pendant l'exécution:
On y met des 1 ou 0.
; void __fastcall bnMakeAlpha(RCX BYTE *pAlpha, RDX char* szAlpha);
bnMakeAlpha PROC
xor eax, eax
mov r8d, 248 ; OFFSET DU DERNIER QWORD dans pAlpha
goZERO: ; 256 OCTETS A METTRE A ZERO
mov [rcx + r8], rax
sub r8d, 8
jns short goZERO
goSZALPHA:
mov al, byte ptr[rdx]
mov byte ptr[rcx + rax], 1
add rdx, 1
test al, al
jne short goSZALPHA
mov byte ptr[rcx], 0
ret 0
bnMakeAlpha ENDP

La fonction dessous retourn 0 ou 1 si le texte contient toutes les lettres de l'alphabet (btALPHA).
; DWORD __fastcall bnIsFullAlpha(RCX BYTE *pAlpha, RDX char* szText)
bnIsFullAlpha PROC
; COPIE DE pAlpha SOUS LE POINTEUR STACK SANS LE DEPLACER
mov r8d, 248 ; OFFSET DU DERNIER QWORD dans pAlpha
lea r9, [rsp - 256]
cpyALPHA:
mov rax, [rcx + r8]
mov [r9 + r8], rax
sub r8d, 8
jns short cpyALPHA
; METTRE ZERO CHAQUE OCTET DE TABLE LOCALE pAlpha->szText[i]
xor eax, eax
mov r8d, 248 ; (pour verifALPHA) OFFSET DU DERNIER QWORD dans pAlpha
goTEXT:
mov al, byte ptr[rdx]
mov byte ptr[r9 + rax], 0
add rdx, 1
test al, al
jne short goTEXT
verifALPHA:
or rax, [r9 + r8]
sub r8d, 8
jns short verifALPHA
test rax, rax
sete al
and eax, 1
ret 0
bnIsFullAlpha ENDP



ciao...
BruNews, MVP VC++
0
Rejoignez-nous