计算机控制系统质数求和,汇编课程设计---求0~100内的素数2

计算机原理与汇编语言

课程设计

题目名称 :求100之内的素数2

姓名:

学号:

专业:计算机科学与技术

班级:

指导老师:

编写日期:24/04/2019

目录

目录html

正文部分 3ios

一. 问题描述 3程序员

1.背景 3编程

2.基本功能要求 4ide

二. 系统设计 4oop

1. 题目的基本内容 4学习

2. 程序流程图 5测试

三. 源代码清单 8优化

四.运行结果测试与分析 13ui

五.结论和心得 22

正文部分

一.问题描述

1.背景

汇编语言不像其余大多数的程序设计语言同样被普遍用于程序设计。在今天的实际应用中,它一般被应用在底层,硬件操做和高要求的程序优化的场合。驱动程序、嵌入式操做系统和实时运行程序都须要汇编语言。汇编语言的另外一个特色就是它所操做的对象不是具体的数据,而是寄存器或者存储器,也就是说它是直接和寄存器和存储器打交道,这也是为何汇编语言的执行速度要比其它语言快,但同时这也使编程更加复杂,由于既然数据是存放在寄存器或存储器中,那么必然就存在着寻址方式,也就是用什么方法找到所须要的数据。例如上面的例子,咱们就不能像高级语言同样直接使用数据,而是先要从相应的寄存器AX、BX 中把数据取出。这也就增长了编程的复杂性,由于在高级语言中寻址这部分工做是由编译系统来完成的,而在汇编语言中是由程序员本身来完成的,这无异增长了编程的复杂程度和程序的可读性。

2.基本功能要求

因为DOS的9号调用输出的是ASCⅡ码,所以咱们在输出到屏幕的时候必定要将其先转换为ASCⅡ码再使用9号调用输出。考虑到ASCⅡ码转化为数字较为麻烦,所以能够定义两个组数据buf、buf1,其中buf用于存放1~99,buf1用于存放1~99的ASCⅡ码。

这段程序运用的两次loop循环分别实现把0~99送到buf、将0~99的ASCⅡ码送到buf1。在循环完毕后,采用dos的9号调用将buf1的数据输出到屏幕上,

完成这段程序后,跳到下一个模块,即删除合数保留素数并显示模块。而后跳转到下一模块。求和,最后到求平均数模块。

二.系统设计

1. 题目的基本内容

设计题目:求100之内的素数

具体要求:(1)求出这些素数。

(2)在屏幕上显示出求素数的动态过程(在屏幕上先显示出100之内的全部数,再动态地删去不符合要求的数,删除的过程要明显)。

(3)计算这些素数的平均值(取整,四舍五入),以十进制形式输出,并让改制以红色显示。

(4)数据的输入和结果的输出都要有必要的提示,且提示独占一行。

(5)要使用子程序。

2. 程序流程图

2.1.显示素数的流程图

显示0~100的流程图

40b75260c67b56e98a60caf0612aeb77.png

删除合数保留素数流程图

72d5040f3eb46196d29ab1809a05a9ef.png

求和流程图

26af7796d446f009e93941492f94ee79.png

求平均数的流程图

d0ce689e22a20be0fcbe9286d51cbe69.png

0ff5fe3a486e77ad8f16def00167e65a.png

三.源代码清单

44d6084b83ba40738be9b40f.html

44d6084b83ba40738be9b40f.html

data segment

input1 db 0ah,0dh,'if you want to quit,please press Q/q!'db 0ah,0dh,'if you want to print 0~99,please press any other key!',0ah,0dh,'$'input2 db 0ah,0dh,'if you want to quit,please press Q/q!'db 0ah,0dh,'if you want to find the prime number ,please press any other key!',0ah,0dh,0ah,0dh,'$'input3 db 0ah,0dh,'if you want to quit,please press Q/q!'db 0ah,0dh,'if you want to get the avreage of the prime numbers ,please press any other key!',0ah,0dh,0ah,0dh,'$'input4 db 0ah,0dh,'the avreage of the prime numbers is:','$'input5 db 0ah,0dh,'press any key to quit!','$'buf db99 dup(?),0 ;用于存0~99buf1 db99 dup(?,?,','),0dh,0ah,'press any key to continue!',0dh,0ah,'$' ;用于放1~99的asc码

buf2 db?,?,0dh,0ah,'$'data ends

code segment

assume ds:data,cs:code

start:

mov ax,data

mov ds,ax

lea dx,input1

mov ah,9;打印字符串input1int21h

;从键盘读一字符但不回显,判断是否要退出

mov ah,08hint21h

cmp al,'Q'jE exit

cmp al,'q'je exit

lea bx,buf;把buf的有效地址给bx

mov ax,0mov al,1mov cx,99loop1: ;buf里面存放0~100mov [bx],al

inc al ;al++inc bx

loop loop1

mov cx,99lea si,buf1 ;

lea bx,buf ;

loop2: ;输出0~100mov ax,0mov al,[bx]

mov dl,10div dl ;ax/dl

;转换成ACSII码

add al,30h ;十位asc码

add ah,30h ;个位asc码

mov [si],al

mov [si+1],ah

add si,3add bx,1;下一个数

loop loop2

lea dx,buf1

mov ah,9

int21h

mov ah,08hint 21h ;显示0~100jmp bb

exit: ;退出

mov ax,4c00hint21h

bb: ;判断是否继续输出寻找素数的过程

lea dx,input2

mov ah,9

int21h

mov ah,08hint21h

cmp al,'Q'jE exit

cmp al,'q'je exit

mov cx,0lea bx,buf

lea si,buf1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

a1:

mov dl,1a2:

and ax,0mov al,[bx+3]

dec al ;al--inc dl ;dl++cmp al,dl

jz a3

inc al

div dl

cmp ah,0jnz a2

mov [si+9],ah

mov [si+10],ah

jmp a4

a3:

inc cx ;控制循环次数

a4:

;输出筛选过程

lea dx,buf1

mov ah,9

int21h

mov ah,08hint21h

add si,3inc bx

mov dl,[bx+3]

cmp dl,0;跳出循环

jnz a1

lea dx,input3 ;输入提示input3(average)

mov ah,9

int21h

mov ah,08hint21h ;输入提示

cmp al,'Q'jE exit

cmp al,'q'je exit

mov di,cx

add di,3;计数送到di

mov cx,99and si,0lea bx,buf1

loop3:

mov al,[bx] ;十位

and ax,00ffh

mov dh,[bx+1] ;个位

cmp al,0jz c1

sub dh,30h

sub al,30h

mov dl,10mul dl

add al,dh

add si,ax

c1: ;求和求平均数

add bx,3loop loop3

lea dx,input4;输出平均值

mov ah,9

int21h

mov ah,08hint21h

mov ax,si ;和送到ax

mov bx,di ;个数送到bx

and bx,00ffh

div bl

inc al

and ax,00ffh

mov bx,10and bx,00ffh

div bl

add al,30h

add ah,30h ;将平均值转化为asc码,al为十位,ah为个位

lea bx,buf2

mov [bx],al

mov [bx+1],ah

mov ah,09mov al,0mov bh,00mov cx,2mov bl,4

int10h

lea dx,buf2

mov ah,9

int21h

mov ah,08hint21h

lea dx,input5

mov ah,9

int21h

mov ah,08hint21h

exit1:

mov ax,4c00hint21h

code ends

end start

View Code

四.运行结果测试与分析

cd58737b14216aef7868ff0147a1ed1d.png

c13962626e363310c092859f1ba16531.png

7449a17df5a004fe6dc7472ab18ff4cc.png

9e22a236d2cbb65c5667b650a4e2cf06.png

b2a7651954f5d2d7cea91559894e0ee5.png

0cbd8981e3e28fee1c3844c66eeb8266.png

五.结论和心得

此次的计算机原理与汇编语言课程设计,求100之内的素数,在数学的学习中,咱们会常常接触到素数这个概念。素数又称质数。指在一个大于1的天然数中,除了1和此整数自身外,不能被其余天然数(不包括0)整除的数。由于合数是由若干个质数相乘而得来的,因此,没有质数就没有合数,因而可知素数在数论中有着很重要的地位。比1大但不是素数的数称为合数。1和0既非素数也非合数。这个学期咱们恰好学了《汇编语言程序设计》这门课,而且初步的了解了汇编语言知识,而且能够编写简单的代码。所以,咱们能够运用汇编语言来编写程序,求取100之内的素数,动态的删除合数,而且以红色的字输出素数的平均值。起初觉得这个课题比较简单,经过查书和资料能够很快作出来,来,结果开始作却发现不是那么回事,发现了不少的问题。

首先,课本上的知识还远远不够,须要我借鉴别人的程序来提高本身对汇编语言的认识以及了解,而且不少复杂难懂的程序还没法读懂。其次,在编写的过程当中,总会有各类各样的问题出现,即便一个小小的标点符号错误也没法将程序运行出来,这就须要咱们的耐心仔细去慢慢的调试而且发现错误在哪里。第三,咱们对于汇编语言的认识还远远不够,一学期的简单学习,应用于编程还很吃力,dos调用、bios调用咱们接触的很是很是少。总之,费了九牛二虎之力,总算是解决此次的课程设计。

此次课程设计给我带来的收获不少。第一,它让我更进一步的了解了汇编语言,并用其来作一些实践性的东西。第二,我在编写和调试程序的时候,也锻炼了个人耐心和细心。第三,此次课程设计也锻炼了我查阅资料的能力。

原文出处:https://www.cnblogs.com/csushl/p/10765063.html

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值