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