我在nasm程序中实现,可以检测提供的素数。
xor rax,rax;
mov eax, 6 ;
mov ecx, 1 ;
loop:
cmp ecx, 6
jbe end_loop ; ecx >= bufor
xor edx ,edx ;
mov eax, 6
div ecx ; div dla edi
cmp edx, 0
je not_prime
inc ecx ; i++
jmp loop_for
这是一种简单的算法,可以检查天气6是素数但是失败了。它检查edx
注册表中的div提醒。它始终在end_loop
上退出(但它应该以{{1}})指令结束,所以程序说6是素数,但事实并非如此。有人可以建议我如何解决它吗?我不知道。
答案 0 :(得分:3)
此代码不正确:
mov ecx, 1 ;
loop:
cmp ecx, 6
jbe end_loop ; ecx >= bufor
jbe
表示jump if below or equal
。所以你在这里做的基本上是:
ecx = 1;
do {
if (ecx <= 6) goto end_loop;
显然1是&lt; = 6,因此它将在循环的第一次迭代时始终跳转到end_loop
。
该跳跃可能应该是jae
。
另一个问题是,您从ecx = 1
开始,因为ecx
似乎是您的除数。如果你要检查素性,你应该尝试除以的第一个数字是2,而不是1。