计算N地阶乘2(微型计算机原理与接口技术)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档