7.asm

来自「1!+2!+3!+4!+5!用递归方法进行!」· 汇编 代码 · 共 42 行

ASM
42
字号
;计算SUM=1!+2!+3!+4!+5!
STACK     SEGMENT
DB        100 DUP(?)
STACK     ENDS
DATA      SEGMENT
N         DB    5
RESULT    DW    ?
DATA      ENDS
CODE      SEGMENT
          ASSUME   CS: CODE, DS: DATA, SS: STACK
START:    MOV   AX,   DATA
          MOV   DS,   AX 
          MOV   CL,   N                        ;设置循环次数
SUM:      MOV   AL,   CL                       ;SUM=1!+2!+3!+4!+5!,通过改变CL的值来取5,4,3,2,1
          CALL  FACT                           ;求N!,即1!,2!,3!,4!,5!
          ADD   RESULT,  DX                    ; 1!+2!+3!+4!+5!的结果,保存到RESULT
          DEC   CL                             ;循环次数减1
          JNZ   SUM
          MOV   AH,   4CH
          INT   21H                            ;返回DOS
FACT      PROC    NEAR                         ;子程序FACT;计算N!;AL=N
          CMP    AL,   0  
          JNE    INSTC
          MOV    DX,   1                       ;DX←0!
          RET
INSTC:    PUSH   AX                            ;N,N-1,N-2......2,1依次进栈
          DEC    AL
          CALL   FACT                          ;递归调用
          POP    CX
          CALL   NFMUL                         ;调用无符号乘法子程序NFMUL
          RET
FACT      ENDP                
NFMUL     PROC    NEAR                         ;无符号字节乘法子程序NFMUL,
                                               ;CL为被乘数,DL为乘数,AL为积
          MOV   AL,   CL
          MUL   DL
          MOV   DX,  AX                        ;乘积送DX
          RET
NFMUL     ENDP	
CODE      ENDS
          END   START

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?