Name: Anonymous 2012-10-02 17:08
i need a program that finds all the primes under an arbitrary number and puts them on the console
have it ready by thursday at noon you faggots
have it ready by thursday at noon you faggots
format PE Console 4.0
include 'win32a.inc'
entry main
section '.text' code data readable writeable executable
sieve:
cmp dword[esp+8],1
jle .ret
push esi
push edi
mov esi,[esp+0xC] ;ESI = buffer
mov edi,[esp+0x10] ;size
push ebx
lea ecx,[edi-2] ;ECX = size - 2
mov ebx,2 ;EBX = p
push edi
push edi
fnstcw [esp]
fnstcw [esp+2]
wait
or byte[esp+1],0xC
fldcw [esp]
fild dword[esp+4]
fsqrt
fistp dword[esp+4]
fldcw [esp+2]
pop edi
pop edi ;EDI = upto
push edi
push ecx
mov word[esi],0
mov al,1
lea edi,[esi+2]
rep stosb
pop ecx
pop edi
add esi,ebx
db 0x66,0x90
.loop:
cmp byte[esi],0
jnz .Prime
.cond:
inc ebx
inc esi
dec ecx
cmp ebx,edi
jl .loop
jmp @f
.Prime:
mov eax,ebx
imul eax,eax
sub eax,ebx
.SetToNonPrime:
mov byte[esi+eax],0
add eax,ebx
cmp eax,ecx
jl .SetToNonPrime
jmp .cond
@@:
pop ebx
pop edi
pop esi
.ret:
retn 8
main:
push getnum_printstr
call [printf]
push esp
push getnum_scanstr
call [scanf]
add esp,8
inc dword[esp]
push edi
push dword[esp+4]
call [malloc]
mov edi,eax
push eax
call sieve
push ebx
push esi
mov ebx,[esp+0xC]
mov esi,2
sub ebx,esi
push esi
push numstr
@@:
cmp byte[esi+edi],0
je .NotPrime
call [printf]
.NotPrime:
inc esi
mov [esp+4],esi
dec ebx
jnz @b
pop eax
pop eax
pop esi
pop ebx
push edi
call [free]
pop edi
call [getch]
pop edi
pop ecx
ret
align 4
data import
library crt,'MSVCRT.DLL'
import crt,getch,'_getch',free,'free',malloc,'malloc',printf,'printf',scanf,'scanf'
end data
numstr db '%u',9,0
getnum_printstr db 'Find up to which number? ',0
getnum_scanstr db '%u',0