微机原理课程设计报告计算N的阶乘
计算机硬件课程设计——计算N!的程序

目录一、设计题目 (2)二、开发目的 (2)三、设计方案以及论证 (2)四、程序流程图 (2)五、程序清单 (5)六、程序运行结果分析与预测 (9)七、总结 (9)参考文献 (9)一、设计题目编写计算N!的程序(数值N由键盘输入,结果在屏幕上输出。
N的范围为0-65535,即刚好能被一个16位寄存器容纳)。
二、开发目的随着科技的发展数学中的问题解决方案有多种多样,计算机的发展给人们在数学中无法用手工计算的问题得以解决,这次我们开发一道程序实现一个最大数可达到十六位的二进制数的阶乘。
三、设计方案以及论证对于N!,如果单纯的N计算阶乘,N值在一个很小的范围内计算起来是很简单,在计算机中也很好实现,但是当N值达到一定的数值就要考虑计算结果对于一个16为二进制的寄存器或存储器是否能够容纳。
若果不能容纳该怎么实现。
怎么样才能将这么一个大的数据存储起来就是此次实验重点讨论的问题,一般的在汇编语言中只能实现两个数相乘,当计算N!时是指N个数相乘,这样我们就要先两个数相乘,再将乘积存储在缓存中再与下一个数相乘,乘积再继续存储在缓存中,随着乘数的增多缓存的位数也不断增大,这样利用缓存就将一个很大的数存储起来。
四、程序流程图图一程序的主流程图①.根据题目要求将主流程图规划出如图一所示,首先是先定义各个基本段(数据段、堆栈段、代码段),之后是输入N值,这里调用INPUT_N子程序将要计算的N值输入并将输入的N值赋给BP,判断BP是否为1或0即是判断输入的N值是否为1或0,如果输入值为0或1,由于0或1的阶乘为1所以直接调用JGXS子程序显示结果1.若判断N值不为1或0将缓冲区初始化为N,而BP的值自减1这时判断BP是否为1,若为1则显示缓冲区的计算结果,若不为1将缓冲区的值与BP相乘,乘积存储在缓冲区中,然后循环,BP值自减1并重新判断BP的值是否为1,反复循环直到BP的值为1,最终将计算结果存储在缓冲区中,最后将缓冲区中的数据显示出来,N!计算结束。
微机原理实验报告---汇编语言n的阶乘

微机原理实验报告-------颜色的排列组合方式院系:自动化班级:学号:姓名:日期:成绩:1.题目在实际中,有红黄蓝绿等7种颜色,按照排列组合方式,分别计算出有多少种排列方式?如果减少一种颜色,又有多少中排列呢?2.题目分析题目中给去n种(n=7)颜色,要求我们计算可能出现的组合种数,这是数学中常见的排列组合问题。
题目的意思是指的传统的排列组合,不许有重复颜色的,否则与生活习惯就不符合了。
这个咱们就熟悉了,对于n种颜色,应该有nA种排列方式。
我们知道,nnA在数值上就是n的阶乘,现在程序的对象成为求阶乘了。
n对于阶乘,我的思路是利用循环,设计一个累加变量兼被乘数x,用n来作为结束判断,当x>n时,累乘循环结束,现在就得到了相应的种类数。
但是内存中的数值是以16进制存放的,还需要一步进制转换才能进行显示。
我的算法是:开辟5个空间的变量result1存放个位数字,给bx赋值10,(※)把dx清零,用{dx,ax}除以bx,得到的余数放在dx中,就是个位数的十进制表示,在转放到result1的第一个地址中。
此时商数存在ax中,再重复(※)之后的内容,直到全部转化完。
显示的算法是十进制数字加上30h,变为ASCII码,利用INT 21H中断循环显示各位数字。
程序还给阅读者提供了选择权,允许读者进行输入,当读者输入一个数据n(n<=7)时,程序会根据输入,显示出相应的运算结果,这样当给定的样色种类变化时,就不用对程序本身进行更改了,可谓更加方便灵活。
3.程序框图4.程序编写CRLF MACRO ;定义回车换行的宏MOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21HENDMSTACK SEGMENT STACK ;初始定义DW 100 DUP(?)STACK ENDSDATA SEGMENTSTRING DB 'ENTER SORT OF COLOUR: ','$' ;输入提示字符串RESULT1 DB 5 DUP(0) ;用来存储结果的各位数字DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV DX,OFFSET STRINGMOV AH,9INT 21HMOV AH,1 ;输入样色的种类INT 21HSUB AH,AHSUB AL,30HMOV CX,AX ;颜色的种类用来控制循环CRLFMOV AX,1MOV BX,1LP:MUL BXINC BXLOOP LPLEA DI,RESULT1 ;LP循环求阶乘MOV BX,10MOV CX,4LOOP1:DIV BXMOV [DI],DL ;LOOP1将16进制转为10进制INC DISUB DX,DXLOOP LOOP1DEC DIMOV CX,4DISPLAY: ;DISPLAY用来显示10进制的各位数字ADD BYTE PTR[DI],30HMOV DL,[DI]MOV AH,2INT 21HDEC DILOOP DISPLAYMOV AX,4C00HINT 21HCODE ENDSEND START5.运行结果6. 结果讨论排列中数是颜色种类n的阶乘,比较5种6种和7种的数值可发现,120,720和5450相差很大。
计算机原理课程设计阶乘

计算机原理课程设计阶乘一、课程目标知识目标:1. 学生能理解阶乘的概念,掌握计算阶乘的基本方法。
2. 学生能了解计算机中循环结构的应用,理解递归算法在计算阶乘中的实现过程。
3. 学生掌握计算机程序设计中阶乘相关问题的解决方法。
技能目标:1. 学生能运用所学知识编写计算阶乘的程序,具备一定的编程实践能力。
2. 学生能通过分析、设计、调试程序,提高问题解决能力和逻辑思维能力。
3. 学生能够运用递归思想优化计算阶乘的算法,提高编程技巧。
情感态度价值观目标:1. 学生对计算机科学产生兴趣,树立探究精神和创新意识。
2. 学生通过团队协作解决问题,培养沟通能力和团队精神。
3. 学生在解决问题的过程中,形成严谨、细致、负责的学习态度。
课程性质:本课程为计算机原理课程设计,旨在让学生通过实际操作,掌握计算阶乘的基本原理和方法,提高编程实践能力。
学生特点:本课程针对的是高年级学生,他们已经具备了一定的计算机编程基础,具有较强的逻辑思维能力和问题解决能力。
教学要求:课程要求学生在理解阶乘概念的基础上,学会编写计算阶乘的程序,并能对算法进行优化。
同时,注重培养学生的团队协作能力和创新精神。
通过本课程的学习,使学生能够将所学知识应用于实际问题中,提高综合运用能力。
二、教学内容1. 阶乘概念及其性质- 阶乘定义- 阶乘的数学性质2. 计算阶乘的方法- 递推法- 递归法- 循环法3. 计算机程序设计中的阶乘实现- 编程语言的选择- 阶乘程序设计- 程序调试与优化4. 阶乘应用案例- 阶乘在数学问题中的应用- 阶乘在计算机科学中的应用5. 教学案例分析与讨论- 案例展示- 案例分析与讨论- 团队协作解决问题教学内容安排与进度:第一课时:阶乘概念及其性质,学习阶乘定义和数学性质。
第二课时:计算阶乘的方法,学习递推法、递归法和循环法。
第三课时:计算机程序设计中的阶乘实现,进行编程实践和程序调试。
第四课时:阶乘应用案例,探讨阶乘在数学和计算机科学中的应用。
输入正整数n,计算n的阶乘c++实验报告

输⼊正整数n,计算n的阶乘c++实验报告实验五⼀、实验内容1、掌握3种循环结构:while,do-while,for的区别与联系,以及他们之间相互转换的⽅法,并能正确使⽤他们.2,掌握与循环语句相关的break语句和continue语句的使⽤⽅法.⼆、实验⽬的1、掌握3种循环结构:while,do-while,for的区别与联系,以及他们之间相互转换的⽅法,并能正确使⽤他们.2,掌握与循环语句相关的break语句和continue语句的使⽤⽅法.三、实验步骤实践教程例题11.输⼊正整数n,计算n的阶乘.2.实践教程例2输⼊若⼲字符,统计其中数字字符.⽩字符和其它字符的个数,输⼊EOF结束.3、实践教程例3N个⼈围坐成⼀圈,从1开始顺序编号;游戏开始,从第⼀个⼈开始由1到m循环报数,报到m的⼈退出圈外,问最后留下的那个⼈原来的序号。
4`书2.3设计程序将输⼊的百分制成绩转换为五分制输出,90分以上为5分,80~89为4分,70~79为3分,60~69为两分,60分以下为1分。
书2.5编译打印如下图形** * ** * * * ** * * * * * ** * ** * ** * *4、书2.7 输⼊n,求1!+2!+3!+…+n!。
四、实验数据及处理结果实践教程例1#includeusing namespace std;int main (){double result=0;cout<<"请输⼊正整数:"<cin>>n;if(n<1){cout<<"输⼊错误!"<return 1;}result=1;for(i=2;i<=n;i++)result*=i;cout<return 0;}实践教程例2#includeusing namespace std;int main(){int c;int nWhite,nOther,nDigit;nWhite=nOther=nDigit=0;c=cin.get();while(c!=EOF){switch(c){case'0':case'1':case'2':case'3':case'4': case'5':case'6':case'7':case'8':case'9': nDigit++;break;case' ':case'\n':case'\t':nWhite++;break;default:nOther++;break;}}cout<<"digits="<<'\t'<cout<<"White space="<<'\t'<cout<<"Other Chars="<<'\t'<return 0;}实践教程例3#includeusing namespace std;int main(){const int n=4;const int m=2;char jose[n];int i,j=0,k;for(i=0;ifor(k=n;k>=1;k--){i=0;while(i!=m){if(jose[j]==1){i++;if(i==m){jose[j]=0;}}}j=(j+1)/n;}cout<<"The one left at last is "<<(j-1)< return 0;}书2.3#includeusing namespace std;int mark,result;cout<<"??ê?è?°ù·3é?¨:"<cin>>mark;if(mark<0){cout<<"è±??"<return 0;}switch(mark/10){case 9:case 10:result =5;cout<<"ê?3·3é?¨£o"<break;case 8:result=4;cout<<"ê?3·3é?¨:"<break;case 7:result=3;cout<<"ê?3·3é?¨:"<break;case 6:result=2;cout<<"ê?3·3é?¨:"<break;case 5:case 4:case 3:case 2:case 1:case 0: result=0;cout<<"ê?3·3é?¨:"<break;default:cout<<"ê?è?′í?ó!"<}return 0;}#includeusing namespace std;int main(){int i,j;for(i=1;i<=4;i++){for(j=4-i;j>0;j--)cout<<" ";for(j=1;j<=2*i-1;j++)cout<<"*";cout<< endl;}for(i=1;i<=3;i++)cout<<" ***\n";return 0;}书2.7#includeusing namespace std;int main(){int n,i,jch=1;double result=0;cout<<"请输⼊正整数n:"<cin>>n;if(n<1){cout<<"输⼊错误!"<return 1;}result=1;for(i=2;i<=n;i++){jch*=i;result+=jch;}cout<return 0;五、思考讨论题或体会或对改进实验的建议什么时候需要使⽤,怎样正确的使⽤?。
微机原理 8以内的阶乘

汇编语言实验报告键盘输入求8以内数的阶乘班级10级机械实验班组员李超1001500321王茜1001510303时间 2012年11月6日组员签字一、实验目的1、掌握运用汇编语言编写程序,熟悉各指令的含义及用法2、熟练运用debug跟踪程序运行的进程3、学习使用汇编语言实现数学函数二、实验设备计算机(64位)三、实验内容编写程序:从键盘输入n(n<8)的值,实现n!,并将结果保存到result字单元中四、程序清单1、程序流程图2、程序代码data segmentstr1 db 'Please input the value of n:','$' ;定义显示字符串n dw ?result dw 2 dup (0) ;定义输入数n和结果保存单元result data endsstack segment stack 'stack'db 100 dup('s')stack endscode segment para 'code'assume cs:code,ds:data,ss:stacksta proc farpush dsxor ax,axpush axmov ax,datamov ds,axlea dx,str1mov ah,9hint 21h ;显示字符串调用指令mov ah,1hint 21h ;键盘输入调用指令sub al,30hcbw ;将n转码并拓展至AX寄存器mov n,axxor ax,axmov bx,offset n ;将n的偏移地址送至BX寄存器xor cx,cxmov cx,[bx] ;将n的值作为循环执行次数mov ax,1cmp cx,0jz la ;判断n是否为0 co: mul cxloop co ;循环执行段la: mov result,ax ;计算结果由AX寄存器送到result retcode endsend sta五、实验结果及分析1、实验结果示例n=0时计算n!=0001Hn=5时计算n!=0078Hn=7时计算n!=13B0H2、运行过程初始状态及语言指令输入值5判断5不为0,进入循环循环结束,赋值给result字单元六、实验体会计算机系统是一个十分复杂的整体,汇编语言作为一种较为低级的语言构成了我们现在看到的这个计算机系统。
微机课设报告(计算N的阶乘)

目录一、实验要求.......................... . (3)二、实验内容 (3)三、实验思路 (3)四、实验过程 (5)五、实验总结 (12)一、实验要求实验目的(1)、堆栈传递参数的子程序调用方法。
(2)、序递归调用方法。
(3)、伪指令:PROC,ENDP,NEAR和FAR。
(4)、指令:CALL,RET,RET n。
(5)、T指令推出EXE文件的方法。
(6)、了解怎样在汇编语言一级上实现高级语言中的数学函数。
二、实验内容1、实验内容计算N!:编写计算N阶乘的程序,数值N由键盘输入,N的值要在0到65536之间(用一个16位的字表示),结果在显示器上显示。
2、实验步骤(1)、打开开始菜单,单击运行,在对话框中输入“cmd”,进入dos窗口。
(2)、输入cd\masm5 回车,在输入edit 回车,进入汇编窗口。
(3)、输入代码。
(4)、保存代码,后缀名为.asm。
(5)、回到dos窗口,输入masm文件名保存位置,文件名回车。
(6)、调试程序,根据提示回到汇编窗口,对代码进行修改,直至出现no error及no warrings。
三、实验思路、1、算法阶乘的定义为N!=N*(N-1)*(N-2)*……2*1,从走往右翼此计算,解雇保留在缓冲区BUF中。
缓冲区BUF按由低到高依次排列。
程序首先将BP初始为N,N 不等于0获1则将N送入BUF缓冲区最低自单元中。
然后使BP一次减1,直至变化到1为止。
每次让BP与BUF的字单元按照由低到高的次序香橙。
低位结果AX仍保存在相应的BUF自单元中,高位结果DX泽送到进位子单元CY 中,作为高字香橙时从低字来的进位,初始化CY为0。
计算结果的长度随着成绩运算而不断增长,由字单元LEN指示,LEN单元初始化为1。
当最高字单元与BP香橙时,若DX不为0,则结果长度要扩展。
2、流程图四、实验过程1、源程序CRLF MACRO ;回车,换行MOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDATA SEGMENTMESS1 DB 'INPUT THE NUMBER ACCORDING TO HEXNUM!',0DH,0AH,'$' MESS2 DB 'THE RESULT IS:$'ERROR DB 'INPUT ERROR!INPUT ONCE MORE!',0DH,0AH,'$'LEN DW 1CY DW ?BUF DW 256 DUP(0)DATA ENDSSTACK SEGMENT STACK 'STACK'DW 32 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV AH,09HMOV DX,OFFSET MESS1INT 21H ;显示输入提示信息CALL GETNUM ;读取键入的N值MOV BP,DX ;N值送BPCMP BP,0JZ EEECMP BP,1JZ EEE ;N=0或N=1则转EEEMOV SI,OFFSET BUF ;缓冲区首址MOV [SI],DXXXX: DEC BP ;N值减1CMP BP,0001HJZ LLL ;若为1则转LLLXOR BX,BX ;偏移指针清0MOV WORD PTR CY,0 ;进位单元清0MOV CX,LEN ;当前结果长度送CXTTT: MOV AX,[SI+BX]MUL BP ;相乘ADD AX,CY ;加低位进位JNC JJJ ;结果无进位转JJJINC DX ;有进位将高位单元加1 JJJ: MOV [SI+BX],AX ;结果送缓冲区中MOV CY,DX ;高位单元送进位单元INC BXINC BX ;一个字长度LOOP TTT ;循环CMP DX,0000HJZ BBB ;最后一次的进位为0则转BBB INC WORD PTR LEN ;长度加1MOV [SI+BX],DX ;进位送缓冲区中BBB: JMP XXXEEE: MOV SI,OFFSET BUFMOV WORD PTR b[SI],1 ;结果为1LLL: MOV AH,09HMOV DX,OFFSET MESS2INT 21H ;显示表头MOV CX,LENMOV BX,CX ;长度DEC BXSHL BX,1 ;一个字为两个字节CCC: MOV AX,[SI+BX]CALL DISPDEC BXDEC BX ;显示结果LOOP CCCMOV AX,4C00H ;结束INT 21HDISP1 PROC NEAR ;显示字符(AL)MOV BL,ALMOV DL,BLMOV CL,04ROL DL,CLAND DL,0FHCALL DISPL ;显示高位MOV DL,BLAND DL,0FHCALL DISPL ;显示低位RETDISP1 ENDPDISPL PROC NEAR ;显示一位(DL=0XH)CMP DL,3AHJB DDDADD DL,27HDDD: MOV AH,02HINT 21HRETDISPL ENDPDISP PROC NEAR ;显示4位数(HEC) PUSH BXPUSH CXPUSH DXPUSH AXMOV AL,AHCALL DISP1POP AXCALL DISP1POP DXPOP CXPOP BXRETDISP ENDPGETNUM PROC NEAR ;字符匹配程序PUSH CXREGET:XOR DX,DXGGG: MOV AH,01HINT 21HCMP AL,0DHJZ PPPCMP AL,20HJZ PPPSUB AL,30HJB KKKCMP AL,0AHJB GETSCMP AL,11HJB KKKSUB AL,07HCMP AL,0FHJBE GETSCMP AL,2AHJB KKKCMP AL,2FHJA KKKGETS: MOV CL,04HSHL DX,CLXOR AH,AHADD DX,AXJMP GGGKKK: CRLFMOV AH,09HMOV DX,0FFSET ERROR INT 21HJMP REGETPPP: PUSH DXCRLFPOP DXPOP CXRETGETNUM ENDPCODE ENDSEND START2、测试结果输入程序把程序都输入进去后,进行调试,直至出现0个错误和0个警告!调试完程序之后,输入LINK,对程序进行编译。
微机原理课程设计 求阶成运算程序

一.引言微机原理和应用技术是我们电子类专业重要的基础专业课之一,要求有较强的自学能力和分析问题解决问题的能力以及实际动手能力。
其作用是为了培养学生善于用计算机作为工具。
实践性环节的主要内容为微机常用接口芯片应用的综合性设计,通过设计掌握汇编语言的编程、调试,常用接口芯片的使用方法,初步了解微机应用系统的开发过程及设计原则。
与其他课程不同的是,该课程设计对硬件有很高的依赖性。
因此,课程设计的灵活性受到一定的限制,必须有相应的实验平台支持。
1.1课程设计的必要性长期以来,注重书本知识,轻视实际动手能力是我们学习中普遍存在的现象。
进行课程设计的目的就是要改变这种状况,使我们既具有完备的理论知识,也能够解决在实际学习、生活工作中遇到的问题。
我们应该能够把学到的理论知识用到实际中去,将知识转变为实际的生产力,同时通过这些理论知识和实际的应用推动理论和实践的发展。
课程设计能够把课本中分布学习的知识,在设计中综合加以应用,进而得到巩固、加深和发展。
同时,我们通过学习查找、运用设计资料,完成工程设计所必备的基本训练。
通过课程设计,能够对所学的知识有更进一步的理解,并能掌握学习理论时没有注意的细节。
在实际工作中,只要有一个环节没有做好,整个体系都不能正常运行。
调试程序、排除故障有助于提高分析问题、解决问题的能力。
课程设计中碰到的挫折,有助于养成良好的学习习惯、严谨的工作作风。
1.2课程设计的目标一般来讲,课程设计比教学实验复杂一些,涉及的深度更广并更加接近实用。
目的是通过课程设计的综合训练,培养我们实际分析问题、编程和动手能力,最终帮助我们系统掌握该门课程的主要内容,更好的完成学习任务。
二.实验设计2.1实验内容:计算该数据的阶乘。
要求屏幕有提示信息和相应结果。
2.2实验流程图:YES2.3实验分析由于本实验计算的十以内的阶乘,所以求阶乘不是一个难点,难点在于如何将结果输出显示在屏幕上。
求阶乘可以采用递增法,从2开始依次乘到N,如N 等于AL 中的数值则跳出循环。
n的阶乘的公式

n的阶乘的公式n的阶乘是指从1乘到n的连续整数相乘的结果,通常用符号n!表示。
在数学中,n的阶乘是一个非常重要的概念,它在组合数学、概率论、微积分等领域都有广泛的应用。
本文将介绍n的阶乘的公式及其应用。
首先,我们来看n的阶乘的公式。
n的阶乘可以用递归或迭代的方式来计算。
递归的公式如下:n! = n * (n-1)!其中,n!表示n的阶乘,n-1!表示n-1的阶乘。
这个公式的意思是,n的阶乘等于n乘以n-1的阶乘。
递归的终止条件是n=0或n=1,此时n的阶乘为1。
另一种计算n的阶乘的方法是迭代。
迭代的公式如下:n! = 1 * 2 * 3 * ... * n这个公式的意思是,n的阶乘等于从1到n的连续整数相乘的结果。
迭代的过程中,我们从1开始,每次乘以下一个整数,直到乘到n为止。
n的阶乘的公式在实际应用中有很多用途。
首先,它在组合数学中被广泛使用。
组合数学研究的是集合的组合和排列问题,而n的阶乘正是用来计算排列的数量。
例如,如果有n个物体,要从中选取k个进行排列,那么排列的数量就是n的阶乘除以(n-k)的阶乘。
这个公式在排列组合问题的解决中起到了重要的作用。
其次,n的阶乘的公式在概率论中也有应用。
在概率论中,我们经常需要计算事件的可能性。
如果有n个事件,每个事件发生的概率相等且互不影响,那么这n个事件同时发生的概率就是它们各自发生概率的乘积。
而n的阶乘正好可以用来计算这个乘积。
例如,如果有6个骰子,每个骰子的点数是1到6之间的整数,那么同时掷出6个骰子,出现某个特定的点数的概率就是(1/6)^6,其中1/6是每个骰子出现特定点数的概率。
最后,n的阶乘的公式在微积分中也有应用。
在微积分中,我们经常需要计算函数的导数和积分。
而n的阶乘可以用来表示多项式函数的导数和积分。
例如,如果有一个多项式函数f(x) = a_n * x^n + a_(n-1) * x^(n-1) + ... + a_1 * x + a_0,其中a_i是常数,那么f(x)的n次导数就可以表示为f^(n)(x) = n! * a_n,其中f^(n)(x)表示f(x)的n次导数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
科技学院课程设计报告( 2012—2013 年度第一学期)课程:微机原理及应用题目:计算N的阶乘院系:动力工程系班级:学号:学生姓名:指导教师:设计周数:一周成绩:日期:2013年1 月11 日《微机原理及应用》课程设计任务书一、目的与要求1.通过对微机系统分析和具体设计,使学生加深对所学课程的理解。
2.掌握汇编语言程序设计的基本方法和典型接口电路的基本设计方法。
3.培养学生分析问题、解决问题的能力。
4.培养学生对微型计算机应用系统的基本设计能力。
5.提高学生的实践动手能力和创新能力。
二、主要内容设计题目:计算N的阶乘。
数值N由键盘输入,N的范围为0~65535,结果在屏幕上显示。
1.针对所选择的设计题目进行硬件设计,合理选用所需元器件,绘制系统结构框图、硬件接线图,并在实验系统上完成电路的连接和调试。
2.根据所选题目的要求对微机系统进行程序设计,绘制程序总体流程图并编写源程序上机调试。
3.写出课程设计报告,对整个设计过程进行归纳和综合,对设计中所存在的问题和不足进行分析和总结,提出解决的方法、措施、建议和对这次设计实践的认识和收获。
三、进度计划四、设计成果要求1.系统硬件设计合理,软件编程达到设计要求。
2.系统硬件结构图和软件流程图绘制清楚规范。
3.设计报告完整规范。
五、考核方式根据设计任务的完成情况、课程设计报告撰写情况及演示答辩情况采用五级记分制评定成绩。
学生姓名:指导教师:一、课程设计目的与要求1.通过对微机系统分析和具体设计,使学生加深对所学课程的理解。
2.掌握汇编语言程序设计的基本方法和典型接口电路的基本设计方法。
3.培养学生分析问题、解决问题的能力。
4.培养学生对微型计算机应用系统的基本设计能力。
5.提高学生的实践动手能力和创新能力二、课程设计正文1.程序正文CRLF MACROMOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDM ;回车换行DATA SEGMENTMESS1 DB ‘INPUT THE NUMBER ACCORDING TO HEXNUM!’,0DH,0AH, ‘$’ MESS2 DB ‘THE RESULT IS:’,0DH,0AH, ‘$’ERROR DB ‘INPUT ERROR!’,0DH,0AH, ‘$’LEN DW 1CYY DW ?BUF DW 256 DUP (0)DATA ENDSSTACK SEGMENTSTA DW 32 DUP (?)TOP DW ?STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV SP,TOPMOV AH,09HMOV DX,OFFSET MESS1INT 21H ;显示输入提示信息CALL GETNUM ;读取键入的N值MOV BP,DX ;N值送BPCMP BP,0JZ EEECMP BP,1JZ EEE ;N=0或N=1则转EEEMOV SI,OFFSET BUF ;缓冲区首址MOV [SI],DX ;缓冲区初始化为值NXXX: DEC BP ;N值减1CMP BP,0001HJZ LLL ;若为1则转LLLXOR BX,BX ;偏移指针清0MOV WORD PTR [CYY],0 ;进位单元请0MOV CX,[LEN] ;当前结果长度送CXTTT: MOV AX,[SI+BX]MUL BP ;相乘ADD AX,[CYY] ;加低位进位JNC JJJ ;结果元进位转JJJINC DX ;有进位将高位单元加1JJJ: MOV [SI+BX],AX ;结果送缓冲区中MOV [CYY],DX ;高位送进位单元INC BXINC BX ;1个字长度LOOP TTT ;循环CMP DX,0000HJZ BBB ;最后1次的进位为0则转BBBINC WORD PTR [LEN] ;长度加1MOV [SI+BX],DX ;进位送缓冲区中BBB: JMP XXXEEE: MOV SI,OFFSET BUFMOV WORD PTR [SI],1 ;结果为1LLL: MOV AH,09HMOV DX,OFFSET MESS2INT 21H ;显示表头MOV CX,[LEN]MOV BX,CX ;长度DEC BXSHL BX,1 ;1个字为2个字节CCC: MOV AX,[SI+BX]CALL DISPDEC BXDEC BX ;显示结果LOOP CCCMOV AX,4C00H ;结束INT 21HDISPP PROC NEARMOV BL,ALMOV DL,BLMOV CL,04ROL DL,CLAND DL,0FHCALL DISPLMOV DL,BLAND DL,0FHCALL DISPLRETDISPP ENDPDISPL PROC NEARADD DL,30HCMP DL,3AHJB DDDADD DL,27HDDD: MOV AH,02HINT 21HRETDISPL ENDPDISP PROC NEAR ;显示子程序,按十六进制数方式显示AX中的数PUSH BXPUSH CXPUSH DXPUSH AX ;入栈保存MOV AL,AHCALL DISPP ;显示高字节POP AXCALL DISPP ;显示低字节POP DXPOP CXPOP BXRETDISP ENDPGETNUM PROC NEARPUSH CXXOR DX,DXGGG: MOV AH,01HINT 21H ;读取键入字行的ASCⅡ码送ALCMP AL,0DHJZ PPPCMP AL,20HJZ PPP ;是回车键或空格键则转PPPSUB AL,30HJB KKK ;非字符转KKKCMP AL,0AHJB GETS ;在‘0~9’间转GETSCMP AL,11HJB KKK ;非字符转KKKSUB AL,07HCMP AL,0FHJBE GETS ;在‘A~F’间转GETSCMP AL,2AHJB KKKCMP AL,2FHJA KKK ;不在‘a~f’间转KKKSUB AL,20H ;‘a~f’的ASCⅡ码值→16进制数GETS: MOV CL,04SHL DX,CLXOR AH,AHADD DX,AX ;将本次键入的数字加进DX中JMP GGG ;接受下一个键入的数字KKK: MOV AH,09HMOV DX,OFFSET ERRORINT 21H ;显示输入出错信息PPP: PUSH DXCRLF ;回车换行POP DXPOP CXRETGETNUM ENDPCODE ENDSEND START2.程序框图计算N!的流程三、课程设计总结1、程序运行中的问题及解决方案在进行编程调试运行后,以输入5为例结果为0078H,但是运行DOS中显示的为007800,后面多显示为2个0,错误!返回DOS后,点击窗口——DOS,显示的为正常结果!2、心得体会此次课程设计我们收获颇多。
课程设计开始时我们要从各个方面上把握这个课题。
只有这样才能设计出合理的,全面的设计思路与方案,并且能较好反映着一个实际问题,并把课程设计理论与现实实际相联系起来,以达到该设计思路的适应性和本质性,最终达到素质化教育的要求。
通过三人的团队协作主动解决自己学科内的关键问题,这有助于提高我们的思维素质拓展的综合能力,并能本质上加强团队协作意识,是未来社会对我们大学生的硬性要求。
也是我们每个大学生必须具备的一项基本素质,能够提高我们透过现象看本质的基本技能和一定的创新思维能力。
课程设计中个人的力量是不及群体的力量的,我们三个人分工合作,做事的效率高了很多。
虽然有时候会为了一些细节争论不休,但最后得出的总是最好的结论。
而且课程设计也教会我们在团队中要善于与人相处,与人共事,不要一个人解决所有问题。
总之,这次课程设计对于我们有很大的帮助,通过课程设计,我更加深入地理解了微机原理课程上讲到的知识,同时加深了对于程序编写的认识,同时在自己编程时熟悉了汇编程序的编写过程和运行过程,最后还提高了自己的动手能力。
感谢老师的悉心指导。
四、参考文献[1]马平、姚万业、王炳谦编著《微机原理及应用》中国电力出版社2003年4月[2]戴梅萼、史嘉权编著《微型机原理与技术(习题、实验和综合训练习题集)》清华大学出版社第二版2009年4月[3]余春喧、施远征、左国玉编著《80X86微机原理与接口技术——习题解答与实验指导》机械工业出版社2008年3月[4]陆红伟编著《微机原理实验与课程设计指导书》中国电力出版社2006年8月。