;exportar label de inicio do programa global _start section .data ;seccao data - dados inicializados ; variaveis de 32 bits x: dd 0 n: dd 4 section .text ;seccao text - codigo _start: nop ; x = n! - (n-1)! mov eax, [n] call calcula add sp, 4 mov [x], 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 calcula: push ebp mov ebp, esp push ebx call factorial mov ebx, eax mov eax, [n] dec eax call factorial xchg eax, ebx sub eax, ebx pop ebx pop ebp ret factorial: push ebp mov ebp, esp push ebx mov ebx, eax loop: dec ebx cmp ebx, 1 jle endfact imul ebx jmp loop endfact: pop ebx pop ebp ret