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