ASMB,L,R,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 ".DADS" - DOUBLE INTEGER ADD & SUBTRACT. NAM .DADS,7 24998-1X036 REV.2001 780818 * ENT .DAD,.DSB,.DSBR * A EQU 0 B EQU 1 * * .DADS ADDS OR SUBTRACTS DOUBLE INTEGERS, GIVING A DOUBLE INTEGER * RESULT. THE NUMBER FORMAT IS: * FIRST WORD = SIGN, MSB IN A-REG OR LOCATION K. * SECOND WORD = LSB IN B-REG OR LOCATION K+1. * THE OPERATIONS PERFORMED ARE: * .DAD (A,B) _ (A,B) + MEM * .DSB (A,B) _ (A,B) - MEM * .DSBR (A,B) _ MEM - (A,B) * * CALLING SEQUENCE: * * DLD * JSB <.DAD,.DSB OR .DSBR> * DEF * * * IF OVERFLOW OCCURS, THE OVERFLOW BIT IS SET AND THE LEAST * SIGNIFICANT 32 BITS OF THE RESULT ARE RETURNED, ELSE * OVERFLOW IS CLEARED. THE "E" BIT IS CHANGED ONLY IF IT * IS CLEAR AND A CARRY OUT OF BIT 31 OCCURS. SKP * ".DAD" AND COMMON CODE. * .DAD NOP STA ARG1 SAVE ARG 1 STB ARG1+1 CCA SET FLAG. STA FLAG ERA,CLE SAVE E-BIT. STA E LDA .DAD,I GET ARG 2 STA ARGP MAY BE IN (A,B) ! LDA ARG1 DAD1 DLD ARGP,I DAD2 ISZ .DAD SKIP ARG. ADB ARG1+1 ADD LOWERS. CLO IGNORE OFL IN LOWER ADD SEZ,CCE,RSS CARRY ? JMP DAD4 NO. ISZ E RESTORE E. CLE SSA YES. A<0 ? JMP DAD3 YES, ADD CARRY FIRST. ADA ARG1 NO, ADD UPPERS FIRST. INA THEN CARRY JMP DAD6 GO CHECK FLAG. DAD3 INA A<0, ADD CARRY FIRST. JMP DAD5 DAD4 ISZ E RESTORE E CLE DAD5 ADA ARG1 THEN UPPERS. DAD6 ISZ FLAG ADD OR E WAS SET ? CME NO, BORROW = .NOT. CARRY JMP .DAD,I EXIT SKP * ".DSBR" * .DSBR NOP STB ARG1 SAVE ORIGINAL B. CCB SAVE E BIT ERB STB E STB FLAG FLAG = (ADD).OR.(E) LDB ARG1 CMA,CLE NEGATE FIRST ARG (IN A & B) CMB,INB LEAVE E WITH CARRY INTO UPPER. STB ARG1+1 SAVE 2ND WD NEGATED 1ST ARG. LDB .DSBR COPY ENTRY PT. STB .DAD LDB B,I SAVE ADDR ARG. STB ARGP LDB ARG1 RESTORE ORIGINAL ARG. STA ARG1 SAVE 1ST WD NEGATED 1ST ARG. CMA (2ND ARG MAY BE IN (A,B) TOO) JMP DAD1 FINISH USING ".DAD" * * ".DSB" * .DSB NOP STA ARG1 SAVE ARG 1 STB ARG1+1 CCA SAVE E-BIT ERA STA E STA FLAG FLAG = (ADD).OR.(E) LDA .DSB COPY ENTRY PT STA .DAD LDA A,I GET SECOND ARG STA ARGP MAY BE IN (A,B) ! LDA ARG1 DLD ARGP,I CMA,CLE NEGATE IT CMB,INB LEAVE CARRY IN E. JMP DAD2 FINISH USING ".DAD" * * LOCALS. * ARG1 BSS 2 TEMP FOR ARG 1 OR 2. ARGP BSS 1 ADDR OF ARG. FLAG BSS 1 -1 IFF (SUBTRACT) & (E) E BSS 1 -1 IFF (E) END