;exportar label de inicio do programa global _start section .data ;seccao data - dados inicializados d ; variaveis de 32 bits m1: dd 48 n1: dd 6 res: dd 0 section .text ;seccao text - codigo _start: nop ; Utilize a sua subrotina (comb) para calcular o número de ; combinações possíveis do Euromilhões ( C(50,5)*C(9,2) ). ;Calcular C(48,6) push dword [m1] push dword [n1] call comb add esp, 8 mov [res], eax ; chamada ao sistema para terminar o programa mov eax, 1 ;codigo de "exit" mov ebx, 0 ;valor retornado ao sistema int 0x80 ;chamda ao sitema comb: ; ebp + 12 = m ; ebp + 8 = n push ebp mov ebp, esp sub esp, 8 ;ebp - 4 = m! , first 32 bits ;ebp - 8 = m! , seconds 32 bits push ebx push ecx ;calcular m! mov eax, [ebp + 12] mov ecx, [ebp + 8] call factorial mov [ebp - 4], eax ;save m! mov [ebp - 8], edx ;calcular n! mov eax, [ebp + 8] mov ecx, eax call factorial mov edx, [ebp - 8] mov ebx, [ebp - 4] xchg eax, ebx div ebx pop ecx pop ebx add esp, 8 pop ebp ret factorial: push ebp mov ebp, esp mov ebx, eax ;dec ecx loop: dec ebx dec ecx cmp ecx, 0 jz endfact mul ebx jmp loop endfact: pop ebp ret