在nasm中查找素数

时间:2014-03-18 23:10:58

标签: assembly nasm

我在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是素数,但事实并非如此。有人可以建议我如何解决它吗?我不知道。

1 个答案:

答案 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。