N EQU 40H
D0 EQU 41H
D1 EQU 42H
D2 EQU 43H
AUX0 EQU 44H
AUX1 EQU 45H
AUX2 EQU 46H
ORG 0
FACTORIAL:
MOV A,N
MOV D0,#1
MOV D1,#0
MOV D2,#0
JNZ CHECA_FACT
RET
CHECA_FACT: MOV A,N
CJNE A,#1,CONT_FACT2
RET
CONT_FACT2: CALL MULTIPLICA
DEC N
JMP CHECA_FACT
MULTIPLICA: MOV AUX0,#0
MOV AUX1,#0
MOV AUX2,#0
MOV A,D0
MOV B,N
MUL AB
CALL SUMA
MOV A,D1
MOV B,N
MUL AB
CALL SUMA2
MOV A,D2
MOV B,N
MUL AB
CALL SUMA3
MOV D0,AUX0
MOV D1,AUX1
MOV D2,AUX2
RET
SUMA: ADD A,AUX0
MOV AUX0,A
MOV A,B
ADDC A,AUX1
MOV AUX1,A
MOV A,AUX2
ADDC A,#0
MOV AUX2,A
RET
SUMA2:
ADD A,AUX1
MOV AUX1,A
MOV A,B
ADDC A,AUX2
MOV AUX2,A
RET
SUMA3:
ADD A,AUX2
MOV AUX2,A
RET