ASM X86 中的 Prime 检查无法按预期工作

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

我正在努力学习 NASM。我正在尝试制作一个简单的程序,如果数字不是素数,则在退出时返回 0,如果是,则返回 1。

但是我做的函数总是返回0,我不明白为什么

    isprime: ;eax = n
        mov ebx, 1 ; ebx = i
        mov ecx, eax
        ;cdq
        primeloop:
            mov eax, ecx
            add ebx, 1
            cdq
            idiv ebx
            cmp edx, 0
            je notprime
            cmp ebx, ecx
            je yesprime
            jl primeloop

        yesprime:
            mov eax, 1
            ret
        notprime:
            mov eax, 0
            ret

这就是我使用该功能的方式:

    mov eax, 347
    call isprime

    mov ebx, eax
    mov eax, 1
    int 0x80 

347 是质数,但是当我运行命令

echo $?
检查返回值时,它始终为 0。此外,当我尝试使用数字“7”时,程序崩溃:
Floating point exception

assembly x86 nasm primes
© www.soinside.com 2019 - 2024. All rights reserved.