【汇编】求100以内的素数asm

求100以内的素数(微机原理大作业)

一、问题描述

求 100 以内的素数。

(1)以十进制输出这些素数
(2)统计这些素数的个数,以十进制形式输出。
(3)计算这些素数之和,以十进制形式输出。
(4)数据的输入和结果的输出都要有必要的提示,且提示独占一行。
(5)要使用到子程序。

二、问题分析

1.什么是素数?

在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

2.100以内的素数怎么求?

双层循环嵌套

3.求个数及和

其他高级语言算法

public static void main(String[] args) {
    int and=0;
    int num=0;
    for(int i=2;i<100;i++){
        int j=2;
        for(;j<i;j++){
            if(i%j==0){
                break;
            }
        }
        if(i==j){
            and+=i;
            num++;
            //输出
            System.out.print(i+" ");
        }
    }
    //输出
    System.out.print("
and:"+and);
    System.out.println("	num:"+num);
}

运行截图:

img

4.十进制转换

int var1=1060
int a[4]
int i=0
do
a[i]=var1%10
var1=var1/10
if(var1==0)break
while(true)

三、源程序代码清单

data segment
	text0 DB 'Prime numbers within 100 are:',0DH,0AH,'$'
	text1 DB 0DH,0AH,'Number of prime numbers within 100:',0DH,0AH,'$'
	text2 DB 0DH,0AH,'Sum of prime numbers within 100:',0DH,0AH,'$'
	num DB 0
	plus dw 0
	var1 DB 0,4 dup(0)
data ends
assume cs:code,ds:data
code segment
start:
;;;(开始);;;;;;;;;;一定得加这两句
mov ax,data
mov ds,ax
;;;(结束);;;;;;;;;;一定得加这两句
mov dx,OFFSET text0
MOV AH,9H
INT 21H		;输出提示text0
;mov num,0
;mov plus,0
mov cx,99
aa1:		;第一层循环
	mov ax,101
	sub ax,cx
	push cx
	call demo1	;判断ax是否为素数
	pop cx
loop aa1
;;;(开始);;;;;;;;;;输出提示text
mov dx,offset text1
mov ah,9
int 21h
mov dl,num
mov dh,0
call demo2
mov dx,offset text2
mov ah,9
int 21h
mov dx,plus
call demo2
;;;(开始);;;;;;;;;;输出提示text
mov ax,4c00h
int 21h

demo1 proc	;判断ax是否为素数
mov cx,ax	;ax=2,
dec cx		;自减指令,cx=1
aa2:		;第二层循环
	push ax
	div cl			;ax%cl=ah
	cmp ah,0
	pop ax
	je aa2end		;if(i%j==0)break
loop aa2
aa2end:
cmp cx,1
jne demo1end
inc num		;自增
mov ah,0
add plus,ax
mov dx,ax
call demo2		;输出多位数
demo1end:
ret
demo1 endp

demo2 proc	;输出多位数
push dx

;mov dx,1060
mov ax,dx
mov dx,0
;mov var1,0
again:
mov bx,10
div bx
inc var1[0]
mov bl,var1
mov bh,0
mov var1[bx],dl
mov dx,0
cmp ax,0
jne again
again1:
mov bl,var1
mov bh,0
mov dl,var1[bx]
add dl,30h
mov ah,2
int 21h

dec var1
mov al,var1
cmp al,0
jne again1
mov dl,9H		;制表符
mov ah,2
int 21h

pop dx
ret
demo2 endp

code ends
end start

四、运行结果与分析

img

五、心得体会

1.1060使用div时注意数值类型为word

用div bx;dxax/bx->ax,dxax%bx->dx

2.一定不能漏了这两句,不然输出内容前面会好多乱码

mov ax,data

mov ds,ax

3.汉字提示输出会乱码

ps:看看有没有银抄作业/斜眼笑

原文地址:https://www.cnblogs.com/guhunjun/p/Prime_numbers.html