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++