; void realloc_pile() ; teste si il y a besoin d'agrandir la pile, et l'agrandit le cas échéant realloc_pile: push ebp mov ebp,esp mov eax,dword [nb_elements_pile] cmp eax,dword [taille_alloc_pile] jl realloc_pile_exit 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 (= 16 = 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 xmm0,[esi] movdqa [edi],xmm0 add esi,16 add edi,16 dec ecx jmp realloc_pile_for realloc_pile_for_end: push dword [pilePtr] call free add esp,4 mov eax,dword [newPilePtr] mov dword [pilePtr],eax mov eax,dword [newPile] mov dword [pile],eax add esp,8 realloc_pile_exit: mov esp,ebp pop ebp ret