北 华 航 天 工 业 学 院
课程设计
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
(论文)
设计课题: 计算N的阶乘
专业班级:
学生姓名:
指导教师:
设计时间: 2010年12月16日
北华航天工业学院电子工程系
微机原理与接口技术 课程设计任务书
姓 名:
专 业:
电子信息工程
班级:
指导教师:
职 称:
完成时间:
2010/12/16
课程设计题目:计算N的阶乘
已知技术参数和设计要求:
1.编写计算N!的程序。数值N由键盘输入,结果在屏幕上输出。
2..通过编制一个阶乘计算程序,了解怎样在汇编语言一级上实现高级语言中的数学函数。
3.N的范围为0-65535,即不超过一个16位寄存器的容量。
所需仪器设备:计算机
成果验收形式:计算机演示,设计报告
参考文献:微机原理与接口技术
8086实验指导书
时间
安排
12月13号编译程序
14号上机操作
15号验收
指导教师: 刘金梅 教研室主任:
2010年 12 月 18 日
内 容 摘 要
本次课程设计编写计算N!的程序。数值N由键盘输入,结果在屏幕上输出,通过编制一个阶乘计算程序,了解怎样在汇编语言一级上实现高级语言中的数学函数。其难点在于随着N的增大,其结果远非寄存器所能容纳。这就必须把结果放在一个内存缓冲区中。然而乘法运算只限于两个字相乘,因此要确定好算法,依次从缓冲区中取数,进行两字相乘,并将DX中的高 16位积作为产生的进位。
索引关键词: N的阶乘 汇编语言 内存缓冲区
目 录
序言————————————————————5
正文————————————————————5
一、程序算法————————————————-—-5
二、源程序—————————————————-—-6
三、程序运行与调试—————————————-—11
四、N的阶乘程序流动图——————————-—-—11
心得体会
决胜全面小康心得体会学党史心得下载党史学习心得下载军训心得免费下载党史学习心得下载
——————————————————13
参考文献——————————————————13
序言
本文是关于微型计算机原理写文件课程设计。编写程序,将内存区域中用调试程序(DEBUG)设置好的一连串数据(以Ctrl+z为结束符)做为一个文件存入磁盘,文件名为DATA.ASM。内存区域的段地址和偏移地址在程序中输入。
随着计算机的高速发展,微型计算机已经应用到各个领域,微型计算机原理应用技术已经成为电子信息的核心产业。
微型计算机原理是计算机科学与技术、通讯工程、电气工程、机电工程的核心课程。
通过这次课程设计,是我们更好地理解了课程中所学的理论知识,并把实际问题转化为理论知识,学会如何把学到的知识用于解决实际问题,培养我们的动手能力。
正文
一、 程序算法
阶乘的定义为N!=N(N-1)(N-2)……2,从左至右依次计算,结果保存在缓冲区BUF中。缓冲区BUF按结果由高到低依次排列。程序首先将BP初始化为N,N不等于0或1则将N送入BUF缓冲区最低字节单元中。然后使BP为N-1,以后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
INC BX ;一个字长度
LOOP TTT ;循环
CMP DX, 0000H
JZ BBB ;最后1次的进位为0则转BBB
INC WORD PTR LEN ;长度加1
MOV [SI+BX],DX ;进位送缓冲区中
BBB: JMP XXX
EEE: MOV SI,OFFSET BUF
MOV WORD PTR [SI],1 ;结果为1
LLL: 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 21H
DISP1 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 ;显示低位
RET
DISP1 ENDP
DISPL PROC NEAR ;显示一位(DL=0XH)
ADD DL, 30H
CMP DL, 3AH
JB DDD
ADD DL, 27H
DDD: MOV AH, 02H
INT 21H
RET
DISPL ENDP
DISP PROC NEAR ;显示4位数(HEX)
PUSH BX
PUSH CX
PUSH DX
PUSH AX
MOV AL, AH
CALL DISP1
POP AX
CALL DISP1
POP DX
POP CX
POP BX
RET
DISP ENDP
GETNUM PROC NEAR ;字符匹配程序
PUSH CX
REGET: XOR DX, DX
GGG: MOV AH, 01H
INT 21H
CMP AL, 0DH