彙編-遞迴求n!
阿新 • • 發佈:2018-11-23
參考https://blog.csdn.net/baidu_33836580/article/details/50578877
遞迴計算8!(40320<2^16) ;彙編程式中main是使用者自定義識別符號,可有可無 ;start是程式起始入口點,start 和end start相對應,控制程式開始結束 ;自定義符號 DOS EQU 21H IN EQU 1H OUTW EQU 2H OUTS EQU 9H DATA SEGMENT INPUT DB "Input a number (0~8):$ " OUTPUT DB " result is : $" DATA ENDS STACK SEGMENT DB 256 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX LEA DX,INPUT MOV AH,OUTS INT DOS MOV AH,IN INT DOS CMP AL,'0' JB EXIT CMP AL,'8' JA EXIT SUB AL,'0' MOV AH,0 CMP AX,1 JA SHOW ;是0,1輸出1 MOV DX,31H MOV AH,OUTS INT DOS JMP EXIT SHOW: MOV CX,AX MOV AX,1 CALL FAC ;十進位制輸出結果(最大40230>2^8) MOV CX,0 MOV BX,10 INSTACK: MOV DX,0 DIV BX PUSH DX INC CX CMP AX,0 JNE INSTACK OUTSTACK: POP DX ADD DL,30H MOV AH,OUTW INT DOS ;??這樣輸出字元會不會原位置覆蓋?? DEC CX LOOP OUTSTACK EXIT: MOV AH,4CH INT DOS FAC PROC NEAR DEC CX ;CX中存每次遞迴乘數 CMP CX,1 JE FAC_EXIT PUSH CX CALL FAC ;遞迴部分 POP CX MUL CX ;結果存在AX中 FAC_EXIT: RET FAC ENDP CODE ENDS END START