View Single Post
  #1 (permalink)  
Old May 24th, 2009, 05:22 PM
daddymac1213 daddymac1213 is offline
Registered User
 
Join Date: May 2009
Posts: 2
Thanks: 0
Thanked 0 Times in 0 Posts
Default Prime number program help

I need help with a program that finds and displays all of the prime numbers (eg, 1, 2, 3, 5, 7, 11, 13, 17, 19) from 1 to 20. I have most of the code, but am unsure where to go from here, the output displays all numbers from 1 to 20. Here is what I have so far:
Code:
include 'emu8086.inc'
org  100h ; set location counter to 100h
jmp CodeStart
DataStart:
   max dw 20
   space db " ", 0
CodeStart:
   mov bx, 1
   
   
   call IsPrime  
   cmp dx, 0
   
   LoopStart:   
   
       ; must be a prime
       mov ax, bx
       call print_num
       
       ; print a space
       mov si, offset space
       call print_string
       
       add bx, 1
       cmp bx, max
   jle LoopStart
   
   ret
       
    
   IsPrime PROC
       ; uses a loop to determine if number in bx is prime
       ; upon return if bx not prime dx will be 0, otherwise dx > 0
       ; we only have to test divisors from 2 to bx/2
       
       ; prepare to divide dx:ax / 2
       mov ax, bx         
       mov dx, 0 
       mov cx, 2  
       div cx
       
       ; move result into si for loop
       mov si, ax
       
       ; assume the value is prime
       mov dx, 1
       
       ; start loop at 2
       mov cx, 2
       
       PrimeLoop:
       
           ; compare loop count(in cx) and max loop value (in si)
           cmp cx, si
           
           ; jump out of loop if count(cx) > si
           ja StopLabel
       
           ; divide test value (in bx) by loop count (in cx)
           mov ax, bx
           mov dx, 0            
           div cx
           
           ; check remainder (in dx), if zero then we found a divisor
           ; and the number cannot be prime
           cmp dx, 0
           
           ; if dx = 0 then we found a divisor and can stop looking
           je StopLabel
           
           ; increment count
           add cx, 1
       
       jmp PrimeLoop
       
       StopLabel:
       
       ret
   IsPrime ENDP
   
DEFINE_PRINT_STRING
DEFINE_SCAN_NUM
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS