求递归N!=?
用递归调用的方式求N!
STACK SEGMENT STACK
DW 128 DUP(0)
TOP LABEL WORD
STACK ENDS
DATA SEGMENT
RESULT DW 0
N DW 5
OUTPU DB 'N!='
BUF DB 5 DUP(?), 0DH,0AH, '$'
CONT DW 10000,1000,100,10,1
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV SP,OFFSET TOP
LEA AX,RESULT
PUSH AX
MOV AX,N
PUSH AX
CALL FACT
CALL C2T10
LEA DX,OUTPU
MOV AH,9
INT 21H
MOV AH,1
INT 21H
MOV AH,4CH
INT 21H
FACT PROC
PUSH BP
MOV BP,SP
MOV BX,[BP+6]
MOV AX,[BP+4]
CMP AX,0
JZ DONE
PUSH BX
DEC AX
PUSH AX
CALL FACT
MOV AX,[BP-2]
MUL WORD PTR [BP+4]
JMP RETU
DONE: MOV AX,1
RETU: MOV [BP+6],AX
MOV [BX],AX
POP BP
RET 4
FACT ENDP
C2T10 PROC
MOV AX,RESULT
MOV SI,0
MOV CX,5
LEA BX,CONT
CVDL: CWD
DIV WORD PTR [BX]
ADD AL,30H
MOV BUF[SI],AL
INC SI
MOV AX,DX
ADD BX,2
LOOP CVDL
RET
C2T10 ENDP
CODE ENDS
END START
浙公网安备 33010602011771号