assembly - 装配检查范围内的数字是否为素数
问题描述
我正在尝试打印 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
指令或隐式如使用 a call
),计算机将简单地以线性方式继续执行时尚。
如果你切换jne prime
到je end
你的代码应该是固定的。
推荐阅读
- c++ - 确定实例是子类还是基类
- asp.net-core-2.0 - 有没有办法在.net核心的OnModelCreating中的表中使用order by子句
- ruby-on-rails - Rails Google Oauth - Works for some users and not others
- python - 比较组内的行,熊猫
- google-docs-api - 无效的 ReplaceNamedRangeContent 请求
- bash - :- 在 Bash 中的冗余使用?
- python - 有没有一种pythonic方法可以从列表或numpy数组中采样N个连续元素
- linux - bash: ./shelllab2.sh: 没有这样的文件或目录
- parallel-processing - 推力::减少的总和值不正确
- python - jupyter lab 没有像文档中那样在 CMD 中的 jupyter-lab 上打开