1、北 华 航 天 工 业 学 院课程设计报告(论文)设计课题: 计算N的阶乘 专业班级: 学生姓名: 指导教师: 设计时间: 北华航天工业学院电子工程系 微机原理 课程设计任务书姓 名:专 业:电子信息工程班 级:指导教师:职 称:讲师课程设计题目:计算N的阶乘已知技术参数和设计要求:1 N的范围为065535,即不超过一个16位寄存器的容量。2 数值N由键盘输入,结果在屏幕上输出。所需仪器设备:计算机、masm软件成果验收形式:运行结果显示,答辩,设计报告参考文献:微机原理与接口技术8086实验指导书时间安排12月18日:查找资料12月19日:编写程序12月20日:上机调试12月21日:验收答
2、辩指导教师: 刘金梅 2010年12 月 21 日内 容 摘 要本次设计以8086CPU为主板进行,主要计算机系统概述,计算机中数据的表示,运算方法与运算器,控制器,Intel80X86微处理器,存储系统,80X86的寻址方式与指令系统及中断系统。说明说在内容组织上既注重全面性和实用性,又强调系统与新颖性。由浅入深,全面系统地介绍了微型计算机的组成、工作原理、接口电路和典型应用等,使读者监理微型计算机系统的整体念,掌握微型计算机系统软硬件开发的初步方法,了解简单计算机应用系统的工作原理和设计方法。本文是关于微型计算机原理写文件课程设计。编写程序,将内存区域中用调试程序(DEBUG)设置好的一连
3、串数据做为一个文件存入磁盘,文件名为N.ASM。内存区域的段地址和偏移地址在程序中输入随着计算机的高速发展,微型计算机已经应用到各个领域,微型计算机原理应用技术已经成为电子信息的核心产业。微型计算机原理是计算机科学与技术、通讯工程、电气工程、机电工程的核心课程。通过这次课程设计,是我们更好地理解了课程中所学的理论知识,并把实际问题转化为理论知识,学会如何把学到的知识用于解决实际问题,培养我们的动手能力。索引关键词:键盘输入 、 屏幕输出 、 不超过一个16位寄存器的容量目 录一 概 述 5二 设计内容5三 设计目的5 四 设计要求5五 设计思路51编制阶乘程序的难点52算法5六 源程序6七 运
4、行过程111源文件的建立和汇编112目标文件的链接123执行文件的调试12八 N的阶乘流程图12九 实验体会14十 参考文献14 一、概述 本文是关于微型计算机原理写文件课程设计。编写程序,将内存区域中用调试程序(DEBUG)设置好的一连串数据做为一个文件存入磁盘,文件名为N.ASM。内存区域的段地址和偏移地址在程序中输入随着计算机的高速发展,微型计算机已经应用到各个领域,微型计算机原理应用技术已经成为电子信息的核心产业。微型计算机原理是计算机科学与技术、通讯工程、电气工程、机电工程的核心课程。通过这次课程设计,是我们更好地理解了课程中所学的理论知识,并把实际问题转化为理论知识,学会如何把学到
5、的知识用于解决实际问题,培养我们的动手能力。二、设计内容编写计算N!的程序。数值N由键盘输入,结果在屏幕上输出。三、设计目的通过编制一个阶乘计算程序,了解怎样在汇编语言一级上实现高级语言中的数学函数。四、设计要求N的范围为065535,即不超过一个16位寄存器的容量。五、设计思路 1编制阶乘程序的难点 本课程设计的难点在于随着N的增大,其结果远非寄存器所能容纳。这就必须把结果放在一个内存缓冲区中。然而乘法运算只限于两个字相乘,因此要确定好算法,依次从缓冲区中取数,进行两字相乘,并将DX中的高 16位积作为产生的进位。 2算法 阶乘的定义为N!N(Nl)(N2) 2l,从左往右依次计算,结果保存
6、在缓冲区BUF中。缓冲区BUF按结果由低到高依次排列。程序首先将BP初始化为N,N不等干0或1则将N送入BUF缓冲区最低字单元中。然后使BP为Nl,以后BP依次减1,直至变化到1为止。每次让BP与BUF中的字单元按由低到高的次序相乘。低位结果AX仍保存在相应的BUF字单元中。高位结果DX则送到进位字单元CY中,作为高字相乘时从低字来的进位,初始化CY为0。计算结果的长度随着乘积运算而不断增长,由字单元LEN指示,LEN单元初始化为1。当最高字单元与BP相乘时,若DX不为0,则结果长度要扩展。六、源程序内容:计算N阶乘 N!CRLF MACRO;回车,换行 MOV AH, 02H MOV DL,
7、 0DH INT 21H MOV AH, 02H MOV DL, 0AH INT 21H ENDMDATA 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(?)STACKENDSCODE SEGMENTASSUME CS
8、: CODE, DS:DATA, ES:DATA, SS:STACKSTART:MOV AX, DATA MOV DS,AX MOV ES, AX MOV AH, 09H MOV DX,OFFSET MESS1 INT 21H ;显示输入提示信息 CALL GETNUM ;读取键入的N值 MOV BP, DX ;N值送BP CMP BP, 0 JZ EEE CMP BP, 1 JZ EEE ;N=0或N=1则转EEE MOV SI, OFFSET BUF ;缓冲区首址 MOV SI,DX ;缓冲区初始化为值NXXX: DEC BP ;N值减1 CMP BP,0001H JZ LLL ;若为1则
9、转LLL XOR BX,BX ;偏移指针清0 MOV WORD PTR CY,0 ;进位单元清0 MOV CX,LEN ;当前结果长度送CXTTT: MOV AX, SI+BX MUL BP ;相乘 ADD AX,CY ;加低位进位 JNC JJJ ;结果无进位转JJJ INC DX ;有进位将高位单元加1JJJ: MOV SI+BX,AX ;结果送缓冲区中 MOV CY,DX ;高位单元送进位单元 INC BX INC BX ;一个字长度 LOOP TTT ;循环 CMP DX, 0000H JZ BBB ;最后1次的进位为0则转BBB INC WORD PTR LEN ;长度加1 MOV
10、SI+BX,DX ;进位送缓冲区中BBB: JMP XXXEEE: MOV SI,OFFSET BUF MOV WORD PTR SI,1 ;结果为1LLL: MOV AH, 09H MOV DX,OFFSET MESS2 INT 21H ;显示表头 MOV CX,LEN MOV BX,CX ;长度 DEC BX SHL BX,1 ;1个字为两个字节CCC: MOV AX, SI+BX CALL DISP DEC BX DEC BX ;显示结果 LOOP CCC MOV AX,4C00H ;结束 INT 21HDISP1 PROC NEAR ;显示字符(AL) MOV BL, AL MOV DL, BL MOV CL, 04 ROL DL, CL AND DL, 0FH CALL DISPL ;显示高位 MOV DL, BL AND DL, 0FH CALL DISPL ;显示低位 RETDISP1 ENDPDISPL PROC NEAR ;显示一位(DL0XH) AD
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1