p2p.wrox.com Forums

p2p.wrox.com Forums (http://p2p.wrox.com/index.php)
-   Assembly Language (http://p2p.wrox.com/forumdisplay.php?f=195)
-   -   Prime number program help (http://p2p.wrox.com/showthread.php?t=74548)

daddymac1213 May 24th, 2009 05:22 PM

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


daddymac1213 May 24th, 2009 08:24 PM

Nevermind, I was able to figure out the solution on my own.[:)][:)]

Silvine January 10th, 2010 07:29 AM

Quote:

Originally Posted by daddymac1213 (Post 241732)
Nevermind, I was able to figure out the solution on my own.[:)][:)]

Can you post the solution?


All times are GMT -4. The time now is 09:30 PM.

Powered by vBulletin®
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
© 2013 John Wiley & Sons, Inc.