.TITLE FACT .GLOBL .FACT,FACT,.CALL ;.MACRO .FACT I,F ;F = I! FACTORIAL .MCALL .TLQ,.FACT FACT: .FACT @2(R5),-(SP) ;F=FACT(7,F) F:=FACT(N,F); MOV (SP)+,R0 ;REAL FUNCTION, NUMBERS RETURNED IN R0,R1 MOV (SP)+,R1 RETURN A0=R0 F: .BLKW 2 I: .BLKW 1 .FACT: MOV R0,-(SP) STF A0,-(SP) MOV I,R0 BLT ERROR ;IF I < 0, ERROR CMP R0,#33. ;IF I > 33., ERROR BGT ERROR ASH #2,R0 ;TABLE LOOKUP LDF QFACTR(R0),A0 STF A0,F LDF (SP)+,A0 MOV (SP)+,R0 RETURN ERROR: .TLQ <.FACT ERROR: OUT OF RANGE> JMP .CALL QFACTR: .FLT2 1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600 .FLT2 6227020800, 8.717829E+10, 1.307674E+12, 2.092279E+13 .FLT2 3.556874E+14, 6.402373E+15, 1.216451E+17, 2.432902E+18 .FLT2 5.109094E+19, 1.124001E+21, 2.585202E+22, 6.204484E+23 .FLT2 1.551121E+25, 4.032915E+26, 1.088887E+28, 3.048883E+29 .FLT2 8.841762E+30, 2.652529E+32, 8.222840E+33, 2.631309E+35 .FLT2 8.683318E+36 .END