我正在努力学习 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