计算N地阶乘2(微型计算机原理与接口技术)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北华航天工业学院
课程设计报告(论文)
设计课题:计算N的阶乘
专业班级:
学生姓名:
指导教师:
设计时间:
北华航天工业学院电子工程系
微机原理课程设计任务书
指导教师:刘金梅
2010年12 月 21 日
内容摘要
本次设计以8086CPU为主板进行,主要计算机系统概述,计算机中数据的表示,运算方法与运算器,控制器,Intel80X86微处理器,存储系统,80X86的寻址方式与指令系统及中断系统。说明说在内容组织上既注重全面性和实用性,又强调系统与新颖性。由浅入深,全面系统地介绍了微型计算机的组成、工作原理、接口电路和典型应用等,使读者监理微型计算机系统的整体念,掌握微型计算机系统软硬件开发的初步方法,了解简单计算机应用系统的工作原理和设计方法。
本文是关于微型计算机原理写文件课程设计。编写程序,将内存区域中用调试程序(DEBUG)设置好的一连串数据做为一个文件存入磁盘,文件名为N.ASM。内存区域的段地址和偏移地址在程序中输入
随着计算机的高速发展,微型计算机已经应用到各个领域,微型计算机原理应用技术已经成为电子信息的核心产业。
微型计算机原理是计算机科学与技术、通讯工程、电气工程、机电工程的核心课程。
通过这次课程设计,是我们更好地理解了课程中所学的理论知识,并把实际问题转化为理论知识,学会如何把学到的知识用于解决实际问题,培养我们的动手能力。
索引关键词:键盘输入、屏幕输出、不超过一个16位寄存器的容量
目录
一概述 (5)
二设计内容 (5)
三设计目的 (5)
四设计要求 (5)
五设计思路 (5)
1.编制阶乘程序的难点 (5)
2.算法 (5)
六源程序 (6)
七运行过程 (11)
1.源文件的建立和汇编 (11)
2.目标文件的链接 (12)
3.执行文件的调试 (12)
八 N的阶乘流程图 (12)
九实验体会 (14)
十参考文献 (14)
一、概述
本文是关于微型计算机原理写文件课程设计。编写程序,将内存区域中用调试程序(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!
CRLF MACRO ;回车,换行
MOV AH, 02H
MOV DL, 0DH
INT 21H
MOV AH, 02H
MOV DL, 0AH
INT 21H
ENDM
DATA SEGMENT
MESS1 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 1
CY DW ?
BUF DW 256 DUP(0)
DATA ENDS
STACK SEGMENT STACK 'STACK'
DW 32 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS: CODE, DS:DATA, ES:DATA, SS:STACK
START: 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 ;缓冲区初始化为值N XXX: DEC BP ;N值减1
CMP BP,0001H
JZ LLL ;若为1则转LLL
XOR BX,BX ;偏移指针清0
MOV WORD PTR CY,0 ;进位单元清0
MOV CX,LEN ;当前结果长度送CX
TTT: MOV AX, [SI+BX]
MUL BP ;相乘
ADD AX,CY ;加低位进位
JNC JJJ ;结果无进位转JJJ
INC DX ;有进位将高位单元加1 JJJ: MOV [SI+BX],AX ;结果送缓冲区中
MOV CY,DX ;高位单元送进位单元
INC BX