汇编-判断素数

判断条件:
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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值