汇编语言 递归程序计算N!
DSEG SEGMENT
N DW 5 ;compute N!
RESULT DW ?
DSEG ENDS
SSEG SEGMENT
DW 128 DUP(0)
TOS LABEL WORD
SSEG ENDS
CSEG SEGMENT
MAIN PROC FAR
ASSUME CS:CSEG,DS:DSEG,SS:SSEG
START1:
MOV AX,SSEG
MOV SS,AX
MOV SP,OFFSET TOS
MOV AX,DSEG
MOV DS,AX
MOV BX,N
PUSH BX
CALL FACT
POP RESULT
MOV AH,4CH
INT 21H
MAIN ENDP
FACT PROC NEAR
PUSH AX
PUSH BP
MOV BP,SP
MOV AX,[BP+6]
CMP AX,0
JNE FACT1
INC AX
JMP EXIT
FACT1:
DEC AX
PUSH AX
CALL FACT ;递归调用
POP AX
MUL WORD PTR [BP+6]
EXIT:
MOV [BP+6],AX
POP BP
POP AX
RET
FACT ENDP
CSEG ENDS
END MAIN