section .data section .text global _start write: push ebp mov ebp, esp mov edx, 1 mov ecx, ebp add ecx, 8 mov ebx, 1 mov eax, 4 int 0x80 leave ret pi: push ebp mov ebp, esp mov eax, [ebp+8] cmp eax, 10 jl NO mov edx, 0 mov ecx, 10 div ecx push edx push eax call pi mov eax, [esp+4] ; mod NO: add eax, 0x30 push eax call write leave ret read: push ebp mov ebp, esp push 0 push 0 mov edx, 1 mov ecx, esp mov ebx, 0 mov eax, 3 int 0x80 mov edx, 1 mov ecx, esp add ecx, 4 mov ebx, 0 mov eax, 3 int 0x80 mov eax, [esp] sub eax, 0x30 mov ecx, 10 mul ecx add eax, [esp+4] sub eax, 0x30 leave ret _start: push ebp mov ebp, esp sub esp, 120 mov ecx, 12 loop: mov [esp+100], ecx call read mov ecx, 12 sub ecx, [esp+100] mov [esp+4*ecx], eax mov edx, 1 mov ecx, esp add ecx, 4 mov ebx, 0 mov eax, 3 int 0x80 mov ecx, [esp+100] LOOP loop mov ebx, 0 mov eax, [esp+12] mov ecx, [esp+28] mul ecx mov ecx, [esp+40] mul ecx add ebx, eax mov eax, [esp+16] mov ecx, [esp+32] mul ecx mov ecx, [esp+36] mul ecx add ebx, eax mov eax, [esp+20] mov ecx, [esp+24] mul ecx mov ecx, [esp+40] mul ecx add ebx, eax mov eax, [esp+12] mov ecx, [esp+32] mul ecx mov ecx, [esp+40] mul ecx sub ebx, eax mov eax, [esp+16] mov ecx, [esp+24] mul ecx mov ecx, [esp+44] mul ecx sub ebx, eax mov eax, [esp+20] mov ecx, [esp+28] mul ecx mov ecx, [esp+36] mul ecx sub ebx, eax push ebx call pi leave ret