ASMB,R,L,C HED ".FDV" - FLOATING-POINT DIVIDE ROUTINE. * * NAME: .FDV * SOURCE: 92068-18036 * RELOC: PART OF 92067-16268 AND 92067-16035 * PGMR: R.A.G. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAM .FDV,6 92068-1X036 REV.2013 790418 ENT .FDV EXT .PACK,.ZPRV * * * CALLING SEQUENCE: DLD * JSB .FDV * DEF * (RESULT IN (A,B)) * * IF UNDERFLOW OCCURS, ZERO IS RETURNED. * IF OVERFLOW OCCURS, (077777,177777) IS RETURNED. * IF UNDERFLOW OR OVERFLOW OCCUR, THE OVERFLOW BIT IS * SET, OTHERWISE IT IS CLEARED. SPC 3 * UNPACK OPERANDS, SUBTRACT EXPONENTS. * .FDV NOP JSB .ZPRV DEF LIBX STA A SAVE HIGH PART OF DIVIDEND. STB C (IN CASE DIVIDEND IS (A,B) ) ERA SAVE "E". STA ESAVE LDA 1 GET LO-MAN + EXP AND OM400 MASK OFF EXP STA B SAVE LOW PART OF DIVIDEND MANT. XOR 1 PRODUCE EXPONENT SLA,RAR POSITION IOR OM200 AND FORM STA EXPON LDA .FDV,I GET ADDRESS OF DIVISOR. ISZ .FDV BUMP RETURN ADDRESS. STA D BE CAREFUL, MAY BE ZERO. LDA A RESTORE (A,B) LDB C DLD D,I GET DIVISOR. SZA,RSS TEST FOR DIVIDE BY ZERO JMP DVZRO STA C SAVE HIGH PART OF DIVISOR. LDA 1 GET LO-MAN+EXP AND OM400 MASK TO LO-MAN STA D SAVE LOW PART OF DIVISOR MANT. XOR 1 FORM EXP SLA,RAR IOR OM200 CMA,INA COMPUTE EXPONENT DIFFERENCE LARGE INA PLUS 1 ADA EXPON STA EXPON & STORE. SKP * DIVIDE THE MANTISSAS. * LDB A (B,A) = DIVIDEND MANTISSA. LDA B ASR 2 DIVIDE BY 4 TO AVOID OVERFLOW. DIV C FORM UPPER QUOTIENT. STA Q SAVE. ASR 3 DIVIDE REM BY 8 & SAVE. STB R LDA D DIVIDE LOWER DIVISOR BY 8. CLE,ERA TO MATCH REMAINDER AND SO THAT ARS,ARS THE SIGN IS INTERPRETED RIGHT. MPY Q FORM FULL REMAINDER: CMB,INB REM - QUOTIENT * (LOWER DIVISOR) ADB R (BUT DIVIDED BY 8) DIV C FORM NEXT WORD OF QUOTIENT. (/8) LDB 0 ALIGN WITH FIRST WORD. ASR 13 ADB Q ADD TO FORM FULL QUOTIENT. SWP IN (A,B). * * PACK, NORMALIZE & EXIT. * NORM JSB .PACK PACK RESULT EXPON NOP STA A RESTORE "E". LDA ESAVE ELA LDA A LIBX JMP .FDV,I DEF .FDV * * HANDLE DIVIDE BY ZERO. * DVZRO LDA LARGE ANY OLD LARGE + NUMBER. STA EXPON JMP NORM * * TEMPS & CONSTANTS. * A NOP B NOP C NOP D NOP Q EQU A R EQU B ESAVE NOP OM400 OCT -400 OM200 OCT -200 * END