N DC.W 4 RESULT DS 2 ORG $1000 FATRIC MOVEM D1,-(SP) ;salvo D1 SUBQ.L #2,SP ;Spazio per R (v. locale) sullo stack MOVE 10(SP),D1 ;p. di ingresso in D1 BEQ FINERIC ;Se D1 e' zero finisco RIC MOVE D1,(SP) ;D1 va in R SUBQ #1,D1 ;D1 vale N-1 CALL MOVEM D1,-(SP) ;N-1 sullo stack (nuovo p. ingresso) SUBQ.L #2,SP ;spazio per p. uscita JSR FATRIC ;chiamata ricorsiva RITR MOVE (SP),D1 ;p. uscita (NewRis) in D1 ADDQ.L #4,SP ;elimino p a r a m e t r i MULU (SP),D1 ;D1 = R*NewRis MOVE D1,(SP) ;R = R*NewRis BRA RITORNO FINERIC MOVE #1,(SP) ;1 in R RITORNO MOVE (SP),8(SP) ;R in Ris ADDQ.L #2,SP ;elimino R MOVEM (SP)+,D1 ;ripristino D1 RTS ;ritorno al chiamante START NOP MOVE N,-(SP) ;Spazio per N sullo stack SUBQ.L #2,SP ;Spazio per Ris sullo stack JSR FATRIC RIT MOVEM (SP)+,D1 ;Ris in D1, ed elimino da stack ADDQ.L #2,SP ;elimino N dallo stack MOVE D1,RESULT FINISH STOP #$2700 END START *~Font name~Courier New~ *~Font size~18~ *~Tab type~1~ *~Tab size~4~