Assembly 在汇编中打印素数

Assembly 在汇编中打印素数,assembly,printing,x86,primes,Assembly,Printing,X86,Primes,我试图在汇编中打印1-100之间的素数,但我的代码不仅打印出额外的数字,而且还排除了一些素数 以下是我的主要程序: mov min, 1 loopStart: inc min ; min++ mov eax, min cmp eax, max ; compare 2 and 100 je next ; jump unless 2 < 100 call isPrim

我试图在汇编中打印1-100之间的素数,但我的代码不仅打印出额外的数字,而且还排除了一些素数

以下是我的主要程序:

mov min, 1

loopStart:
  inc min                    ; min++
  mov eax, min
  cmp eax, max               ; compare 2 and 100
  je  next                   ; jump unless 2 < 100

  call isPrime               ; check if prime
  cmp ecx, 0
  jne loopStart 
push eax
  call printPrime            ; print the prime numbers
pop eax
  jmp loopStart

  next:                      ; once max is 100

  push 0                          
  call ExitProcess
mov最小值,1
循环启动:
股份有限公司;闵++
mov-eax,min
cmp-eax,max;比较2和100
下一步;除非2小于100,否则跳转
称为isPrime;检查是否为素数
cmp-ecx,0
jne loopStart
推送eax
调用printPrime;打印素数
波普eax
jmp循环启动
下一个:;一旦最大值为100
推0
呼叫退出过程
我的iPrime是:

mov prime, 0                 ; set as true
mov ecx, prime                  
mov k, 2                     ; reset k 

mov edx, 0                   ; clear edx
div num                      ; n/2
mov edx, 0                   ; clear edx again

start:
cmp ecx, 0                   ; while prime
jne E                        ; if prime isnt true

cmp eax, k                   ; k<=n/2
jl E

mov eax, min
div k
cmp edx, 0                   ; check for remainder
jne kAdd

mov prime, 1                 ; set as false
jmp E

kAdd:
inc k
jmp start

E:
mov ecx, prime
mov eax, min

ret
isPrime endp
mov素数,0;设为真
mov-ecx,prime
mov-k,2;重置k
mov-edx,0;清除edx
div num;n/2
mov-edx,0;再次清除edx
开始:
cmp-ecx,0;在黄金时期
jne;如果素数不是真的

cmp-eax,k;k您没有在
isPrime
中的循环内正确重置
EDX
。也就是说,在
divk
之前,您需要放置
mov-edx,0
xor-edx,edx

另外,我不确定函数(?)开头的
divnum
中的
num
来自哪里。注释中说你被2除,那么你的意思是
divk

你的程序中有一些不必要的代码。就像这张支票:

cmp ecx, 0                   ; while prime
jne E                        ; if prime isnt true

如果您查看代码的其余部分,应该可以清楚地看到,
ECX
在该点上的值永远不会超过零。

当您在k=k+1处增加k时,您忘记了清除edx

到目前为止您做了哪些调试?您是否尝试过在调试器中单步执行它,以查看当它报告不正确的素数时发生了什么?