Conversion minuscule

safwensafwen Messages postés 10 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 13 novembre 2008 - 12 mars 2007 à 17:34
Guilou34 Messages postés 142 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 29 janvier 2016 - 13 mars 2007 à 00:49
C'est unprogramme qui fair la conversion en minuscule en utilisant la pile



je n'arrive pas à comprendre pourquoi on fait :




mov ebx,[ebp+12] au lieu de




mov ebx,[ebp+16] (car il s'agit de Double word)



pourriez vous m'expliquer?



Merci










tab1    db   
'AGFRDTEZTY'





long equ
$-tab1






 






.code





debut:






       
     lea eax,tab1






       
     push eax






       
     mov ecx,long






       
     push ecx






       
     call conv






 






; retour à Windows






 







       
     push Large 0






       
     Call ExitProcess






 






conv proc near






            

push
ebp  ; pour sauvegarder puis après
récupérer






             mov ebp,esp ;  ???????






             mov ecx,[ebp+8] ;ebp est le dernier






            

mov ebx,[ebp+12]





et1:         mov
al,[ebx]






             add
al,20h






            

mov
[ebx],al






             inc bx         ;
incrémentation
du pointeur du tableau en byte









             loop et1






             pop ebp






ret 8        ;         ret4n
pour la pile en 32 bits





conv endp                   ;
ici n=2






             end
debut

1 réponse

Guilou34 Messages postés 142 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 29 janvier 2016 1
13 mars 2007 à 00:49
Après push ebp, la pile contient, dans l'ordre,  l'adresse de tab1,la taille de tab et le contenu de ebp donc 3 fois 4 octets.
Après pop ebp, on retrouve l'adresse de retour sur la pile après avoir soustrait  8 octets.
Il ne faut pas oublier que esp est décrémenté après le push, c'est peut-être là ton erreur
 
Par ailleurs, il faut mieux utiliser or al,20h , plutot que add al,20h parce que si la chaîne a traiter contient des minuscules  le résultat sera incorrect.
Amicalement
0
Rejoignez-nous