hey all, I'm just starting out with assembly in college and I wrote a program for an assignment to calculate prime numbers, and it works, however if you comment out the line in the code, it gives out this list of numbers:
3 is prime 5 is prime 7 is prime 11 is prime 13 is prime 17 is prime 25 is prime 29 is prime 43 is prime
which is (obviously) wrong. I have no idea why!
.386 .model flat,stdcall option casemap:none INCLUDE \masm32\include\windows.inc INCLUDE \masm32\include\kernel32.inc INCLUDE \masm32\include\msvcrt.inc INCLUDE \masm32\include\masm32.inc INCLUDE \masm32\macros\macros.asm INCLUDELIB \masm32\lib\kernel32.lib INCLUDELIB \masm32\lib\msvcrt.lib INCLUDELIB \masm32\lib\masm32.lib ;.const .data max WORD 50 counter WORD 1 scounter BYTE 1 .code start: mov counter, 3 ; start number counter at 3 mov scounter, 3 cnt: mov bl, 1;start divisor at 1 again: ; I don't know why, but the program print chr$(13,13) ; gets the wrong answers unless this line ; is here. I was using 13,10 for new line, ; but it doesn't seem to matter as long as ; print is called add bl, 2 cmp bl, scounter jge itsprime mov al, scounter div bl cmp ah, 0 je done mov al, scounter cmp bl, al jl again itsprime: mov ax, counter INVOKE crt_printf, chr$("%d is prime"), ax, bx print chr$(13,10) done: mov ax, counter cmp ax, max jge finished add counter, 2 add scounter, 2 jmp cnt finished: INVOKE ExitProcess, 0 end start