汇编子程序设计(n!)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学生课程实验报告书

2014--2015学年第1学期

实验项目:子程序设计(n!)

实验时间: 2014-10-30

实验原理:

在一个程序中如果其中有些内容完全相同或相似,为了简化程序,可以把这些重复的程序段单独列出,并按一定的格式编写成子程序。用递归方式求出n!。

实验仪器:

Emu8086编译器

实验步骤(纸张不够写可另外加纸并应装订):

DATA SEGMENT

NUM DW 5

FNUM DW ?

DATA ENDS

STACKS SEGMENT

DW 100 DUP(?)

STACKS ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

BEGIN: MOV AX,DATA

MOV DS,AX ;将数据段基值装入DS

MOV AX,NUM ;取N

PUSH AX ;利用堆栈传递参数

CALL FAC ;调用递归子程序

POP FNUM ;送结果

MOV AX,4C00H ;返回DOS

INT 21H

FAC PROC

PUSH AX ;保存调用参数

PUSH BP ;保存每帧的帧地址(偏移量)

MOV BP,SP ;当前帧地址(栈顶地址)送BP寄存器 MOV AX,[BP+6];取参数N

CMP AX,0 ;N = 0 ?

JNZ FACSUB ;N≠0,继续递归调用

INC AX ;若N=0,则0!=1

JMP EXIT ;由递归调用过程转递次返回过程FACSUB: DEC AX ;N-1送AX

PUSH AX ;保护各次调用参数

CALL FAC ;递归调用

POP AX ;从堆栈中弹出每次压入的参数

MUL WORD PTR [BP+6];计算各参数的乘积EXIT: MOV [BP+6],AX ;保存中间结果和最后结果

MOV DX,AX

POP BP ;恢复BP内容

POP AX ;恢复AX内容

RET ;返回所调用程序

FAC ENDP

CODE ENDS

END BEGIN

指导教师评语:

实验成绩_______________ 指导教师_______________

相关文档
最新文档