ASMB,Q,L,C * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. 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. * * **************************************************************** * * NAME: PART OF MATH LIBRARY * SOURCE: 24998-18XXX SEE NAM FOR LAST THREE DIGITS * RELOC: PART OF 24998-12001 * PGMR: BG & JTS HED ".MXM1" MAX AND MIN WITH REAL ARGUMENTS. NAM .MXM1,7 24998-1X110 REV.2013 800205 ENT MIN1,MAX1,.JMN1,.JMX1,AMIN1,AMAX1 EXT .FSB,IFIX,.FIXD * * CALLING SEQUENCES: * * JSB MIN1/MAX1/.JMN1/.JMX1/AMIN1/AMAX1 * DEF *+N+1 * DEF X1 (ALL ARGUMENTS ARE REAL*4) * . . * . . * . . * DEF XN * -->(A) OR (A,B) = RESULT OF APPROPRIATE TYPE. SPC 2 * ENTRY. SET UP FLAGS: * (A)=RESULT TYPE: -1=INT*4, 0=INT*2, +1=REAL*4. * (E)=MAX/MIN: 0=MIN, 1=MAX. * MIN1 NOP CLA,CLE JSB MXMN1 * MAX1 NOP CLA,CCE JSB MXMN1 * .JMN1 NOP CCA,CLE JSB MXMN1 * .JMX1 NOP CCA,CCE JSB MXMN1 * AMIN1 NOP CLA,CLE,INA JSB MXMN1 * AMAX1 NOP CLA,CCE,INA JSB MXMN1 * MXMN1 NOP LDB SSA FOR MIN, USE 'SSA'. SEZ INB FOR MAX, USE 'SSA,RSS'. STB TEST ADA KM1 ALTER FLAG: -2:INT*4, -1:INT*2, 0:REAL*4. STA FFLAG IT'S THE FIX FLAG. SKP * SET UP RTN ADDR, ARG COUNT, ARG POINTER. * LDA MXMN1 GET THE TRUE ENTRY POINT. ADA KM3 LDA 0,I STA MIN1 LDB 0,I SET RETURN ADDR. STB MAX1 CMA -*-1 IN 'DEF *+N+1' ADA MIN1,I (-*-1)+(*+N+1) = N CMA,CCE,INA,SZA,RSS N=0 ? (A=-N) (E=1) JMP ZERO YES. * STA N NO. SET UP COUNTER. LDA MIN1 SET UP POINTER THRU PARAM LIST. INA RAL,ERA SET INDIRECT: POINTS TO ADDRESSES. STA DLIST JMP MXMN4 GO SET 1ST ARG AS CURRENT MAX/MIN. * * LOOK THRU LIST FOR NEW MAX/MIN. * MXMN2 ISZ DLIST BUMP ADDR TO NEXT ARG. LDA VALUE CHECK SIGNS. XOR DLIST,I SAME SIGN ? SSA JMP MXMN3 NO. * DLD VALUE YES. SUBTRACT. JSB .FSB DLIST DEF *-* SOS UNDERFLOW ? (CAN'T OVERFLOW) JMP TEST NO. * DLD DLIST,I YES. ADD 128 TO BOTH EXPONENTS. INB DST TEMP DLD VALUE INB JSB .FSB NOW REPEAT THE SUBTRACT. DEF TEMP JMP TEST THIS TIME IT HAS TO WORK. * MXMN3 LDA VALUE SIGNS DIFF, TEST SIGN OF CURRENT MIN/MAX. TEST ABS *-* MIN: SSA MAX: SSA,RSS JMP MXMN5 CURRENT VALUE IS O.K., LEAVE IT. * MXMN4 DLD DLIST,I NEW VALUE IS BETTER. REPLACE. DST VALUE MXMN5 ISZ N COUNT 'EM. DONE ? JMP MXMN2 NO. GO FOR MORE. * * IF NEED BE, FIX THE RESULT. * DLD VALUE (A,B) = REAL VERSION. ISZ FFLAG WHAT IS REQUIRED ? RSS JSB IFIX INTEGER*2. FIX. ISZ FFLAG RSS JSB .FIXD INTEGER*4. FIX. JMP MAX1,I DONE. * * ZERO ARGUMENTS, RESULT = 0. * ZERO CLA SAME FOR ALL TYPES. CLB JMP MAX1,I * * LOCALS & CONSTANTS. * N NOP PARAM COUNTER. FFLAG NOP FIX FLAG. VALUE DEC 0,0 BEST VALUE SO FAR. TEMP DEC 0,0 ARGUMENT * (2**128) SSA SSA KM1 DEC -1 KM3 DEC -3 * END