zoukankan      html  css  js  c++  java
  • 【汇编】求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:看看有没有银抄作业/斜眼笑

  • 相关阅读:
    Node.js的Formidable模块的使用
    call 和 apply方法解析
    JavaScript 数组去重方法总结
    Javascript的this用法
    ubuntu虚拟机安装简单pxe服务器
    [LeetCode]Fraction to Recurring Decimal
    [LeetCode]Largest Number
    [LeetCode]Single Number II
    Git & Github使用总结
    vim配置总结
  • 原文地址:https://www.cnblogs.com/guhunjun/p/Prime_numbers.html
Copyright © 2011-2022 走看看