ASM1130 CROSS ASSEMBLER V1.22 -- V2M12 -- Sun Nov 1 19:25:07 2020 Source File: \r1fdiv.asm 1 | *************************************************** R1C00010 2 | * * R1C00020 3 | * SUBROUTINE NAME- * R1C00030 4 | * FULL NAME- STANDARD PRECISION FLOATING- * R1C00040 5 | * POINT DIVIDE FUNCTION. * R1C00050 6 | * CODE NAME- FDIV/FDIVX * R1C00060 7 | * PURPOSE- THIS SUBPROGRAM COMPUTES THE QUOTIENT* R1C00070 8 | * OF TWO STANDARD PRECISION FLOATING-POINT * R1C00080 9 | * NUMBERS. * R1C00090 10 | * METHOD-SEE IBM 1130 SUBROUTINE LIBRARY MANUAL.* R1C00100 11 | * CAPABILITIES AND LIMITATIONS- SEE IBM 1130 * R1C00110 12 | * SUBROUTINE LIBRARY MANUAL. * R1C00120 13 | * SPECIAL FEATURES- N/A * R1C00130 14 | * ADDITIONAL INFORMATION- * R1C00140 15 | * ESTIMATED EXECUTION TIME- SEE IBM 1130 * R1C00150 16 | * SUBROUTINE LIBRARY MANUAL * R1C00160 17 | * * R1C00170 18 | * VERSION 2 MODIFICATION 10 R1C00175 19 | *************************************************** R1C00180 LIBF FDIV -V1. 21 | LIBR R1C00200 22 | SPR R1C00210 23 | ENT FDIV R1C00220 24 | ENT FDIVX R1C00230 0000 694E 25 | FDIVX STX 1 SAVE+1 SAVE XR1 R1C00240 0001 C400 0000 26 | LD L *-* CALL+1 R1C00250 0003 7004 27 | MDX COM R1C00260 0004 694A 28 | FDIV STX 1 SAVE+1 SAVE XR1 R1C00270 0005 C400 0000 29 | LD L *-* CALL+1 R1C00280 0007 6100 30 | LDX 1 0 XR1=ZERO R1C00290 0008 D004 31 | COM STO *+4 R1C00300 0009 2843 32 | STS STAT R1C00310 000A 804E 33 | A ONE BUILD EXIT R1C00320 000B D045 34 | STO EXIT+1 R1C00330 000C 7580 0000 35 | MDX I1 *-* EFFECTIVE OPND ADDR IN XR1 R1C00340 000E 1000 36 | NOP IF MDX CAUSES BR, SKIP NOP R1C00350 37 | * R1C00360 38 | *DO TESTS ON DIVISOR AND COMPUTE EXPONENT OF RESULT R1C00370 39 | * R1C00380 000F C900 40 | LDD 1 0 LOAD DIVISOR R1C00390 0010 4C18 0056R 41 | BSC L DIVCK,+- GO SET ERROR IF DIVISOR=0 R1C00400 0012 D84B 42 | STD BARG OTHERWISE SAVE DIVISOR R1C00410 0013 18D0 43 | RTE 16 GET SECOND WD OF DIVISOR R1C00420 0014 284A 44 | STS BARG+1 STRIP OFF EXPONENT FIELD R1C00430 0015 F049 45 | EOR BARG+1 EXPONENT ONLY IN ACC R1C00440 0016 F043 46 | EOR ALL1 ONES COMPLIMENT R1C00450 0017 8043 47 | A K1 TWOS COMPLIMENT + 128 R1C00460 0018 837D 48 | A 3 125 MODIFY DIVIDEND EXPONENT R1C00470 0019 D37D 49 | STO 3 125 STORE NEW EXPONENT R1C00480 001A C843 50 | LDD BARG GET LEAST SIGNIFICANT R1C00490 001B 18D0 51 | RTE 16 OF DIVISOR R1C00500 001C 4C18 0052R 52 | BSC L SKIP,+- BR IF ZERO R1C00510 001E 1802 53 | SRA 2 SHIFT FOR EXPONENT R1C00520 001F A37E 54 | M 3 126 TIMES SIGNIFICANT FAC R1C00530 0020 A83D 55 | D BARG MOST SIGNIFICANT PART OF R1C00540 0021 F038 56 | EOR ALL1 DIVISOR. CHANGE TO 2'S R1C00550 0022 8036 57 | A ONE COMPLEMENT AND SHIFT FOR R1C00560 0023 188E 58 | SRT 14 CORRECT POSITION. SUBTRACT R1C00570 0024 8B7E 59 | AD 3 126 FROM DIVIDEND. R1C00580 0025 DB7E 60 | STD 3 126 SAVE ACC. & EXT. R1C00585 61 | * R1C00590 62 | *PERFORM DIVISION ON THE MANTISSA R1C00600 63 | * R1C00605 0026 F039 64 | DIV EOR DMASK CHECK FOR /8000 R1C00610 0027 4C20 002FR 65 | BSC L DIVD,Z BRANCH NOT /8000 R1C00611 0029 18D0 66 | RTE 16 ROTATE BOTH 16 R1C00612 002A E037 67 | AND DDMSK CHECK FOR /FFFC R1C00613 002B 4C20 002FR 68 | BSC L DIVD,Z BRANCH NOT ZERO R1C00614 002D C832 69 | LDD DMASK SET ACC.+EXT.= /80000004 R1C00615 002E 7001 70 | MDX DIVDE GO TO DIVIDE R1C00616 002F CB7E 71 | DIVD LDD 3 126 RESTORE ACC.+EXT. TO ORIGNL R1C00617 0030 1882 72 | DIVDE SRT 2 SHIFT BOTH RIGHT R1C00620 0031 4801 73 | BSC O WAS THERE OVERFLOW R1C00630 0032 F029 74 | EOR K2 YES, RESTORE SIGN R1C00640 0033 A82A 75 | D BARG AND DIVIDE R1C00650 0034 D028 76 | STO Q1 SAVE 1ST HALF OF QUOTIENT R1C00660 0035 1090 77 | SLT 16 BRING IN REMAINDER R1C00670 0036 4C18 0054R 78 | BSC L NOR,+- BR ON NO REMAINDER R1C00680 0038 1881 79 | SRT 1 IF THERE IS A REMAINDER R1C00690 0039 A824 80 | D BARG DIVIDE IT AND POSITION R1C00700 003A 188F 81 | SRT 15 FOR PROPER SIGNIFICANCE R1C00710 003B 8021 82 | A Q1 ADD 1ST HALF OF QUOTIENT R1C00720 83 | * R1C00730 84 | *NORMALIZE THE QUOTIENT R1C00740 85 | * R1C00750 003C DB7E 86 | NORM STD 3 126 STORE IN FAC R1C00760 003D 4C10 0041R 87 | BSC L *+2,- BR IF NON-NEG R1C00770 003F 10A0 88 | SLT 32 IF NEG REVERSE SIGN R1C00780 0040 9B7E 89 | SD 3 126 R1C00790 0041 1081 90 | SLT 1 CHECK BIT SIGNIFICANCE R1C00800 0042 4C08 004AR 91 | BSC L NTPTV,+ BRANCH IF SIGNIFICANT R1C00810 0044 C37D 92 | LD 3 125 IF NOT SIGNIFICANT,GET R1C00820 0045 9013 93 | S ONE EXPONENT AND SUB 1 R1C00830 0046 D37D 94 | STO 3 125 RESTORE ALTERED EXPONENT R1C00840 0047 CB7E 95 | LDD 3 126 GET MANTISSA, ALTER IT TO R1C00850 0048 1081 96 | SLT 1 MATCH EXPONENT AND R1C00860 0049 DB7E 97 | STD 3 126 RESTORE MANTISSA R1C00870 004A 4818 98 | NTPTV BSC +- BR IF NON-ZERO R1C00880 004B D37D 99 | STO 3 125 IF ZERO,MAKE EXPONENT ZERO R1C00890 004C 0605*90C0 100 | LIBF FARC CHECK OVERFLOW/UNDERFLOW R1C00900 004D 2000 101 | STAT LDS *-* RESTORE STATUS R1C00910 004E 6500 0000 102 | SAVE LDX L1 *-* RESTORE XR1 R1C00920 0050 4C00 0000 103 | EXIT BSC L *-* RET TO CALL+2 R1C00930 0052 CB7E 104 | SKIP LDD 3 126 2ND TERM NOT SIGNIFICANT- R1C00940 0053 70D2 105 | MDX DIV GET MANTISSA,RET TO DIV R1C00950 0054 C008 106 | NOR LD Q1 IF NO REMAINDER, GET R1C00960 0055 70E6 107 | MDX NORM QUOTIENT AND RET TO NORM R1C00970 0056 C002 108 | DIVCK LD ONE R1C00980 0057 D37B 109 | STO 3 123 STORE DIVIDE CHECK R1C00990 0058 70F4 110 | MDX STAT R1C01000 111 | * R1C01010 112 | *CONSTANTS AREA R1C01020 113 | * R1C01030 0059 0001 114 | ONE DC 1 SINGLE WORD ONE R1C01040 005A FFFF 115 | ALL1 DC /FFFF USED TO GET 1'S COMPLEMENT R1C01050 005B 0082 116 | K1 DC /82 CORR FACTOR FOR EXPONENT R1C01060 005C C000 117 | K2 DC /C000 RESET SIGN CONSTANT R1C01070 005D 0000 118 | Q1 DC /0 STORE 1ST QUOTIENT R1C01080 005E 119 | BSS E 0 R1C01090 005E 0000 120 | BARG DC /0 STORE DIVISOR R1C01100 005F 0000 121 | DC /0 R1C01110 0060 8000 122 | DMASK DC /8000 NEGATIVE MASK R1C01112 0061 0004 123 | DC /0004 AND FORCED DIVIDEND R1C01113 0062 FFFC 124 | DDMSK DC /FFFC MASK /0003 R1C01114 0063 125 | END R1C01124 There were no errors in this assembly === CROSS REFERENCES ========================================================== Name Val Defd Referenced ALL1 005AR 115 46 56 BARG 005ER 120 42 44 45 50 55 75 80 COM 0008R 31 27 DDMSK 0062R 124 67 DIV 0026R 64 105 DIVCK 0056R 108 41 DIVD 002FR 71 65 68 DIVDE 0030R 72 70 DMASK 0060R 122 64 69 EXIT 0050R 103 34 FDIV 0004R 28 FDIVX 0000R 25 K1 005BR 116 47 K2 005CR 117 74 NOR 0054R 106 78 NORM 003CR 86 107 NTPTV 004AR 98 91 ONE 0059R 114 33 57 93 108 Q1 005DR 118 76 82 106 SAVE 004ER 102 25 28 SKIP 0052R 104 52 STAT 004DR 101 32 110