; void realloc_pile() ; fonction qui agrandit la pile si elle est pleine realloc_pile: push ebp mov ebp,esp push ebx push ecx push esi push edi mov ebx,dword [nb_elements_pile] cmp ebx,dword [taille_alloc_pile] ; si nb_elements_pile < taille_alloc_pile on a pas besoin d'agrandir la pile jl realloc_pile_exit ; on agrandit la pile de 5 add dword [taille_alloc_pile],5 push dword newPile push dword newPilePtr push dword 16 mov ebx,dword [taille_alloc_pile] shl ebx,4 ; taille_alloc_pile * 2^4 (= vecteur) push ebx call malloc_align add esp,16 ; on assigne à pile l'adresse du sommet mov ebx,dword [taille_alloc_pile] sub ebx,dword [nb_elements_pile] shl ebx,4 add [newPile],ebx mov esi,dword [pile] mov edi,dword [newPile] mov ecx,dword [nb_elements_pile] realloc_pile_for: cmp ecx,0 je realloc_pile_for_end movdqa xmm7,[esi] movdqa [edi],xmm7 add esi,16 add edi,16 loop realloc_pile_for realloc_pile_for_end: push dword [pilePtr] call free add esp,4 mov ebx,dword [newPilePtr] mov dword [pilePtr],ebx mov ebx,dword [newPile] mov dword [pile],ebx realloc_pile_exit: pop edi pop esi pop ecx pop ebx mov esp,ebp pop ebp ret