求递归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

posted on 2005-11-10 22:29  newzpflying  阅读(704)  评论(1)    收藏  举报