Thread: Prime number program help View Single Post
May 24th, 2009, 05:22 PM
 daddymac1213 Registered User Join Date: May 2009 Posts: 2 Thanks: 0 Thanked 0 Times in 0 Posts
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

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

jmp PrimeLoop

StopLabel:

ret
IsPrime ENDP

DEFINE_PRINT_STRING
DEFINE_SCAN_NUM
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS```