All pastes #676393 Raw Edit

Someone

public text v1 · immutable
#676393 ·published 2007-08-31 00:55 UTC
rendered paste body
extern malloc
global suma
section.text
suma:   push    ebp
        mov     ebp, esp
        push    esi
        push    edi
        push    ebx
        mov     esi,[ebp+8] ; muevo a ESI el puntero al parametro A
        mov     edi,[ebp+12] ; muevo a EDI el puntero al parametro B
        push    DWORD 8 ; apilo el parametro para malloc
        call    malloc ; pido memoria 
        add     esp,4 ; desecho el parametro de malloc
        cmp     eax,0 ; si malloc dio 0, hubo error
        je      fin ; si fue asi, salgo
        mov     edx,eax ; guardo en EDX el puntero a mi super memoria
        mov     eax,[esi]
        add     eax,1 ; rezo que no haya carry
        mov     [edx],eax ; guardo el tamanio del resultado
        push    edx
        push    eax ; idem malloc anterior
        call    malloc
        add     esp,4
        pop     edx
        cmp     eax,0
        je      fin
        mov     [edx+4],eax ; guardo el puntero al dato de resultado
                            ; en la estructura resultado
        mov     esi,[esi+4]
        mov     edi,[edi+4]
        mov     ecx,[edx]
        dec     ecx
        shr     ecx,2 ; corrijo el valor del contador
        clc
ciclo:  
        mov     ebx,[esi]
        adc     ebx, [edi]
        mov     [eax],ebx
        lea     esi,[esi+4]
        lea     edi,[edi+4]
        lea     eax,[eax+4]
        loop    ciclo

        mov     BYTE [eax],0 ; arreglo el ultimo bit
        adc     BYTE [eax],0

        mov     eax, edx
fin:
        pop     ebx
        pop     edi
        pop     esi
        pop     ebp

        ret