;---------------------------------------------------------
;       VsZeNeR'04      07/Julio/04     
;Programa: Factorial de un numero
;Simulador MC68000: IDE68K(vs1.35)    
;
;Entrada:       NUM: Numero a factorizar
;               D0:  Almacenar NUM
;               D1:  Almacenar variable
;               VAR: Constante interna del programa 
;
;Salida:        D1: Resultado
;
;Resumen: Programa que calcula factorial de un numero,
;         si el numero introducido es negativo, el
;         programa termina.                       
;---------------------------------------------------------

        org     $400            ;lugar de inicio del programa
NUM     dc.l    8              ;numero a factorizar
VAR     dc.l    -1              ;constante interna del programa para ver si el numero introducido es negativo

main    move.l  NUM,D0          ;almacena en D0 el numero a factorizar: D0<-NUM
        sub.l   #1,D0           ;decremento D0: D0=D0-1
        TST     D0
        BEQ     cero            ;si D0=0 ->numero introducido 1->ve a cero 1!=1
        CMP     VAR,D0          ;compara si el numero introducido es negativo
        BEQ     cero            ;D0=VAR ->numero introducido es 0->ve a cero 0!=1
        BLT     fin             ;numero introducido es negativo ->fin
        move.l  #1,D1           ;almacena en D1 constante 1: D1=1
        move.l  NUM,D0          ;almacena en D0 el numero a factorizar: D0<-NUM
bucle   mulu    D0,D1           ;multiplica sin signo: D1=D0*D1.Factorial no contempla numeros negativos por eso multiplicacion sin signo
        sub.l   #1,D0           ;decremento D0: D0=D0-1
        TST     D0
        BNE     bucle           ;si D0!=0 ->ve a bucle
        BEQ     fin             ;si D0=0 ->fin
cero    move.l  #1,D1           ;almacena el factorial en D1 0!=1!=1
fin     
        end     main
             
        