code segment;程序功能:输出30个素数
assume cs:code
start:
mov cx,0 ;计数
mov ax,2 ;从2递增,用判断此数是否素数(2是第一个素数)
mov bx,2 ;除数从2开始增递到ax
next:
cmp bx,ax ;判断是否素数
jl continue ;不是素数则跳转到continue加1继续
inc cx ;ax是素数,cx计数加1
call display;显示ax中的结果
cmp cx,30;计数判断
jz exit ;输出结束,跳出循环
jmp nextnum
continue:
xor dx,dx ;字除法,dx要清0
push ax ;保存ax的值到栈中
div bx ;
pop ax ;作除法后,恢复ax的值
inc bx ;被除数递增
cmp dx,0 ;判断能否整除
jnz next ;不能整除则可能是素数,继续除数递增判断余数
nextnum:
inc ax ;能整除则该数不是素数,取下一个数继续进行判断
mov bx,2 ;除数重新赋2
jmp next ;继续
exit:
mov ah,4ch;退出程序返回控制台
int 21h
display proc near;以10进制字符串输出ax中的值并在其后输出一个空格
push ax
push bx
push cx
push dx
xor cx,cx;记录栈中元素
mov bx,10
continue1:;除10取余进栈
xor dx,dx
div bx
push dx
inc dx
inc cx
cmp ax,0
jnz continue1
continue2:;出栈数字加30h转ASCII码输出
pop dx
add dl,30h
mov ah,2
int 21h
loop continue2
mov dl,' ';输出一个空格
mov ah,2
int 21h
pop dx
pop cx
pop bx
pop ax
ret
display endp
code ends
end start