/*//////////////////////////////////////////////////////// // Name: Peter M. Maurer // Program: Sieve of Eratosthenes // Due: Never // Language: i386 assembler (GNU) ////////////////////////////////////////////////////////*/ .text .globl main main: /* standard prolog */ pushl %ebp movl %esp, %ebp subl $8, %esp andl $-16, %esp movl $1000,%ebx leal Candidates,%eax init: /* everything is potentially prime until proven otherwise */ movl $1,(%eax) addl $4,%eax decl %ebx jnz init /* Neither 1 nor 0 is prime, so flag them off */ movl $0,Candidates movl $0,Candidates+4 /* start the sieve with the integer 0 */ leal Candidates,%eax movl $0,%ebx OuterWhile: /* advance to the next un-crossed out number. */ /* this number must be a prime */ InnerWhile1: cmpl $1000,%ebx jge EndOuter cmpl $0,(%eax) jne EndInner1 incl %ebx addl $4,%eax jmp InnerWhile1 EndInner1: /* cross out all multiples of the prime, starting with 2*p. */ movl %eax,%ecx movl %ebx,%edx Innerwhile2: addl %ebx,%edx cmpl $1000,%edx jge EndInner2 addl %ebx,%ecx addl %ebx,%ecx addl %ebx,%ecx addl %ebx,%ecx movl $0,(%ecx) jmp Innerwhile2 EndInner2: /* advance to the next candidate */ incl %ebx addl $4,%eax jmp OuterWhile EndOuter: /* all uncrossed-out numbers are prime (and only those numbers) */ /* print all primes */ leal Candidates,%eax movl $0,%ebx PrintLoop: cmpl $1000,%ebx jge EndPrint cmpl $0,(%eax) je NoPrint movl %eax,i movl %ebx,j pushl %ebx pushl $Msg pushl stdout call fprintf addl $12,%esp movl i,%eax movl j,%ebx NoPrint: incl %ebx addl $4,%eax jmp PrintLoop EndPrint: /* standard epilog */ leave ret .data Msg: .string "%d is prime\n" i: .long 0 j: .long 0 /* define the sieve data structure */ .align 8 Candidates: .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0 .long 0,0,0,0,0,0,0,0,0,0