实验:递归计算N!张钰琪9**********;!程序;。!程序1,流程图N!源程序STACKSG SEGMENT STACK 'S';定义堆栈DW 128DUP('ST')STACKSG ENDSDATA SEGMENTN_VAL DW 4 ;定义N值RESULT DW ? ;结果DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSGFRAME STRUC ;定义帧结构SAV_BP DW ? ;保存BP值SAV_CS_IP DW 2DUP(?) ;保存返回地址N DW ? ;当前N值RESULT_ADDR DW ? ;结果地址FRAME ENDSMAIN PROC FARMOV AX,DATAMOV DS,AXLEA BX,RESULTPUSH BX ;结果地址入栈PUSH N_VAL ;N值入栈CALL FARPTRFACT ;调用递归子程序MOV CL,10MOV AX,RESULTDIV CL ;把阶乘结果转换成十进制数OR AX,3030H ;转换成ASCII码MOV DL,ALMOV AH,2 ;显示结果的高位INT 21HMOV AX,RESULTDIV CL ;把阶乘结果转换成十进制数OR AX,3030H ;转换成ASCII码MOV DL,AHMOV AH,2 ;显示结果的低位INT 21HR1: MOV AX,4C00HINT 21HMAIN ENDPFACT PROC FAR ;N!递归子程序PUSH BP ;保存BP值MOV BP,SP ;BP指向帧基地址PUSH BXPUSH AXMOV BX,[BP].RESULT_ADDRMOV AX,[BP].N ;取帧中N值CMP AX,0JE DON
汇编 子程序设计 阶乘 来自淘豆网m.daumloan.com转载请标明出处.