Я написал программу сборки 8086, которая выполняет следующие действия:
- Получает входные данные от пользователя
- Преобразует его в целое число
- Проверьте, является ли оно простым
Проблема с шагом 3 и имеет ошибку.Он говорит, что 9 - простое число и находится в бесконечном цикле, когда ввод равен 2. Я проверил, и нет проблем с вводом.Я не знаю, в чем проблема.
Код:
MOV AL,NUM
MOV BL,02H ; The Dividing starts from 2, Hence BH is compare to 02H
MOV DX,0000H ; To avoid Divide overflow error
MOV AH,00H ; To avoid Divide overflow error
Цикл для проверки на Prime No
L1:
DIV BL
CMP AH,00H ; Remainder is compared with 00H (AH)
JNE NEXT
INC BH ; BH is incremented if the Number is divisible by current value of BL
NEXT:
CMP BH,02H ; If BH > 02H, There is no need to proceed, It is not a Prime
JE FALSE ; The no is not a Prime No
INC BL ; Increment BL
MOV AX,0000H ; To avoid Divide overflow error
MOV DX,0000H ; To avoid Divide overflow error
MOV AL,NUM ; Move the Default no to AL
CMP BL,NUM ; Run the loop until BL matches Number. I.e, Run loop x no of times, where x is the Number given
JNE L1 ; Jump to check again with incremented value of BL
Печать результатов:
;To display The given no is a Prime No
TRUE:
LEA DX,MSG
MOV AH,09H ; Used to print a string
INT 21H
JMP EXIT
;To display The given no is not a Prime No
FALSE:
LEA DX,NMSG
MOV AH,09H ; Used to print a string
INT 21H
Я думаю, что это происходит только для однозначных чисел.