当前位置:文档之家› 求100以内的素数 微机原理与汇编技术课程设计

求100以内的素数 微机原理与汇编技术课程设计

微机原理与汇编技术课程设计(论文) 求100以内素数(2)院(系)名称专业班级学号学生姓名指导教师起止时间:2015.12.21—2015.12.31课程设计(论文)任务及评语院(系):电子与信息工程学院教研室:计算机科学与技术本科生课程设计(论文)目录第1章前言 (1)1.1背景 (1)1.2基本功能要求 (2)第2章程序设计 (3)2.1题目的基本内容 (3)2.2 程序流程图 (4)2.3课程设计的具体内容说明 (7)2.4课程设计中关键内容的分析设计说明 (8)2.5运行结果 (13)第3章课程设计总结 (16)参考文献 (17)第1章前言1.1背景汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。

在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。

在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。

普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。

许多汇编程序为程序开发、汇编控制、辅助调试提供了额外的支持机制。

有的汇编语言编程工具经常会提供宏,它们也被称为宏汇编器。

汇编语言不像其他大多数的程序设计语言一样被广泛用于程序设计。

在今天的实际应用中,它通常被应用在底层,硬件操作和高要求的程序优化的场合。

驱动程序、嵌入式操作系统和实时运行程序都需要汇编语言。

汇编语言的另一个特点就是它所操作的对象不是具体的数据,而是寄存器或者存储器,也就是说它是直接和寄存器和存储器打交道,这也是为什么汇编语言的执行速度要比其它语言快,但同时这也使编程更加复杂,因为既然数据是存放在寄存器或存储器中,那么必然就存在着寻址方式,也就是用什么方法找到所需要的数据。

例如上面的例子,我们就不能像高级语言一样直接使用数据,而是先要从相应的寄存器AX、BX 中把数据取出。

这也就增加了编程的复杂性,因为在高级语言中寻址这部分工作是由编译系统来完成的,而在汇编语言中是由程序员自己来完成的,这无异增加了编程的复杂程度和程序的可读性。

1.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~99输出到屏幕上。

完成这段程序后,跳到下一个模块,即删除合数保留素数并显示模块。

然后跳转到下一模块。

求和,最后到求平均数模块。

第2章程序设计2.1题目的基本内容设计题目:求100以内的素数具体要求:(1)求出这些素数。

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

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

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

(5)要使用子程序2.2 程序流程图图2.1 显示素数程序流程图图2.2 删除合数保留素数程序流程图图2.3 求和程序流程图图2.4 求平均数程序流程图2.3课程设计的具体内容说明把0~99送到buf、将0~99的ASCⅡ码送到buf1。

在循环完毕后,采用dos的9号调用将buf1的数据输出到屏幕上,即1~99输出到屏幕上。

算法描述:(1)开始,输出素数。

(2)判断是否q退出,不退出则到(3)。

(3)按任意键继续程序。

(4)输出0-100全部数据。

(5)按任意键,每按一次删除一个非素数。

(6)删除完毕,输出平均数。

(7)结束,退出程序。

2.4课程设计中关键内容的分析设计说明程序:data segmentinput1 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 otherkey!',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 anyother 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 primenumbers ,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 db 99 dup(?),0 ;用于存0~99buf1 db 99 dup(?,?,','),0dh,0ah,'press any key to continue!',0dh,0ah,'$' ;用于放1~99 buf2 db ?,?,0dh,0ah,'$'data endscode segmentassume ds:data,cs:codestart:mov ax,datamov ds,axlea dx,input1mov ah,9int 21hmov ah,08hint 21hcmp al,'Q'jE exitje exitlea bx,bufmov ax,0mov al,1mov cx,99loop1: mov [bx],alinc alinc bxloop loop1mov cx,99lea si,buf1lea bx,bufloop2:mov ax,0mov al,[bx]mov dl,10div dladd al,30h ;十位asc码add ah,30h ;个位asc码mov [si],almov [si+1],ahadd si,3add bx,1loop loop2lea dx,buf1mov ah,9int 21hmov ah,08hint 21h ;显示0~100 jmp bbexit:mov ax,4c00hint 21h ;退出bb:lea dx,input2int 21hmov ah,08hint 21hcmp al,'Q'jE exitcmp al,'q'je exitmov cx,0lea bx,buflea si,buf1a1: mov dl,1a2: and ax,0mov al,[bx+3]dec alinc dlcmp al,dljz a3inc aldiv dlcmp ah,0jnz a2mov [si+9],ahmov [si+10],ahjmp a4a3: inc cxa4: lea dx,buf1mov ah,9int 21hmov ah,08hint 21hadd si,3inc bxmov dl,[bx+3]cmp dl,0 ;跳出循环jnz a1lea dx,input3int 21hmov ah,08hint 21h ;输入提示cmp al,'Q'jE exitcmp al,'q'je exitmov di,cxadd di,3 ;计数送到dimov cx,99and si,0lea bx,buf1loop3: mov al,[bx] ;十位and ax,00ffhmov dh,[bx+1] ;个位cmp al,0jz c1sub dh,30hsub al,30hmov dl,10mul dladd al,dhadd si,axc1: add bx,3loop loop3lea dx,input4mov ah,9int 21hmov ah,08hint 21hmov ax,si ;和送到axmov bx,di ;个数送到bxand bx,00ffhdiv bland ax,00ffhmov bx,10and bx,00ffhdiv bladd al,30hadd ah,30h ;将平均值转化为asc码,al为十位,ah为个位lea bx,buf2mov [bx],almov [bx+1],ahmov ah,09·mov al,0mov bh,00mov cx,2mov bl,4int 10hlea dx,buf2mov ah,9int 21hmov ah,08hint 21hlea dx,input5mov ah,9int 21hmov ah,08hint 21hexit1:mov ax,4c00hint 21hcode endsend start2.5运行结果图2.5 初始界面图2.6 显示1~99图2.7 选择是否继续求素数图2.8 动态删除合数保留素数图2.9 选择是否求平均值图2.10 将素数平均值以红色字输出到屏幕第3章课程设计总结这次的微机原理课程设计,求100以内的素数,在数学的学习中,我们会经常接触到素数这个概念。

素数又称质数。

指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数(不包括0)整除的数。

因为合数是由若干个质数相乘而得来的,所以,没有质数就没有合数,由此可见素数在数论中有着很重要的地位。

比1大但不是素数的数称为合数。

1和0既非素数也非合数。

这个学期我们刚好学了《微机原理与接口技术》这门课,并且初步的了解了汇编语言知识,并且可以编写简单的代码。

因此,我们可以运用汇编语言来编写程序,求取100以内的素数,动态的删除合数,并且以红色的字输出素数的平均值。

起初以为这个课题比较简单,通过查书和资料可以很快做出来,结果开始做却发现不是那么回事,发现了很多的问题。

相关主题