组装检查范围内的数字是否为质数

问题描述 投票:0回答:1

我正在尝试打印2-100000之间的质数。但是我的代码有问题。当它检测到非质数时,它应该转到下一个,但仍将其打印出来,所以不是2、3、5、7。我得到2 3 4 5 6 7 ...

%include "io64.inc"

section .text
global CMAIN
CMAIN:

    PRINT_DEC 1,2
    NEWLINE

    reset_ebx:
    mov ebx,2
    loop2:
    xor edx,edx
    mov eax,[num]
    div ebx
    inc ebx
    cmp ebx,[num+1]
    je end
    cmp edx,0
    je loop2
    cmp edx,0
    jne prime


    prime:
    PRINT_DEC 8,[num]
    NEWLINE


    end:
    mov eax,[num]
    inc eax  ; 3 - 10000
    mov [num],eax
    cmp eax,10001 
    jne reset_ebx

    xor rax, rax
    ret

    section .data
    num dq 3
    max_ebx dq 0
    const dq 2
assembly x86-64 nasm sasm
1个回答
0
投票

prime不为零时,您将跳转到标签edx,但是由于标签在为零时会紧随此代码,因此计算机将简单地开始执行该标签中的代码。

如果您不触发跳转(显式(例如,使用Jxx指令,或隐式(例如,使用call指令))跳转,则[[Assemblies中的标签与高级语言中的功能或代码块不相似]将简单地以线性方式进行执行。

如果将jne prime切换为je end,则应固定代码。

© www.soinside.com 2019 - 2024. All rights reserved.