All pastes #2027300 Raw Edit

Untitled

public text v1 · immutable
#2027300 ·published 2010-12-23 15:30 UTC
rendered paste body
; 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