مشکل حل شد ولی نمیدونم چرا دو تا عدد رو از ورودی چرا نمیگیره
include 'emu8086.inc'
;org 100h ; set location counter to 100h
min dw 10
max dw 20
print_new_line macro
mov dl, 13
mov ah, 2
int 21h
mov dl, 10
mov ah, 2
int 21h
endm
mov dx, min
mov ah, 0ah
int 21h ;Input min
mov dx, max
mov ah, 0ah
int 21h ;Input max
print_new_line
jmp CodeStart
DataStart:
space db " ", 0
CodeStart:
mov bx, min
call IsPrime
cmp dx, 0
LoopStart:
;call IsPrime to test if the number is a prime number or not
call IsPrime
;compare to zero
cmp dx, 0
;if equal to zero jump to EndLoop
je EndLoop
;if not equal to zero continue program
; must be a prime
mov ax, bx
call PRINT_NUM
; print a space
mov si, offset space
call print_string
EndLoop:
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