rendered paste body; 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