cs_kalif
Messages postés362Date d'inscriptionmardi 18 décembre 2001StatutMembreDernière intervention24 août 2012
-
15 juin 2006 à 13:07
cs_kalif
Messages postés362Date d'inscriptionmardi 18 décembre 2001StatutMembreDernière intervention24 août 2012
-
15 juin 2006 à 14:09
bonjour a tous,
je débute dans l'asm, pouriez vous me donner l'adresse de bon tuto pour débutant (des tuto accéléré svp)
je voudrai justre comprendre les instructions comme:
mov edx, dword ptr [esp+28]
ou
push edx
enfin je crois savoir que push ca sert a pousser une valeur sur la pile mais ce n'est que de la théorie tout ca je voudrai un bon tuto avec du concret
cs_Nasman
Messages postés202Date d'inscriptionmardi 17 mai 2005StatutMembreDernière intervention29 septembre 20083 15 juin 2006 à 13:55
Bonjour,
Tout dépend du type de programmation que tu souhaites faire. Pour le 16 bits (qui devient passablement obsolète) tu peux aller voir sur le site de OPIE (opecheux.free.fr).
Pour la programmation windows, la référence est le site d'Iczelion (http://win32assembly.online.fr/) avec une partie traduite par MORGATTE (http://assembly.ifrance.com/zip/morgatte_traduction.zip).
Quant aux deux instructions citées:
mov edx, dword ptr [esp+28] (équivalent Nasm mov edx,dword [esp+28])
regarde la valeur du registre esp (pointeur de pile), considère le résultat comme une adresse, rajoute 28 pour avoir une nouvelle adresse, puis met le contenu situé à cette adresse (un dword, soit 4 octets) dans le registre edx. En fait le contenu des 4 octets consécutifs pointés par [esp+28].
L'instruction push edx effectue les opérations suivantes:
L'adresse du sommet de pile est donnée par esp
push edx empile un dword (4 octets) de la façon suivante:
soustrait 4 à esp
place la valeur de edx à la nouvelle adresse pointée par esp;
Ainsi après le push edx tu auras:
[esp] correspondra à la valeur sauvegardée de edx
[esp+4] correspondra à la valeur précédemment empilée sur la pile (avant le push edx).
Procédure
push ebp
mov ebp,esp
; [esp] = ebp sauvegardé
; [esp+4] = adresse de suite (pour le retour)
; [esp+8] = paramètre 1
; [esp+12] = paramètre 2
; en fin de procédure il faut retourner au programme principal
mov esp,ebp
pop ebp
ret xx
;xx est le nombre d'octets dépilés au sortir de la procédure
; si xx = 0 alors c'est au programme appelant de vider les deux dwords (param 1 et 2)
;si xx = 8 (8 octets soit 2 dword) alors la pile est vidée par le sous programme stdcall