All pastes #2027652 Raw Edit

Something

public text v1 · immutable
#2027652 ·published 2010-12-23 22:29 UTC
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