汇编 Eratosthenes输出50000内的素数

这段汇编程序通过创建一个大小为50000的数组并遍历来找出该范围内的素数。程序首先将数组的第一个元素标记为1,然后遍历数组,如果某个元素值为0,则将其视为素数输出,并用当前素数的倍数更新数组中对应位置的值为1,以标记非素数。
摘要由CSDN通过智能技术生成

;主要想法是开一个count(我这里设为50000)大小的数组,数组元素的值(1/0)表示数组下标 index+1 是否为素数。
include io.inc
.model small
.stack
.data
count=50000 ;定义素数的范围
array db count dup(0) ;创建一个大小为count的数组,全部置为0
.code
.startup
mov array[0],1 ;将第一个置为1,1作为一个标志,把非素数对应的元素值标记为1

mov cx,count
mov si,0 ;si可以看作是元素下标,遍历array数组,
L1:
push cx
cmp array[si],1
je L1end ;若si指向的元素值为1,si指针继续往下走

push si ;否则该元素就是素数
push cx

mov dl,20h ;输出空格
mov ah,2
int 21h

mov ax,si
inc ax ;ax=si+1,ax是素数
call dispuiw
pop cx
pop si

mov di,si ;di=si,di往下扫描将si对应元素的倍数对应的位置全部置为1
mov dx,0 ;dx=0
L2:
inc dx ;dx和di一起往下走
inc di
cmp dx,ax ;当dx=ax时,di对应的元素就是si对应元素的倍数
je L3
L4:
cmp di,49999 ;判断di是否扫描到了数组尽头
jb L2

  jmp L1end                        ;内循环结束,继续外循环

  L3:                              ;将array[di]置为1,dx=0,jmp L4 继续往下扫描
  mov array[di],1
  mov dx,0                         
  jmp L4

L1end:
pop cx
inc si
loop L1
.exit
end

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值