;exportar label de inicio do programa global _start section .data ;seccao data - dados inicializados d ; variaveis de 32 bits m1: dd 50 n1: dd 5 m2: dd 9 n2: dd 2 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) ). mov ebp, esp sub esp, 4 ;ebp - 4 = C(50,5) ;Calcular C(50,5) push dword [m1] push dword [n1] call comb add esp, 8 mov [ebp - 4], eax ;Calcular C(9,2) push dword [m2] push dword [n2] call comb add esp, 8 mul dword [ebp - 4] 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, 4 ;ebp - 4 = m! push ebx push ecx ;calcular m! mov eax, [ebp + 12] mov ecx, [ebp + 8] call factorial mov [ebp - 4], eax ;save m! ;calcular n! mov eax, [ebp + 8] mov ecx, eax call factorial mov ebx, [ebp - 4] xchg eax, ebx div ebx pop ecx pop ebx add esp, 4 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