safwensafwen
Messages postés10Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention13 novembre 2008
-
12 mars 2007 à 17:34
Guilou34
Messages postés142Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention29 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
Guilou34
Messages postés142Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention29 janvier 20161 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