I have an assignment where I must take input of a number, and figure out all prime numbers up to but not exceeding that number. For example if I entered 9 into the program, it should print 3, 5, and 7.
My plan to determine if a number is prime or not is to divide it by 2 and check if the remainder is 0. If the remainder is 0 the program subtracts 1 from the dividend, and loops back to the top to divide again. If the remainder != 0 it prints it to the screen, and decrements the dividend again. This happens until the dividend is 0. Only this isn't what is happening, for whatever reason whenever I use the DIV instruction I always get floating point exceptions and I can't seem to figure out why or how to solve it. Anyone have any ideas on how I can fix this?
Code: %INCLUDE "csci224.inc"
SEGMENT .data
prompt: DD "Please enter a number: ",0 ; prompt string
message: DD " is prime.", 0 ; displays when n is prime
invalid: DD "Invalid entry.", 0
i: DD 2
SEGMENT .bss
input: RESD 100 ; not really necessary, ignore this
SEGMENT .text
main:
mov edx, prompt
call WriteString
call ReadInt
mov esi, eax ; move eax into esi to use as index for loop
myloop:
xor edx, edx ; clear registers
xor ecx, ecx
xor eax, eax
mov eax, dword 2 ; mov 2 to eax
div ecx ; ecx/eax | n/2
dec esi ; decrement loop counter
dec ecx ; decrement numerator
cmp edx, dword 0 ; is remainder zero?
je myloop ; YES - not prime - jump back to top
mov eax, edx ; NO - move to eax and print
call WriteInt
call Crlf
cmp esi, 0 ; is counter zero?
jz finished ; YES - end loop
jmp myloop ; NO - loop again
finished:
ret