汇编-判断素数

判断条件:
for(int i = num/2; i>=2; i–)
{
if(num % i == 0) //被整除
//不是素数
}

根据判断条件,有汇编程序:

;功能:求2~100之间的所有素数
;作者:王文堃
;创建时间:2016/4/11

INCLUDE vcIO.inc 
.data
    array DWORD 100 dup(0)
    str_output BYTE "2~100的素数有:",0ah,0
    str_printf BYTE "%3d"
.code
main PROC
    xor esi,esi ;初始化esi为0,记录保存数组下标
    mov ecx, 2 ;ecx为要判断的数

    jmp TESTING ;外层循环
FORLOOP:
    mov ebx, ecx 
    shr ebx,1 ;通过右移一位求要判断的数的一半

    jmp TESTING2 ;内层循环
FORLOOP2:
    mov eax, ecx ;将该数设置为被除数
    mov edx,0 ;清空edx
    div ebx 
    cmp dl,0 ;判断i%j==0
    je NEXT ;如果余数为零,该数不为素数,直接取下一个数
    dec ebx ;否则余数不为零,继续除,直到除到2为止 

TESTING2:
    cmp ebx, 2 ;从该数的一半到2
    jae FORLOOP2

    ;从数的一半除到2都没有能整除的,认为该数为素数
    mov array[esi*4], ecx ;将该数存入数组中
    inc esi

NEXT:
    inc ecx

TESTING:
    cmp ecx,100  ;判断从2~100的数
    jbe FORLOOP





    ;输出
    invoke printf, OFFSET str_output ;输出提示符
    mov edi,0 ;数组下标初始化
    jmp TESTING3 ;输出循环
FORLOOP3:
    pushad
        invoke printf, OFFSET str_printf, array[edi*4] ;输出素数
    popad
    inc edi

TESTING3:
    cmp edi,esi ;从0到esi即素数的个数-1
    jb FORLOOP3 


    ret
main ENDP
    ;子程序
END main
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章