实验:递归计算N!
张钰琪 9**********
;
!程序;
。
!程序1,流程图
FACT子程序
主程序
保存BP内容,建立帧首地址
接过地址入栈
保存寄存器内容
结果地址入栈
取结果地址
结果地址入栈
取N
返回
N=0?
结果地址入栈
N-1入栈
调用FACT,求N-1
取(N-1)!
N!=N*(N-1)!
N!存入结果单元
恢复寄存器内容
返回
N!源程序
STACKSG SEGMENT STACK 'S' ;定义堆栈
DW 128 DUP('ST')
STACKSG ENDS
DATA SEGMENT
N_VAL DW 4 ;定义N值
RESULT DW ? ;结果
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACKSG
FRAME STRUC ;定义帧结构
SAV_BP DW ? ;保存BP值
SAV_CS_IP DW 2 DUP(?) ;保存返回地址
N DW ? ;当前N值
RESULT_ADDR DW ? ;结果地址
FRAME ENDS
MAIN PROC FAR
MOV AX,DATA
MOV DS,AX
LEA BX,RESULT
PUSH BX ;结果地址入栈
PUSH N_VAL ;N值入栈
CALL FAR PTR FACT ;调用递归子程序
MOV CL,10
MOV AX,RESULT
DIV CL
;把阶乘结果转换成十进制数
OR AX,3030H ;转换成ASCII码
MOV DL,AL
MOV AH,2 ;显示结果的高位
INT 21H
MOV AX,RESULT
DIV CL
; 把阶乘结果转换成十进制数
OR AX,3030H ;转换成ASCII码
MOV DL,AH
MOV AH,2 ;显示结果的低位
INT 21H
R1: MOV AX,4C00H
INT 21H
MAIN ENDP
FACT PROC FAR ;N!递归子程序
PUSH BP ;保存BP值
MOV BP,SP ;BP指向帧基地址
PUSH BX
PUSH AX
MOV BX,[BP].RESULT_ADDR
MOV AX
汇编子程序设计阶乘 来自淘豆网m.daumloan.com转载请标明出处.