彙編-判斷素數

判斷條件:
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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章