我正在尝试打印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
当prime
不为零时,您将跳转到标签edx
,但是由于标签在为零时会紧随此代码,因此计算机将简单地开始执行该标签中的代码。
如果您不触发跳转(显式(例如,使用Jxx
指令,或隐式(例如,使用call
指令))跳转,则[[Assemblies中的标签与高级语言中的功能或代码块不相似]将简单地以线性方式进行执行。
如果将jne prime
切换为je end
,则应固定代码。