计算N的阶乘微机课设.docx
《计算N的阶乘微机课设.docx》由会员分享,可在线阅读,更多相关《计算N的阶乘微机课设.docx(15页珍藏版)》请在冰豆网上搜索。
计算N的阶乘微机课设
北华航天工业学院
课程设计报告(论文)
设计课题:
计算N的阶乘
专业班级:
学生姓名:
指导教师:
设计时间:
2010.12.17
北华航天工业学院电子工程系
微机原理课程设计任务书
姓名:
专业:
电子信息工程
班级:
指导教师:
职称:
讲师
课程设计题目:
计算N的阶乘
已知技术参数和设计要求:
1.N的范围为0-65535,即不超过一个16位寄存器的容量。
2.数值N由键盘输入,结果在屏幕上输出。
所需仪器设备:
计算机、masm软件
成果验收形式:
运行结果显示,答辩,设计报告
参考文献:
微机原理与接口技术
8086实验指导书
时间
安排
12月14日:
查找资料
12月15日:
编写程序
12月16日:
上机调试
12月17日:
验收答辩
指导教师:
教研室主任:
2010年12月17日
注:
本表下发学生一份,指导教师一份,栏目不够时请另附页。
课程设计任务书装订于设计计算说明书(或论文)封面之后,目录页之前。
内容摘要
本次设计以8086CPU为主板进行,主要计算机系统概述,计算机中数据的表示,运算方法与运算器,控制器,Intel80X86微处理器,存储系统,80X86的寻址方式与指令系统及中断系统。
说明说在内容组织上既注重全面性和实用性,又强调系统与新颖性。
由浅入深,全面系统地介绍了微型计算机的组成、工作原理、接口电路和典型应用等,使读者监理微型计算机系统的整体念,掌握微型计算机系统软硬件开发的初步方法,了解简单计算机应用系统的工作原理和设计方法。
本文是关于微型计算机原理写文件课程设计。
编写程序,将内存区域中用调试程序(DEBUG)设置好的一连串数据做为一个文件存入磁盘,文件名为N.ASM。
内存区域的段地址和偏移地址在程序中输入
随着计算机的高速发展,微型计算机已经应用到各个领域,微型计算机原理应用技术已经成为电子信息的核心产业。
微型计算机原理是计算机科学与技术、通讯工程、电气工程、机电工程的核心课程。
通过这次课程设计,是我们更好地理解了课程中所学的理论知识,并把实际问题转化为理论知识,学会如何把学到的知识用于解决实际问题,培养我们的动手能力。
索引关键词:
键盘输入、屏幕输出、不超过一个16位寄存器的容量
一概述…………………………………………………………………4
二设计内容……………………………………………………………………4
三设计目的……………………………………………………………………4
四设计要求……………………………………………………………………4
五设计思路……………………………………………………………………4
1.编制阶乘程序的难点………………………………………………………4
2.算法…………………………………………………………………………4
六源程序………………………………………………………………………5
七运行过程……………………………………………………………………10
1.源文件的建立和汇编………………………………………………………10
2.目标文件的链接……………………………………………………………11
3.执行文件的调试……………………………………………………………11
八N的阶乘流程图……………………………………………………………12
九实验体会……………………………………………………………………13
十参考文献……………………………………………………………………13
一、概述
本文是关于微型计算机原理写文件课程设计。
编写程序,将内存区域中用调试程序(DEBUG)设置好的一连串数据做为一个文件存入磁盘,文件名为N.ASM。
内存区域的段地址和偏移地址在程序中输入
随着计算机的高速发展,微型计算机已经应用到各个领域,微型计算机原理应用技术已经成为电子信息的核心产业。
微型计算机原理是计算机科学与技术、通讯工程、电气工程、机电工程的核心课程。
通过这次课程设计,是我们更好地理解了课程中所学的理论知识,并把实际问题转化为理论知识,学会如何把学到的知识用于解决实际问题,培养我们的动手能力。
二、设计内容
编写计算N!
的程序。
数值N由键盘输入,结果在屏幕上输出。
三、设计目的
通过编制一个阶乘计算程序,了解怎样在汇编语言一级上实现高级语言中的数学函数。
四、设计要求
N的范围为0-65535,即不超过一个16位寄存器的容量。
五、设计思路
1.编制阶乘程序的难点
本课程设计的难点在于随着N的增大,其结果远非寄存器所能容纳。
这就必须把结果放在一个内存缓冲区中。
然而乘法运算只限于两个字相乘,因此要确定好算法,依次从缓冲区中取数,进行两字相乘,并将DX中的高16位积作为产生的进位。
2.算法
阶乘的定义为N!
=N×(N-l)×(N-2)×…×2×l,从左往右依次计算,结果保存在缓冲区BUF中。
缓冲区BUF按结果由低到高依次排列。
程序首先将BP初始化为N,N不等干0或1则将N送入BUF缓冲区最低字单元中。
然后使BP为N-l,以后BP依次减1,直至变化到1为止。
每次让BP与BUF中的字单元按由低到高的次序相乘。
低位结果AX仍保存在相应的BUF字单元中。
高位结果DX则送到进位字单元CY中,作为高字相乘时从低字来的进位,初始化CY为0。
计算结果的长度随着乘积运算而不断增长,由字单元LEN指示,LEN单元初始化为1。
当最高字单元与BP相乘时,若DX不为0,则结果长度要扩展。
六、源程序
内容:
计算N阶乘N!
CRLFMACRO;回车,换行
MOVAH,02H
MOVDL,0DH
INT21H
MOVAH,02H
MOVDL,0AH
INT21H
ENDM
DATASEGMENT
MESS1DB'INPUTTHENUMBERACCORDINGTOHEXNUM!
',0DH,0AH,'$'
MESS2DB'THERESULTIS:
$'
ERRORDB'INPUTERROR!
INPUTONCEMORE!
',0DH,0AH,'$'
LENDW1
CYDW?
BUFDW256DUP(0)
DATAENDS
STACKSEGMENTSTACK'STACK'
DW32DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVAH,09H
MOVDX,OFFSETMESS1
INT21H;显示输入提示信息
CALLGETNUM;读取键入的N值
MOVBP,DX;N值送BP
CMPBP,0
JZEEE
CMPBP,1
JZEEE;N=0或N=1则转EEE
MOVSI,OFFSETBUF;缓冲区首址
MOV[SI],DX;缓冲区初始化为值N
XXX:
DECBP;N值减1
CMPBP,0001H
JZLLL;若为1则转LLL
XORBX,BX;偏移指针清0
MOVWORDPTRCY,0;进位单元清0
MOVCX,LEN;当前结果长度送CX
TTT:
MOVAX,[SI+BX]
MULBP;相乘
ADDAX,CY;加低位进位
JNCJJJ;结果无进位转JJJ
INCDX;有进位将高位单元加1
JJJ:
MOV[SI+BX],AX;结果送缓冲区中
MOVCY,DX;高位单元送进位单元
INCBX
INCBX;一个字长度
LOOPTTT;循环
CMPDX,0000H
JZBBB;最后1次的进位为0则转BBB
INCWORDPTRLEN;长度加1
MOV[SI+BX],DX;进位送缓冲区中
BBB:
JMPXXX
EEE:
MOVSI,OFFSETBUF
MOVWORDPTR[SI],1;结果为1
LLL:
MOVAH,09H
MOVDX,OFFSETMESS2
INT21H;显示表头
MOVCX,LEN
MOVBX,CX;长度
DECBX
SHLBX,1;1个字为两个字节
CCC:
MOVAX,[SI+BX]
CALLDISP
DECBX
DECBX;显示结果
LOOPCCC
MOVAX,4C00H;结束
INT21H
DISP1PROCNEAR;显示字符(AL)
MOVBL,AL
MOVDL,BL
MOVCL,04
ROLDL,CL
ANDDL,0FH
CALLDISPL;显示高位
MOVDL,BL
ANDDL,0FH
CALLDISPL;显示低位
RET
DISP1ENDP
DISPLPROCNEAR;显示一位(DL=0XH)
ADDDL,30H
CMPDL,3AH
JBDDD
ADDDL,27H
DDD:
MOVAH,02H
INT21H
RET
DISPLENDP
DISPPROCNEAR;显示4位数(HEX)
PUSHBX
PUSHCX
PUSHDX
PUSHAX
MOVAL,AH
CALLDISP1
POPAX
CALLDISP1
POPDX
POPCX
POPBX
RET
DISPENDP
GETNUMPROCNEAR;字符匹配程序
PUSHCX
REGET:
XORDX,DX
GGG:
MOVAH,01H
INT21H
CMPAL,0DH
JZPPP
CMPAL,20H
JZPPP
SUBAL,30H
JBKKK
CMPAL,0AH
JBGETS
CMPAL,11H
JBKKK
SUBAL,07H
CMPAL,0FH
JBEGETS
CMPAL,2AH
JBKKK
CMPAL,2FH
JAKKK
SUBAL,20H
GETS:
MOVCL,04H
SHLDX,CL
XORAH,AH
ADDDX,AX
JMPGGG
KKK:
CRLF
MOVAH,09H
MOVDX,OFFSETERROR
INT21H
JMPREGET
PPP:
PUSHDX
CRLF
POPDX
POPCX
RET
GETNUMENDP
CODEENDS
ENDSTART
七、运行过程
1.源文件的建立和汇编
2.目标文件的链接
3.执行文件的调试
八、N的阶乘流程图
九、实验体会
任何一个计算机系统都是一个复杂的整体,学习计算机原理是要涉及到整体的每一部分。
讨论某一部分原理时又要涉及到其它部分的工作原理。
这样一来,不仅不能在短时间内较深入理解计算机的工作原理,而且也很难孤立地理解某一部分的工作原理。
所以,在循序渐进的课堂教学过程中,我总是处于“学会了一些新知识,弄清了一些原来保留的问题,又出现了一些新问题”的循环中,直到课程结束时,才把保留的问题基本搞清楚。
这次实验并不是很难,主要的困难来自对程序的理解。
功夫不负有心人,经过个人的不懈努力,我最后对实验的原理有了清晰的认识。
作为一门计算机语言的汇编语言,以前一直都很难理解,平时也喜欢得过且过,所以对程序理解不是很透彻,在最开始的时候也遇到不少问题,的确书看得比较少啊!
后来通过查阅资料和书本,总算写出了一点东西,不过通过这次课设让我对程序的的编写和阅读都有了更深的理解。
经过这次课程设计,让我对前面的路有了更多的信心,因为在这个过程中,我学到了不少实用的东西,对于一些专业基础课有了更深层次的掌握,并且提高了动手能力和独立解决问题的能力。
这是一次理论联系实际的课程设计,既让我掌握了理论知识,又锻炼了动手能力。
十、参考文献
《微型计算机原理与接口技术》,张荣标编,机械工业出版社,2005年
《8086微型计算机组成、原理及接口》,顾滨,机械工业出版社,2001
《微型计算机原理及应用》,吕淑萍等,哈尔滨工程大学出版社,2004年
电子工程系微机原理课程设计成绩评定表
专业:
电子信息工程班级:
学号:
姓名:
课题名称
计算N的阶乘
设计任务与要求
设计任务:
编写计算N!
的程序。
数值N由键盘输入,结果在屏幕上输出。
设计要求:
N的范围为0-65535,即不超过一个16位寄存器的容量。
指导教师评语
建议成绩:
指导教师:
课程小组评定
评定成绩:
课程负责人:
年月日