学生课程实验报告书
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
指导教师评语:
实验成绩_______________ 指导教师_______________。