;exportar label de inicio do programa global _start section .data ;seccao data - dados inicializados ; variaveis de 32 bits m: dd 5 n: dd 3 res: dd 0 section .text ;seccao text - codigo _start: nop ; Implemente uma subrotina (comb) que calcula C(m,n), ; recorrendo a chamadas à subrotina factorial implementada ; anteriormente. push dword [m] push dword [n] 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 push ebx sub esp, 2*4 ;ebp - 4 = m! ;ebp - 8 = n! ;calcular m! push dword [ebp + 12] call factorial add esp, 4 mov [ebp - 4], eax ;save m! ;calcular n! push dword [ebp + 8] call factorial add esp, 4 mov [ebp - 8], eax ;save n! ;calcular (m - n)! mov eax, [ebp + 12] sub eax, [ebp + 8] push eax call factorial add esp, 4 mov ebx, [ebp - 8] mul ebx mov ebx, [ebp - 4] xchg eax, ebx div ebx add esp, 2*4 pop ebx pop ebp ret factorial: push ebp mov ebp, esp push ebx mov ebx, [ebp + 8] mov eax, ebx loop: dec ebx cmp ebx, 1 jle endfact imul ebx jmp loop endfact: pop ebx pop ebp ret