ASMB NAM SDIV,7 24306-60001 REV.2026 791205 * * ******************************************************************* * (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. ******************************************************************* * * * SOURCE: 24306-18010 * RELOC: 24306-60001 * * * ****************************************************************** * * * * *FUNCTION - DIVIDE ONE CHARACTER STRING FIELD OF *ARBITRARY LENGTH,KSTR, BY ANOTHER CHARACTER STRING *OF ARBITRARY LENGTH,JSTR AND PLACE THE QUOTIENT *AND THE REMAINDER IN KSTR * *CALLING SEQUENCE *CALL SDIV(JSTR,J,JLAST,KSTR,K,KLAST,NER) * *UPON COMPLETION OF SDIV,KSTR WILL BE CONFIGURED AS FOLLOWS: *THE LEFTMOST DIGIT OF THE QUOTIENT WILL BE IN * POSITION A OF KSTR WHERE * A=K-(JLAST-J+1) *THE RIGHTMOST DIGIT OF THE QUOTIENT WILL BE IN * POSITON B OF KSTR WHERE * B=KLAST-(JLAST-J+1) *THE LEFTMOST DIGIT OF THE REMAINDER WILL BE IN * POSITION C OF KSTR WHERE * C=KLAST-(JLAST-J) *THE RIGHTMOST DIGIT OF THE REMAINDER WILL BE IN * POSITION KLAST OF KSTR * *ERROR CONDITIONS * *IF DIVISION BY ZERO IS ATTEMPTED, KSTR IS EXTENDED * AND FILLED WITH ZEROS AND NER IS SET TO KLAST *IF THERE IS NOT ENOUGH ROOM TO EXTEND THE KSTR FIELD * TO THE LEFT,NER=KLAST,AND SDIV RETURNS *IF JSTR OR KSTR CONTAINS ANON-NUMERIC CHAR IN OTHER * THAN THE LAST POSITION,NER=-1 * ENT SDIV EXT .ENTR,S.GET,SPUT,SSIGN,SFILL EXT SA2DE,SDEA2,SDCAR,SD2D1,SD1D2 PARAM BSS 7 SDIV NOP JSB .ENTR TRANSFER PARAMETERS DEF PARAM CLA STA IERR LDA PARAM+1,I EXTEND KSTR FIELD TO THE LEFT OF CMA,INA THE JSTR FIELD INA JSPAN=JLAST-J+1 ADA PARAM+2,I STA JSPAN CCA KSTRT=K-1 ADA PARAM+4,I STA KSTRT LDA JSPAN KLOW=K-JSPAN CMA,INA ADA PARAM+4,I STA KLOW ADA KLOW BLOW=2*KLOW-KLAST-1 LDB PARAM+5,I BLOW IS 1ST POSITION IN CMB KSTR AFTER CONVERSION ADA 1 TO D1 FORMAT STA BLOW LDA JSPAN IS KLAST-KSTRT-JSPAN<0?(OVERFLO?) ADA KSTRT KSTR FIELD EXTENDED TOO FAR TO CMA,INA THE LEFT?) ADA PARAM+5,I SSA JMP ERR1 IF SO LDA BLOW IF BLOW>0? SSA JMP ERR1 IF NOT SZA,RSS JMP ERR1 IF NOT JSB SA2DE CONVERT JSTR TO D2 FORMAT DEF *+5 DEF PARAM,I DEF PARAM+1,I DEF PARAM+2,I DEF IERR LDA IERR NON-NUMERIC CHAR IN JSTR? SZA JMP ERR2 IF SO JSB SA2DE CONVERT KSTR TO D2 FORMAT DEF *+5 DEF PARAM+3,I DEF PARAM+4,I DEF PARAM+5,I DEF IERR LDA IERR NON-NUMERIC CHAR IN KSTR? SZA JMP ERR3 IF SO JSB SSIGN SAVE SIGN OF JSTR IN JSIGN AND DEF *+5 CLEAR SIGN DEF PARAM,I DEF PARAM+2,I DEF ONE DEF JSIGN JSB SSIGN SAVE SIGN OF KSTR IN KSIGN AND DEF *+5 CLEAR SIGN DEF PARAM+3,I DEF PARAM+5,I DEF ONE DEF KSIGN JSB SFILL FILL KSTR WITH ZEROS TO THE LEFT DEF *+5 DEF PARAM+3,I OF THE LENGTH OF THE JCARD FIELD DEF KLOW (FROM KSTR(KLOW)TO KSTR(KSTRT)) DEF KSTRT DEF ZERO LDA PARAM+1,I JFRST=J STA JFRST E1 JSB S.GET JTEST=JSTR(JFRST) DEF *+4 DEF PARAM,I DEF JFRST DEF JTEST LDA JTEST IS JTEST>0? SSA JMP LOOP SZA JMP A3 IF SO LOOP LDA PARAM+2,I IS JFRST0? JMP NEWPT SZA,RSS JMP NEWPT RESUB LDA BKM SUBTRACT PRODUCT OF MULT AND INA STA KNOW DIVISOR FROM DIVIDEND LDA JFRST KNOW=BKM+1 STA JNOW KNOW IS POINTER TO DIVIDEND SUB JSB S.GET JNOW=JFRST DEF *+4 JNOW IS POINTER TO DIVISOR DEF PARAM,I DEF JNOW JTEST=JSTR(JNOW) DEF JTEST LDB KNOW KTEST=KSTR(KNOW) ADB PARAM+3 LDA 1,I STA KTEST LDA MULT KTEST=KTEST-MULT*JTEST MPY JTEST CMA,INA ADA KTEST STA KTEST LDB KNOW KSTR(KNOW)=KTEST ADB PARAM+3 STA 1,I LDA KNOW STA KNOW1 ISZ KNOW KNOW=KNOW+1 LDA PARAM+2,I IS JNOW=0?(THE CARRY=KNOW) SSA,RSS JMP NEWPT IF SO LDA KNOW IF NO,KSTR(BKM)=KSTR(BKM)+10*KNOW MPY TEN LDB BKM ADB PARAM+3 ADA 1,I STA 1,I CCA MULT=-1 STA MULT LDA NQUO NQUO=NQUO-1 ADA NEG1 STA NQUO JMP RESUB NEWPT LDA NQUO KSTR(BPUT)=NQUO LDB BPUT ADB PARAM+3 STA 1,I ISZ BPUT BPUT=BPUT+1 LDA BSTOP IS BKM