Я новичок в ассемблере. Я написал программу для ввода и отображения, является ли число простым или нет.
Вот мой исходный код.
.intel_syntax noprefix
.include "console.i"
.data
Num: .long 0
.text
ask: .asciz "Enter a +ve number : "
ansp: .asciz " is prime."
ans: .asciz " is not prime."
_entry:
Prompt ask
GetInt Num
mov eax,Num # store Number in eax
#mov ecx,0 # Reset ecx to 0
mov ecx,0 # Reset ecx t0 2 for dividing.
cdq
1: inc ecx # increment ecx
mov ebx,eax #backup eax
Div ecx #Divide eax by ecx
cmp edx,0 #if remainder is zero num is not prime
je 2f
mov edx,0 #reset edx to 0
mov eax,ebx #reset eax to Num
cmp eax,ecx if ecx is less than number.
jl 1b
#Prime
PutInt Num
Prompt ansp
jmp 3f
2: #Not Prime
PutInt Num
Prompt ans
3: PutEol
ret
.global _entry
.end
Когда я запускаю программу, она всегда показывает, что это не простое число.
Например, если я введу 7, отобразится 7 не простое .
Я использую архитектуру Intel x86 и разрабатываю ее в Ubuntu.
Редактировать 1: Согласно Даррон , я инициализировал регистр ecx до 1, а затем увеличил ecx до 1, чтобы запустить цикл с 2.
Но проблема в том, что когда я ввожу 9, это показывает, что 9 простое число. Я не знаю, что не так с моей логикой.
Редактировать 2: Я сохраняю свой номер в eax, а затем делю его на ecx и, наконец, проверяю, равен ли ноль в регистре edx.
Спасибо.