汇编子程序设计(n!)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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
指导教师评语:
实验成绩_______________ 指导教师_______________