.386p ifdef ??version if ??version GT 500H .mmx endif endif model flat ifndef ??version ?debug macro endm endif ?debug S "pi.c" ?debug T "pi.c" _TEXT segment dword public use32 'CODE' _TEXT ends _DATA segment dword public use32 'DATA' _DATA ends _BSS segment dword public use32 'BSS' _BSS ends DGROUP group _BSS,_DATA _TEXT segment dword public use32 'CODE' _print proc near ?live1@0: ; ; void print(unsigned short *pi, int n) { ; push ebp mov ebp,esp push ebx push esi push edi mov edi,dword ptr [ebp+12] mov esi,dword ptr [ebp+8] ; ; int i; ; printf("%d.", pi[1]); ; ?live1@16: ; ESI = pi, EDI = n @1: movzx eax,word ptr [esi+2] push eax push offset s@ call _printf add esp,8 ; ; for (i=2; i 1 ? (atoi(argv[1])+3)/4+3 : 253; /* number of pi digits */ ; @6: cmp dword ptr [ebp+8],1 jle short @7 mov eax,dword ptr [ebp+12] push dword ptr [eax+4] call _atol pop ecx add eax,3 test eax,eax jns short @9 add eax,3 @9: sar eax,2 add eax,3 jmp short @8 @7: mov eax,253 @8: mov dword ptr [ebp-4],eax ; ; unsigned short *pi = (unsigned short*) malloc(n * sizeof(unsigned short)); ; mov edx,dword ptr [ebp-4] add edx,edx push edx call _malloc pop ecx mov esi,eax ; ; div_t d; ; int i, j, t; ; ; /* pi = 4 */ ; memset(pi, 0, n*sizeof(unsigned short)); ; ?live1@144: ; ESI = pi mov eax,dword ptr [ebp-4] add eax,eax push eax push 0 push esi call _memset add esp,12 ; ; pi[1]=4; ; mov word ptr [esi+2],4 ; ; ; /* for i = B down to 1 */ ; for (i=(int)(3.322*4*n); i>0; --i) { ; fild dword ptr [ebp-4] fmul qword ptr [@10] call __ftol mov edi,eax test edi,edi jle short @12 ; ; ; /* pi *= i; */ ; t = 0; ; ?live1@192: ; ESI = pi, EDI = i @11: xor eax,eax mov dword ptr [ebp-16],eax ; ; for (j=n-1; j>=0; --j) { /* pi *= i; */ ; mov ebx,dword ptr [ebp-4] dec ebx test ebx,ebx jl short @14 ; ; t += pi[j] * i; ; ?live1@224: ; EBX = j, ESI = pi, EDI = i @13: movzx eax,word ptr [esi+2*ebx] imul edi add dword ptr [ebp-16],eax ; ; pi[j] = t % 10000; ; mov eax,dword ptr [ebp-16] mov ecx,10000 cdq idiv ecx mov word ptr [esi+2*ebx],dx ; ; t /= 10000; ; mov ecx,10000 mov eax,dword ptr [ebp-16] cdq idiv ecx mov dword ptr [ebp-16],eax dec ebx test ebx,ebx jge short @13 ; ; } ; ; /* pi /= (2*i+1) */ ; d.quot = d.rem = 0; ; ?live1@272: ; ESI = pi, EDI = i @14: xor eax,eax mov dword ptr [ebp-8],eax mov dword ptr [ebp-12],eax ; ; for (j=0; j