Linux 素数中的逻辑错误
我不熟悉汇编语言。我已经编写了一个程序,用于获取输入,然后显示数字是否为素数 这是我的源代码Linux 素数中的逻辑错误,linux,assembly,x86,Linux,Assembly,X86,我不熟悉汇编语言。我已经编写了一个程序,用于获取输入,然后显示数字是否为素数 这是我的源代码 .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 pr
.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不是素数
我正在使用英特尔x86架构,并在Ubuntu上开发它
编辑1:根据,我已将ecx寄存器初始化为1,然后将ecx递增为1,以便它从2开始循环
但问题是当我输入9时,它显示9是素数。我不知道我的逻辑出了什么问题
编辑2:我将我的号码存储在eax中,然后将其除以ecx,最后检查edx寄存器中的reaminder是否为零
谢谢。首先除以1。偶数素数可以被1整除。你从除以1开始。即使是素数也可以被1整除。我已经用 在我的逻辑中,我将数字除以给定的数字,例如,如果我输入15,逻辑将数字除以15,但对于素数,我们必须除以数字-1,即(15-1) 这是我更新的循环块
1: inc ecx
mov eax,ebx
Div ecx
cmp edx,r
je 2f
mov edx,0
mov eax,ebx
Sub eax,1
cmp ecx,eax
jl 1b
我已经用计算机解决了我的问题 在我的逻辑中,我将数字除以给定的数字,例如,如果我输入15,逻辑将数字除以15,但对于素数,我们必须除以数字-1,即(15-1) 这是我更新的循环块
1: inc ecx
mov eax,ebx
Div ecx
cmp edx,r
je 2f
mov edx,0
mov eax,ebx
Sub eax,1
cmp ecx,eax
jl 1b
在你的
Div ecx
之前,这个mov ebx,eax有什么意义?如果你需要任何calarification,请告诉我。你的第一个分区不是被1除掉吗?在你的Div ecx
之前,这个mov ebx,eax有什么意义?如果你需要任何calarification,请告诉我。你的第一个分区不是被1除掉吗?哦,有时候我真的很笨。我将在明天的大学里尝试一下。我已经尝试了你的建议,并从2月2日开始使用ecx。但当我输入9或者说21时,它表明这个数字是素数。你能帮我解释一下逻辑吗?哦,我有时候真的很笨。我将在明天的大学里尝试一下。我已经尝试了你的建议,并从2月2日开始使用ecx。但当我输入9或者说21时,它表明这个数字是素数。你能帮我解释一下逻辑吗?你只需要检查小于等于sqrt(n)
的除数。有关避免实际执行sqrt或乘法、在(n/c>c)
时循环的好技巧,请参阅。i、 e.将商(与余数一起)与除数进行比较作为循环条件。您只需检查小于等于sqrt(n)
的除数。有关避免实际执行sqrt或乘法、在(n/c>c)
时循环的好技巧,请参阅。i、 将商(与余数一起)与除数进行比较,作为循环条件。