Вы находитесь на странице: 1из 46

UCRL-51940

FLOATING-POINT PACKAGE FOR INTEL 8008 AND 8080 MICROPROCESSORS


Michael D. Maples

October 24, 1975

Prepared for U.S. Energy Research& Development Administration under contract No. W-7405-Eng-48

I_AV~=IENCE I_IVEFIMORE I.ABOFIATOFIY University ol Calilomia ~ Livermore

NOTICE .sponsored by tht: the United States United $~ates G~ven~menl.Neilhe~ nor the United ~tates I:n,~rgy of their eorltlilctclrs~

of their employees, IIOr lilly

warranty~ express t~r implied, or asstltlleS ~t]y legld liability or responsihilit y fnr the accuracy, product or ])rc)eess disclosed, apparatus, rise would IIt~l illlr liege represents that its privlttely-owned rights."

in the United States of America Avai.] able from National Technical. information Service U.S. Department of Commerce 5285 Port Royal Road Springfield, Virginia 22151 Price: Printed Copy $ *; Microfiche $2.25

Printed

NTIS
""Pages 1-50 51-150 151-325 326-500 501.-1000 _Sellin_.g $4.00 $5.45 $7.60 $10.60 $13.60 Price

DISCI.AlMBR This documeut was prepared as an account of work sponsored by an agency of the United States Gnvernment. Neither the United States Government the University of California nor any of their nor employees,makesany warranty, express or implied, or assumesany legal liability or responsibility for the accuracy, complete.aess, or usefulness of any information, apparatus, product, or process disclosed, or represents that its use wouldnot infrioge privately ownedrights. Refarenceherein to any specific commercialproduct, process, or service by trade name, trademark, manufacturer, or otherwise, does not necessarily constitute or imply its endorsement,recommendation, favoring by the United States or Govermnent the University of California. The views and opinions of attthors expressed herein do or not necessarily state or reflect those of the UnitedStates Goveroment the University of California, or and shall not be used for advertising or product endorsement purposes. This report has been reproduced directly from the best available copy. Available to DOE DOltcontractors from the and Office of Scientific aud TechnicalInformation 1.O. I~ox 62, OakRidge, TN 3783~ Prices available from (615) 576-8401,FIB626-8401 Availableto the public from the National Technical Informalion Service U.S. Department of Commerce 5285Port RoyalRd., Springfield, VA22161

Workperformedunder fl~e auspices of the U.S. Departlnent of Energyby l.awrence LivermoreNational ! .aboratot 3, under Contract W-7405-ENG-48.

Distribution Category UC-32

LAWRENCE LIVERMORE LABORATORY


Universityof Califomia.."Livermore, Ca/#ornia 94550

UCRL-51940

FLOATING-POINT PACKAGE FOR INTEL 8008 AND 8080 MICROPROCESSORS


Michael D. Maples MS. Date: October 24, 1975

Contents

Abstract Introc]uc Selection Ac tion and Use t ............................... of s Operations ..................... 1 2 7 .......... A-I

knowledgmen Source

............................. of Float:iug-Po[nt Package

Appendi~.

Listing

-iii-

FLOATING-IOINT PACKAGE FOR INTEL 8008 AND 8080 MICROPROCESSORS

Abstract
The Lawrence Livermore I,aboratory has used a scientificnotation mathematics package that performs floating-point arithmetic with Intel 8008 and 8080 microprocessors. The execution times for the mathematical operations -add,

subtract, multiply, divide, and square root -- range from 3 to 77 ms. Instructions for using the floatingpoint package and a source listing of it are included.

Introduction
For the last two years, Lawrence Livermore Laboratory has used a scientific-notation mathematics package (f].oating-point package) with the Intel 8008 and 8080 microprocessors.* This package allows addition, subtraction, multiplication, division, and square root operations. Table i shows the execution times for these operations. The program listing of the complete 8080 floatingpoint package is in the Appendix. The package uses some I/O calls from an octal debug routine (ODT) that has become a standard part of all inhouse Add *Reference to a company or product name does not imply approval or recommendation of the product by the University of California or the U.S. Energy Research & Development Administration to the exclusion of others that may be suitable. -iSubtract Multiply Divide Square root 3 3 7 8 77 Operation Execution times (ms) Table i. Worst-case execution times for the 8080 microprocessor using a 0.5-~s clock with the package in programmable read-only memory (PROM). microcomputers, but this need not be necessary. The appropriate ODT calls (6 or 7) in the I/0 routines can easily be placed by assembly language equivalents.

The floating-point package uses 24 bits of mantissa for approximately 7-1/2 digits of accuracy in expressing numeric data. Obviously, this decreases rapidly when complex iterative computations are used. Nevertheless, the package is functioning quite satisfactorily in many

experiments with accuracy requirements of one part per hundred thousand.

The package also indicates underflows and overflows by placing zeros in the mantissa and a I00 (octal) the exponent word.

Selection and Use of Operations


All registers described in this paper point to four-word internal mathematical storage areas unless otherwise stated. Also, before performing any mathematical operation, all needed operands must be placed in the same random access memory (RAM) along with any needed scratch areas (i.e., all must reside in the same page of ILAM). The first problem is how to get the decimal numbers into the correct format for use in the floating-point package. The routine INPUT performs the conversion for all teletypewriter input. Also, it easily adapts to converting any BCD numeric inputs from either digital pane], meters (DPM) or thumbwheel switches. To use INPUT, set the L-register to point at the location in RAM ~ere the result of the conversion is to be placed and set the C-register to point to another location in RAM where -2If an addition (LADD) is wanted, place the pointer to one addend in the L-register, the pointer to the other addend in the B-register, and a pointer in the C-register. The C-register points to a four-word scratch area used during the addition process. The result is pointed to by the L-register (see Table 3). intermediate steps are to be alculated. Then do a call to the INPUT routine that does the appropriate conversion (see Table 2). The resulting floating-point number has three 8-bit words of mantissa and a fourth word that contains 6 bits of exponent, 1 bit for mantissa sign, and 1 bit for exponent sign (see Fig. i). Negative mantissa are indicated only by the sign bit as the mantissa itself is in sign-magnitude form. But the negative exponents are in twos complement form.

Table 2.

Program for using INPUT routine. The scratch area is ].7 (octal) bytes long but the converted number is only 4 bytes long.

Program

Comments

MVI II, SCRPG MVI L, STWD

;Set H to match scratch page (RAM). ;Store floating-point number starting ;at STWD.

MVI C, SCR CALL INPUT

;Scratch area.

STWD STWD " 1 ~

Most s~gn~ficant word

The subtraction (LSUB) routine is very similar to the addition routine. The L-register holds the pointer to the minuend and the

I1 I i I [ J j significant subtrahend.
765432 10 word

Least

B-register holds the pointer to the The C-register once again

is used as a four-word scratch area, and the result is placed in the area pointed to by the L-register,

STWD~31I I I I l lJ I
~~Exponenl" sign~ I = negative Mantissa sign~ 1 = negatiSe

destroying the previous data residing there (see Table 4). If a multiplication (LMUL) wanted, again use the L-, B-~ and C-registers. The pointer for the

Fig. i.

Floating-point word format. This format all.ows representation of numbers from 6.46235 * 10-27 to 4.61168 * ].018.

multiplicand resides in the L-register, the pointer for the multiplier in the B-register and the pointer to the result in the C-register (see Table 5).

-3-

Table 3. Assembly language setup for addition.

Program

Comments

~I H, SCRPG MVI L, ADDI

;Set H to scratch page (I~M). ;Pointer four-word addend and final ;result.

MVI B, ADD2 MVI C, SLR Call LADD

;Pointer 2nd four-word addend. ;Four-word scratch area. ;Turn control over to addition ;routines.

Table 4. Assembly language setup for subtraction.

Program

Comments

~I H, SCRPG ~I L, SUB1

;Set H to match scratch page (RAM). ;Pointer to four-word minuend and ;final result.

MVI B, SUB2 MVl C, SCR Call LSUB

;Pointer to four-word subtrahend. ;Four-word scratch area. ;Turn control over to subtraction ;routines.

-4-

Table 5. Assembly language setup for multiplication.

Program

Comments

:~IV~. SCRPG H, MVI L, MLCAN ,~FVIB, Mlplr MVI C, Rslt CALL LMUL

;Scratch page pointer (RAM). ;Pointer to multplicant. ;Pointer to multiplier. ;Pointer to result. ;Turn control over to multiply ;routine.

Division (LDIV) like multiplication uses the C-register to hold the pointer to the result (quotient). The L-register pointer refers to dividend and the B-register pointer refers to the divisor (see Table 6). The square root routine (DSQRT) uses the L-register to point to the number to be converted, the B-register to point to the final converted number, and the C-register to point to a 16 octal-word scratch area (see Table 7). The final routine is the output routine (CVRT). This routine converts the binary floating-point

number pointed to in the L-register to its ASCII equivalent and types it out on the teletypewriter. This routine uses a 17 octal-word scratch area pointed to by the C-register (see Table 8). The final data printed in scientific notation. The output routine like the INPUT routine is easily modified to output its data to an internal (memory) register for display on an LED display.

Table 9 gives a simple program that allows the user to check out the various routines and examine the various binary floating-point numbers.

-5-

Table 6. Assembly language setup for division.

Program

Comments

MVI H, SCRPG ~I L, dvdnd MVl B, dvsr CALL LDIV

;Scratch page pointer (RAM). ;Pointer to dividend. ;Pointer to divisor. ;Turn control over to divide routine.

Table 7. Assembly language setup for square root.

Program

Comments

~I H, SCRPG MVI L, NUM ~I B. CUTNM ~I C, SCR CALL DSQRT

;Scratch page pointer (RAM). ;Number to be converted. ;Converted number. ;16 Octal-word scratch area. ;Turn control over to square root ;routine.

-6-

Table 8. Assembly language to set up OUTPUT ~outine for its proper execution.

Program

Comments

~IVl II,

SCRPG

;Scratch page (R~M). ;Number to be converted from floating ;to decimal and printed in scientific ;notation on teletypewriter.

~I L, OUTNM

MVI C, SCR CALL CVRT

;17 octal-word scratch area. ;Turn control over to convert routine.

Acknowledgments
Thispackage was based on a package purchased from David Mead of Recognition System. Major modifications were made by Hal Brand to allow ASCII I/0 and a triple-precision mantissa. Overflow-underflow problems were resolved by Frank Olken. A hardy thanks is given to Eugene Fisher for foreseeing the need for such a package.

-7-

Table 9.

Sample program that takes two operands from the teletypewriter, divides them, and outputs the result to the teletypewriter. This routine can be useful in becoming familiar with the different routines in the floating-point package.

Program

Comments

ORG 4500Q

;Program starts at location i00 ;(octal) page

SCRPG EQU IIQ OPI EQU OQ OP2 EQU OPI + 4 RSULT EQU OP2 + 4 SCR EQU RSULT + 4 MVI |I~ SCRPG MVI L, OPI ~I C, SCR CALL Input 5~I L, OP2 MVI C, SCR CALL INPUT MVl L~ OPI MVl B~ OP2 MVI C, RSULT CALL LDIV

;Scratch page is page ii (octal.). ;Starting location of operand i. ;Starting location of operand 2. ;Starting location of result. ;Starting location o~ scratch area. ;Set H register to ILAM scratch page. ;Pointer to operand I. ;Scratch area. ;Input operandi from teletypewriter. ;Pointer to operand 2. ;Scratch. ;Input operand 2 from teletypewriter. ;Operand-i pointer in L-register. ;Operand-2 pointer in B-register. ;Result to C-register pointer. ;Divide OP1 by OP2 and place the ;result in RSULT.

~I L, RSULT MVI C~ SLR CALL CVRT

;L-pointer now RSULT. Scratch area. ;Output number starting in location RSULT to teletypewriter.

HALT

End.

-8-

Appendix. Source Listing of Floating-Point

Package

I ~O;SO r~ACRO ASSEMBLER, VERP.2 ERRORS 0 PAGE = I

////FLOA]ING [JOIN[ PACKAGEFOR THE HCS8 //I/BY DAVID MEAD ////HODIFIED BY HAL BRAND 9/6/74 ////MODIFIED FOR 24 BIT MANTISSAS ////PLUS ADDED [/0 CONVERSIONROUTINES III/NEi4 ROUTINE COMMENTS ////ARE PRECIEDED BY / l//tO[HER CHANGESARE" NOTED BY I///MODI~IED BY FRANK OLKEN 6/28175 004400 ODO060 000333 (100300 000077 ORG 44000 OUTR EOU 600 INP EOU 3330 HINCH EQU EQU ; ; ;/SET ;/SET 3000 077Q TO OOfS rTY ROUTINE READ TO ODTS INPUT ;MINIHUH CHARACTERISTIC N[TH SIGN EXTENOED ;HAXIMUH CHARACTERISTIC NITH SIGN EXTENDED

004400 004403 004406 0044!1 004414 004417 004422 004425 004430 004431 004432 004435 004436 004441 004442 004445 004447 004450 004453 004~5~ 00~45"] 004~60 0O~N61 00~62 004~65

315 302 315 312 303 315

15] 332 022 34~ 250 257 342 ]33

014 LDIV: 012 Oll 012 013 013 012 OTST2: 014

CALL CALL JNZ CALL dZ JMP CALL JZ

CSIGN ZCHK O~ST2 BCHK INOFC NZERC 8CHK OFLWC

135 151 315 035 ,.313 153 3i5 020 014 ~51 :;15 351 0]2 026 027 I53 315 012 0~5 318 0~3 01~ i 75 151 I 17 315 351 018

REP3:

MOV E,L HOV L,C CALL DCLR NOV L,E CALL ENTI MOV L,C CALL OLST MVI 0,23 M0V L,E CALL ENT2 DCR O JZ GOON MCV A,L NOV L,C NOV C,A CALL DLST HOV A,L

;COHPUTE 51ON OF RESULT ;CHECK IF DIVIDEND = ZERO ;IF D[VIOEND .NE. 0 CHECK DIVISOR ;CHECK FOR ZERO/ZERO ;ZERO/ZERO = INDEFINITE ;ZERO/NONZERO = ZERO ;CONE ~ERE IF DIVIDEND ,NE. 0 ;NONZERO/ZERO = OVERFLON ;IF NE GET HERE, THINGS LOOK OKAY ;SAVE BASE IN E ;BASE 6 TO I. ;CLEAR QUOTIENT MANTISSA SLOT ;~ESTORE BASE IN L ;DO FIRST CYCLE ;BASE 6 TO L ;HOVE QUOTIENT OVER ONE PLACE ;NUMBER OF ITERATIONS TO O ;DEC D ;BASE 6 TO L ;MOVE QUOTIENT MANT OVER ;CPTR TO A

A-1

1 8080 MACRO ASSEMBLER, VER2.2 004466 004467 00~~70 004L~73 00~476 004501 004502 004503 00~50~ 004507 004510 00~511 00h514 004515 004520 004521 004523 004526 004530 004533 131 IIV 303 047 Oil 315 372 I75 I51 lit 315 115 153 315 311 315 223 376 312 306 315 311 ; 341 013 GOON: 1]5 011

ERRORS = 0 PAGE 2 NOV E,C NOV C,A jMP REP3 CALL AORS JH CR[N NOV A,L NOV L,C NOV C,A CALl_ DLST MOV C,L MOV L,E CALL LDCP RET CALL SUB CPI JZ CALL RET CFCHE E 177Q OFLWC I CCHK ;I.PTR TO E ;CPTR TO C ;CHECK IF" RESUI. IS NORHAL T IZED ;LPrR TO A ;CPTR TO L ;LPTR TO C ;SHIFT QUOTIENT LEFT ;COHPUTE TI4E CHARACTERISTIC OF PESUL.T

351 012 07I 014

114 013 CRIN: I77 133 01~ 001 104 014

;GET A=CHAR(H,L), E=CHAR(H,B) ;NEW CHAR = CHAR(DIVIDEND) - CHAR(DVISIOR) ;CHECK MAX POSITIVE NUMBER ;JUMP ON 0VERFLON ;ADD ~ SINCE WE DID NOT LEFTSH~IT ;CHECK AND SFORE CHARACTERISTIC ;RETURN

///7 ; ; LAO0: ; ; ; ....... ;

AOOITION SUBROUTINE

004534 004535

257 303

XRA A JMP LADS

;/**SET UP TO ADD ;/NON DO IT

........................... .................... //// SUBTRACTION SUBROUTINE

004540

076

200

1.SUB: ; ; ; ; ; LAOS:

MVl A,200Q

004542 004545 004550

315 357 013 315 342 012 310

CALL ACPR CALL BCHK RZ

;/***,SET UP TO SUBTRACT SUBROUTINE LADS FLOATING POINT ADD OR SUB A 128 ON ENTRY SUB A 0 ON ENTRY ADD F-S F,FIRST OPER DESTROYED BASE II USED FOR SCRATCH ;SAVE ENTRY PNT AT BASE ~ ;CHECK ADDEND/SUBrRAHEND= ZERO ;IF SO, RESULT=ARGSO RETURN ;THIS MILL PREVENT UNDERFLONINDICATION ON ;ZERO + OR - ZERO

.4.-2

i B0110 MACRO ASSEMBLER. VER 2.2 ER.4ORS :, t} PAGE 3 00,~55! 004554 004557 004560 30456;~ 004564 004566 00N567 OOuSqO OO~Sq I 004572 004573 004534 0045T/ 004600 004601 004603 004604 004606 004603 004612 004~ 4 004B~5 004628 004R21 004624 004625 004626 004631 004632 004633 004634 004637 004642 004644 00464~ 00~65~ OON65N 004655 00~660 00N663 004666 004663 80~670 004671 0046"/4 004677 004702 316 133 013 -ll;? Ol! 234 12"1 332 I/V 01 i 223 3N6 ITI I27 135 151 054 I 63 150 303 ~0~ 0]1 1"13 222 3~6 133 !2~ 07~ 030 232 322 2]4 011 026 030 2B7 ~5 ~~00~2 025 $02 214 Oil 1~5 270 302 234 011 151 U54 156 315 002 012 315 35~ 013 336 002 302 5~ 011 303 215 013 026 ~q2 312 315 31 175 150 I0~ 001 3~6 011 34"1 013 ~11 OI I CALL JL EO02 NOV0, A ..JC ..LrB SUB E AN I 127 NOV MOVE,[ MOVI.,C INR L MOV M,E HOVI.,B JMP NCHK MOV SUB D AWl I~ MOV D,A MVl A,24 CMP O JNC SHIO HV[ D,24 ORA A ~ALL DA~T DCR O dNZ NOV A,I.. CHP 8 ,JNZ EQ02 MOV INR L HOV L,H CALL LASD CA~L ACPR CPI 2 JNZ NOTO JMP WZER ffVl ANA 0 JZ ADDZ CALL. TSTR JZ MOV A,L MOVL ,B HO~ CALL CALL CA1.L JZ DS~JB MANT TSTR NORM

;IF EOUAL, (;O ON ;SAVE L.PTR CilAI~ IN D ;L.Gr.B IF HF.RE

;DIFFERENCE TO D ;SAVE BASF IN E ;C PTR TO I ;C PTR I ro L ;SAVE BASF [N C PTR I ;B P[R I0 L ;I...Lr.B IF HERE,BPTR TOA ;SUBTRACT I.PrR Ct4AR FROMBPTR CHAR ;DIFFERENCE [0 D

LI_TB:

NCHK:

BH~O:

EOUL:

EO02:

;F.GT.S IF L.NE.B ;C PTR TO L ;C PTR I TO L ;PESTORE [. ;CHECK WHAT TO ;SAVE ANSWER ;TEST FOR ZERO ANSWER ;WRITE FLOArlNO ZERO AND RETURN ;WILL TEST FOR SUB

NO~O:

;LSB I INPL. IES SUB ;CHECK NORMAL/REVERSE ;IF NORMAL,GOSUBZ :OTItERNISE REVERSE ;ROLES ;OF L AND B ;SUBTRACT SMALLER FROM BIGGER ;SET UP SIGN OF RESULT ;SEE IF WE NEED TO INTERCHANGE ;BPTR AND LPTR ;NO INTERCHANGENECESSARY, SO NORMALIZE

315 046 013 5UBZ: 315 357 011 315 347 013 312 255 012

A-3

8080 MACRO ASSEMBLER, VER 2.2

ERRORS = 0 PAGE 4 ;AND RETURN INTERCHANGE ;l. AND B ;CPTR TO A ;8PTR TO C ;LPTR TO |. ;CPTR TO 8 ;tiOVE BPTR> tO

004705 004706 150 004707 004710 171 0047~] I10 004712 13b 004713 I07 004"714 315 044 014 004717 170 004720 I01 004721 I~7 004722 153 303 255 012 004?23 ; 004726 004731 004734 004737 004742 004745 004750 004753 004756 COPY

M0V A,L MOV .,O NOV B,A HOV A,C M0V C,B MOV E,L NOV 8,A CALL LXFR M0V MOV 8,C MOV C,A NOV l.,E JMP NORM

LPr R >

;NORMALIZE RESLII r tHE RESULf

AND RETURN

THE LARGER CHARACTERISTIC I0 CALl. JNC CALL CALL CALL JNC CALL CALL RET CCMP AOO2 BET! MANT OAD~ SCCFG ORST INCR

315 133 013 ADOZ: 322 337 01l 315 215 014 315 315 322 315 315 357 008 322 370 266 0]1 ADO2: 013 013 012 013 ; ;

;COMPARI" THE CHARACTERISTICS ;IF CEIARtH,I.~ .GE. CHAR(H,8) CONTINUE ;IF CHAR(H,L~ .LT. CHAR(H,B) THE COPY ;CHAR(H,B) TO CHAR(H,LI ;COHPUTE SIGN OF" RESULT ;ADO MANTISSAS ;IF THR IS NO OVFLR - ()ONE ;IF OVERrI.O~ SHIFT RIGHT ;AND INCREMENT CHARACTERISTIC ;ALL DONE, SO RETURN

TItIS ROUTINESTORES THE MANTISSA SIGN IN IHE RESULI THE SIGN HAS PREVIOUSLY BEEN COMPUTED BY LASD. HOV E,L M0V L,C MOV A,M AN; NOV L,E NR L INR L INR L MOV E,A MOV ANI AOO E H0V M. A OCRL DCR [. OCR L RET ;SAVE [. PTR ;C PTR TO L ;LOAD INDEX NORD ;SCARF SIGN ;RESTORE L PTR ;L PTR 2 ;TO L ;SAVE S,GN IN E ;SCARF CHAR ;ADD SIGN ;STORE IT ;RESTORE ;L PTR

004757 004760 004761 004"/62 004764 004765 004766 004767 004770 004771 004772 004774 004775 004776 00477"7 005000 005001

135 151 176 346 200 153 054 054 O54 137 176 346 177 2O3 167 055 055 O55

MANT:

SUBROUTINEI_ASD

A-4

MACRO A.C~SEMBI.FR, VER 2.2 ERROR~; = 0 PAGE uTlt. l~rY ROUTINEFORLADS CAL.CULATES TRUE OPER ANO SGN RETbRNS ANSbER IN ;FETCII MANT 51GNS, F IN A,O ;COMPARE"SIGNS iF" ,S- MEANSGO 10 A BRANCH ;F- S MEANS GO TO B BRANCH ;SAME SIGN IF HERE, ADD SIGNS ;IF BOIH MINUS, MILl. OvER~,..OW ;BOIH POS IV HERE ;IF AN ADO, LOAD 0 ;COMPARE F WllH S ;S.GT.F.SO LOAD 131 ;F.GT.S,SO LOAD 1 ;ERROR CON[)ITION, ZERO ANSWER ;CHECK FOR ADD OR SUB ;ADD, SO LOAD 128 ;COMPARE r WITH S ;S.Gr.F,SO LOAD 3 ;FGT.S.SO LOAD ;ERROR ;FToS-. SO TEST FOR ;SUBTRACT, SO LOAD 0 ;ADD, SO GO TO DCMP ;F--,S ,SO TEST FOR ;SUB ;ADD

00500..:. rio5005 r~O500G O0501l .OOEO4 ! 005.01.~ O05flPO 005i0~3 00~J026 005031 005034 ~95037 00504~ 00~)050 00=~053 00505~ O05OBI O050~4 00506"~ 00507~0050-15 U05100 O051O3 00510G 00~510~ ~0~)II~ 005~ IP 005~13 00(5l ~5 00511~ 00~~ 20 ~ 905~2; 005~23 005124 00512~

315 Ill 014 273 332 064 012 302 0"/5 012 203 3."32042 012 3~5 341 013 362 lOB 012 31~.) 364 013 332 124 012 302 lie 012 OIB00~ 362 315 332 302 303 315 3"12 303 3~5 372 303 257 3~I O-IB i~II 0"16 ~. I 076 31: 076 311 Ol~ ~II Ilii 364 113 121 03"/ 341 lOB oaB 341 ~I~ 050 00~ 003 ~00 201 012 013 012 012 012 013 012 012 013 012 012

I_AF~D:

CO~l: LO0~:

CALL i-ISFI-, CIIP JC ABCH JNZ BBCH ADD E JC SHIN CALf AORS JP LO00 CALl OCMP ,.JCL_13] JNZ LO01 HVI A,~ JP LI28 CALL OCMP JC LO03 JNZ LImB JNP LO02 CALL AORS JM LOOO ,JHP COMI CALL AORS ~FI L128 JMP COM2 XRA A RET MY! A,I RET MVI A,3 RET MVl A,~28 RET MVI A,129 RET RET

COM2:

ABCH; BBCH: I. 000 : LO0I: L003: L128: L!29:

; SUBROUTINE LMCM COMPARES THE MAGNITUDE OF TWO Ft.OATING PNT NUMBERS Z I IF ,C I IF F.L.T.S. ;CHECK CHARS ;RETURN IF NOT EQUAL ;IF EQUAL, CHECK MANTS

00512/ 005~ ~2 005133 005136

315 )33 0~3 300 315 3~4 013 311

LMCM:

CALl. CCMP RNZ CALL OCMP RET

A-5

8080 MACROASSEHBLER, VER 2.2

LRRORS = 0 PAGE

/I SUP.ROUI INE I.MUL FLOATING POIIIT NULTIPI Y L. PTR ~ 8 PTR TO C PTR 005137 005i42 005145 005150 005153 005156 005]57 005160 005!63 005164 005166 0051"71 305174 005175 00517S 005177 005202 005203 005204 005205 005206 005211 005E14 005217 005220 00522] 005224 005225 005230 005231 005233 005236 005240 005243 005244 005245 005246 005247 005252 315 151 014 LMUt. : 315 332 El2 312 25? 0~3 315 342 012 312 257 013 135 15l 315 035 013 153 026 030 315 370 KPGO: 332 244 01@ !75 151 117 315 370 012 [NTR: 175 ]5~ I~7 025 302 166 012 315 341 013 3"72 )00 014 135 151 315 351 012 153 3!5 ;14 0]3 203 376 200 312 142 014 326 O01 315 104 014 311 175 ~51 I1"? 315 006 0i3 303 177 012 ; MADO: CALL. CSICN CALL ZCHK JZ NZERC CAIL BCHK .JZ WZERC H0V E,L NOV[_,E CALl DCL.R NOV L,E MVl 0,24 CAl.[. ORST dC HAOO NOVA,[. HOVl.,C HOV C,A CALL. ORST ~OV A,L NOVI.,C NOV DCR D JNZ KPGC CA_[. A(IRS JM L.MCP M0V E,L NOV I.,C CALL OI..ST MOV L.,E CALL CFCHE ADD E CPI 2000 JZ U~LNC SLJI CALL CCHK RET NOV A,L NOVt.,C NOv C.A CALL OADO ,JMP INTR ;COMPUrE SiGN Or RESULT AND SORL :l ;CHECK FIRSI OPERANDFOR ZERO ;ZERO ANYIHING : ZERO ;CHECK SECONDOPERANT) FOR ZFRO :ANYTHING * ZERO = ZERO ;SAVE 1_ PTR ;C PrR !O L ;CI R PRO[)uCT NANf ;L PIR TO L ;LOAD NUMBER FERAT[ONS I ;St41f. T !. PTRRIGHT ;U]I.L ADO.t.9 PTRIF C : ; INTERCHANGE ; L AND ;C P1RS ;SHIFf PRODUCTOVER ; ]NTERCHANGE I L ANDC PTRSBACk, I C ;ORIGINAL> t.IORE CYCLES IF" Z 0 :TEST IF RESUL[ 15 NORttAI_ITE[} ;IF NORt-IAL,ZED GO CONPUrf_C:.IAR ;SAVE LPTR IN E ;SET L:CPTR ;I.EFT SHIFT RESULT NORMAL. 0 I;_tL ;RES CORELPTR ;0THERNISE SET A=C,qA,~{H,: :, C:CHARIH,B) ;CHAR(RESUL,r) = CHAR(H,I.: + CHAR{H,B] ;CHECK FOR SMALLEST NEGATIVE NUMBER ;IF 50 THEN UNOERFt.ON ;SUBIRACT ; ro CONP[NSAFEf.OR NORMALIZE :CHECK CHARACIERIS[IC AND TCRE ~ ; RE T URN INTERCHANGE ;1_ ANO ;C PTRS ;ACCUHUt.ATE PROOUCT

SUBROUI INE NORM

A-6

I ~I080 MAC~O ASSEMBLER, VER 2.~ ERRORS= 0 PAGE 7

THIS SUBROUrlNE WILL NORMALIZE A FL.OAIINO POINT NUMBFR, PRESERVING ITS ORIGINAL SIGN. WE CHECK FOR UNDERFLOW AND SEI THE CONDITION FLAG APPROPRIATELY. (SEE ERROR RETURNS). THER IS AN ENTRY POINT TO FI_OAT A SIGNED INTEGER (FLOAT) AND AN ENTRY POINT ro FLOAT AN UNSIGNED !NTEGER. Elx tRY POINTS: NORM NORMALIZE FLOATING PT NUMBERAT tH,L) FLOAT " FLOAT TRIPLE PRECISION INTEGER AT (H,L.) PRESERVING SIGN BIT IN FI.OAT LINSIGNEO (POS!TIVE) TRIPLE PRECISION DFXL AT [H,L) ;REG!STERS ON EXIT: A = CONDITION FLAG (SEE ERRORRETURNS1 D,E : GARBAGE B,C,H,L = SAME AS ON ENTRY 0--5255 005256 005261 00..E,262 005263 0(15266 ()[152"1 005272 005273 00527~ 005277 005301 005304 0O5307 00531~ 005313 005316 005317 005320 005321 005322 135 315 I01 013 127 153 315 332 012 312 215 013 267 3"12 ,313 012 NORM: NORMI: FXLI: FXL2: REPG: MOV CALL NOV MOV CALL az MOV ORA dM MOV CPI dZ CALL OCR JMP JMP MOV INR 1 NR INR XRA E,L GCHAR D,A L,E ZMCHK WZER A,M A 5CHAR A,D MINCH WUND DLST O REP8 INCR3 E,L L L L A ;SAVE L IN E ;GET CHAR(H,L) IN A WITH SIGN EXTENDED ;SAVE CHAR IN D ;RESTORE L ;CHECK FOR ZERO MANTISSA ;IF ZERO MANTISSA THEN ZERO RESULT ;GET MOST SIGNIFICANT BYTE OF ;MANTISSA SET FLAGS IF MOST SIGNFICANT BIT = I THEN NUMBER IS NORMALIZED AND WE GO TO STORE THF CHARACTERISTIC OTHERWISE CHECK FOR UNDERFLON COMPAREWITH MINIMUM CHAR !F EQUAL THEN UNDERFLON SHIF] MANTISSA LEFT DECREMENT CHARACTERSTIC LOOP AN TEST NEXT BIT STORE THE CHARACTERISTIC USING .THE SAME CODE AS THE INCREMENT ENTER HERE TO FLOAT INTEGER FIRT SAVE L. IN E M#KE (H,L) POINT HAKE (H,L) POINT MAKE (H,L) POINT ZERO ACCUMULATOR UNSIGNED CHAR CHAR CHAR

336 300 "~12 143 315 351 025 303 271 303 303 135 054 054 054 257

013 012 012 013 SCHAR: DFXL:

A-7

I 0080 MACROASSEMBLER, VER 2.2 005323 005324 005325 005327 167 153 026 030 303 263 012

ERRORS MOV MOV MVI dMP

= 0 PAGE B M,A L,E 0.24 FXL2 ;STORE A PLUS (+) SIGN ;RESTOREL ;ENTER HERE TO FLOA[ INTEGF.P :PRESERVING ORIGINAL SiG~ IN (FI,I..|*~ ;SET UP CHARACTERISTIC ;GO FLOAT tHE NUMBER

FLOA:

SUBROUTINE ZCHK THIS ROUTINE SETS THE ZERO FIAG IF IT OEIECTS A FLOATING ZERO AT {H,L}. SUBROUTINE ZMCHK THIS ROUTINE SETS tHE ZERO FLAG IF [I ZERO MANTISSA AT {H,LI 005332 005332 005333 005334 005335 005336 005337 005340 005341 054 05H 1"/6 055 266 055 266 311 ZCHK: ZMCHK: ]NR INR NOV DCR ORA OCR ORA RE~ I. [. A,H L. M [. M OEIE("rs

;SET L. TO POINT I.ASI BYTE OF MANT,~.3SA ;SET I TO POINT ro ,AST BYTI. OF IIANTI(3SA ;LOAD LEAST SIGNIF~CANT BYTE ;L POINTS 10 MIODI.L BYTE ;OR NITH [.EAST SIL:NFICANT BY:E ;t. POINTS TO MOST SIGNFICANT BYrE ;OF MANTISSA (ORIGINAL VALUF ~ ;OR IN MOST SIGNFICANT BYTE. ;RETURNS HITH ZEROFI.I,C~ S.F~ APPROPR!AFI-I.Y

SUBROUTINE BCHK ; ; BCHK: THIS ROUTINE CHECKS (h,8} NOV NOV CALL M0V RET E,L L,B ZCHK L,E FOR F!0ATING PI ZERO

005342 005343 005344 005347 G05350

135 150 315 332 012 ]53 311

:SAVE LPTR IN E ;SEt L=BPTR ;CHECK FOR ZERO ;RESTORE L=LPTR ;RErURN SUBROUrlNE DLST SHIFTS DBL FIORD ONE PLACE LF

; 805351 005352 005353 00535~ 005355 005356 005357 054 05h 176 267 027 167 055 ; DLST: INR L INR L MOV A,M ORA A RA:. M0V M,A DCR L ERRORS = 0 PAGE 9 NOv A,M

;i* TP ;LOAD IT ;KILL C~RRY ;SHIFT IT LEFT ;STORE IT

8080 MACRO ASSEMBLER, VER 2.2 005360 176

;LOAD IT

A-8

.3353F~ I

02": 167 05.$

I~AL MCV DCR HOV RAL MOV RET ; ; ; ; DRST: H, A L A ,M H. A

;SHIFI IT ;.EFT CARRY SCT BY FIRST SHIFT WILl. BE iN LSB OF SECOND ;/*o~!P ;!~,,Al[. EXTENS!ON DI.)NE [P

UOSX65 00536"~

02"7 167

OOh3"/O 005371 005372 005373 005374 3053"75 005376 00!3377 005400 00540l 00540;. 005403 G05405

135 176 037 167 054 176 037 167 054 176 037 167 153 ~ll

HOV ,l. E MOV t.l A, RAR MOVM, A iNR L MOV 11 A, HOV M,A HOV ti A, RAR MOV M, A NOV t ,E REr

SJEROUT N[ DRSI I :.4141[- T~:,DOUBLE NORD P[ ACE" ONE :0 TrlE RIGHT DOES Nor AFF[.ET D p /IODIFIED RIOI4T SHIFT !P ;..,,*r ;I.OAD F l RSr WORD ;ROTATE :STORE. I I ; / " ," o IP ;;.OAD .E3NDNOR[) ;SHIFT IT Rl611! ;S]ORE ;..~,, iP EXIENS[ON

;/,,~rP

-- ALL DONETP

; ;

005406 005407 lObq! ! 0054 l 3 [~1354 I t 005415 0~4 I1 f]0542 ~ 0U5422 0C5423 005424 q~542b 005427 0044~0 0r)54 ~

DADD: 150 054 t 54 17t3 054 054 205 i 6"7 150 054 I 153 054 167 175

NOV ,L. E HOVL ,B .NR L INRL. MOVA ,M MOV E L., INR L INRI. AD9 .4 1"10/H, A NOV L,B INR L NOV A ,hl MOV I_, E I NRI. ADC ."1 HOV N, A HOV L ,B MOV A,M 1!OVL. E

5UBROUIINE OADD ADDS INO DOUBI.E PRECISION NORDS, C I IF THERE IS OVRFI.N ;5AV BASE IN E ;BASE 3 tO |. ;BASE" ~, TO L ;l.f;A~ S MANT~} ;BASE TO L ;BASE I [0 .. ;/oo"rP ;ADD [NO MANTB S ;STORE ANSWER ;I**TP EXIENSION

;/~TP - ALL DONE ;BASE 3 TD L. ;MANTA OF S TO A ;BASE TO L

A-9

1 8080 MACRO ASSEMBLER, VER2.2 005432 005433 005434 216 167 3II

ERRORS 0 PAGE = AOC M NOV M,A RET

]0 ;ADO WITH CARRY ;STORF ANSWER SUBROUTINE DCL.R CLEARS THO SUCCESSIVE LOCATIONS OF MEMORY

005435 005436 005437 005440 005441 005442 005443 005444 005445

257 167 054 167 054 167 055 055 311

OCLR:

XRA A NOV INR L MOV M,A INR L HOV M,A OCR L DCR L RET

; .i ,~ .I o TF FFN.C~ EX ] ON ;,TP ZERO 3 ; / " rP - ALl. r.~ONE /***~ALL NEW OSUB -- SHORTER*** SUBROUTINE DSUB DOUBLE PRECISION SUBTRACT ;SAVE BASE IN E :/o*Tp EXTENSION ;/START WITH LOWS ;/GET ARG ;/NOW SE~ UF TO SbB ;/NON DO Ii ;/NON MUST PUT IT BACK ;/PU[ BACK ;/~.TP - ALL DON ;/GEl LON OF LOP ;/SET TO BOP ;/SET TO BOP LOW ;/GET DIFF. OF LOWS ;/SAVE IN LOP ;/TO LOP LOW ;/INrO RAM ;/BACK UP TO LOP HIGH ;/GEl LOP HIGH ;/SET TO BOP HIGH ;/SUB. WITH CARRY ;/SAVE IN LOP HIGH ;/INTO RAN ;/ALL DONE HUCH SHORTER

005446 005447 005450 005451 005452 005453 005454 005455 005456 005457 005460 005461 005462 005463 005464 005465 005466 005467 005490 005471 005472 005493 005474 005495 005496 005477 005500

135 054 054 176 150 054 054 226 153 054 054 167 055 176 150 054 236 I53 054 167 055 176 150 236 [53 167 3]]

DSUB:

MO E,L INR L INR[. MOV A,M MOV L,8 INR L !MR L SUB MOV L,E INR L INR L NOV DCR L HOV A,M NOV L,B INR L SB8 M HOV L,E [NR L NOV M,A DCR L NOV A,M NOV L,8 SB8 M HOV L,E NOV M,A RET

SUBROUTINE GCHAR HIS SUBROUTINE RETURNS THE CHARACTERISIIC OF" [HE FLOATING POINT NUMBER POINTED TO BY {H,L) IN THE A REGISTER WITH ITS SIGN EXTENDED INT0 THE

A-.10

MACRO A(.;SEt.IBLER,VER 2.~-; ERRORS = 0 PAGE II L.EFTMOSTBir. REGISTERS ON EXIT: A =. C!-IARACTERiSIlC OF (H,!.) NITH SIGN EXTENDEO [. = [ORIGINAL Li + ~ B,C,(~,E,14 : SAHL AS ON ENIRY 005501 005502 005503 00550H 005505 00550"1 00551 i 005513 GCHAR : 05k I 3~6 1"7:1 .~06 100 356 100 31I INR INR INR NOV AN[ AOI XRI RET I_ L t. A,M llqQ IOOQ IOOQ ;HAKE (H,L) POINT TO CHAR ;MAKE (H,L) POINT TO CHAR ;MAKE (H,L) POINT TO CHAR ;SET A=CHAR + MANTISSA SIGN :GEl RID OF MANTISSA SIGN BIT ;PROPAGATE CHAR SIGN INTO LEFTNOST BIT ;RESTORE ORIGINAL CHAR SIGN BIT ;RETURN NITH (H,L) POINTING TO THE ;CHAR = ORIGINAL (H,L)3 ;SOMEONEELSE WILL CLEAN UP

SUBROUTINE CFCHE THIS SUBRO~JTINE RETURNS THE CHARACTERISTICS OF THE FLOATING POINT NUMBERSPOINTED TO BY {H,L) AND (H,B) IN THE A AND E REGISTERS RESPECTIVELY, WITH THEIR SIGNS EXTENDEDINTO THE I.EFTMOST BIT. REGISTERS ON EXIT: CHARACTERISTICOF (I-I,L.; NITH SIGN EXTENDED CHARACTERISTIC OF (H,8) NITH SIGN EXTENDED B,C,H,I_ = SAME AS ON ENTRY D = A 0055!u 01)5515 605516 005521 0055E3 ~055~6 t)055~7 0055& CaSh31 QQ5532 135 150 153 315 !01 n55 055 055 31] 013 CFCHE: MOV NOV CALL HOV MOV CALL DCR OCR DCR NOV RET E, L L ,8 GCHAR L. E E, A GCHAR L L L 0, A ;SAVE LPTR IN E ;SET L. = BPTR ;GET CHAR(H,B) WITH SIGN EXTENDED IN ;RESTORE L = LPrR ;SET E=CHAR(H,8) NITH SIGN EXTENDED ;SEt A=CHARtH,L} WITH SIGN [XFENDEO ;RESTOREL = I.PTP ;RESTOREL = I_PTR ;RESTORE = I_PTR L. ;SET D=A=CHAR(H,L) WITH SIGN EXTENDED

SUBROUTINE CCMP TNIS S~JBROUTINE COMPARES THE CHARACTERISTICS OF FLOATING POINT NUMBERSPOINTEO TO BY (H,L) AND (H,B).

A-II

1 8080 MACRO ASSEMBLER, VER 2.2

ERRORS 0 PAGE = THE ZERO fL:P-FLOP IS SET CHAR{H,B). IF CrlAR(H,LI IS LE~S THANL.HAR(I~,,B: THE CARRv .BIT HILL BE SET.

THEN

REGIST!~R5 ON EXIT: ; ; ; ; CCMP : CHARACTERISTIC OF (H,!~ WIIF, SIGN EXTENCEC CHARACTERIST!C OF :H,B~ [.~ITH SIGN EXIENDEO A B,C,I!,L = SAME AS ON ENTRY CALL MOV SUB RAL ~OV RET CFCHE D, A E A,D ;TE!CH CHARACTERTISTICS WI!I4 S!GN EXTENDED ;INTO A (CHAR/H,L~) AND E :CHAR(H,B}~ REGIS ;SAVE CHAR (H,L) ;SUBTRACT E ;CHAR(H,B)) ;ROTATE SIGN BIT INTO CARRY BIT ;RESTOREA=CHAR(I~,L~ ;RErURN

005533 005536 00553? 0055~0 005541 005542

315 12"7 E23 02? 311

ERRORRETURNS THE FOLLONING CODE IS USED TO RETURN VARIOUS ERROR CONDITIONS. IN EACH CASE A FLOATING PCINT NUMBER 15 STORED IN THE 4 I.IORDS POINTED TC BY (H,I.) AND A CLAG IS STORED IN THE ACCUMULATOR. CONDI[ION
; ; ; ; ; ; ; ; ; ; ;

FLAG

RESU!.F 000 37? 377 XXX 000

(+) 000 37? 377 XXX 000 000 I00 377 377 077 XXX XXX 000 I00

RESULT (-; 000 000 000 300 377 3"7 3?7 @77 377 377 3"77 ~77 XXX XXX XXX XXX (AL~AYS ~ETURNS 0)

UNDERFLOW OVERFLOW INDEFINITE NORMAL NORMAL ZERO ENTR~ POINTS: WUNO WOVR WIND WZER WRITE WRITE WRITE ~RITE

377 17"/ 077 C00 000

UNDERFLOW OVERFLOW INOEFINITE NORMAL ZERO ;WRITE FLOATING NUMBER

; WFLT

MACRO MVl CALL MVI CALL MVl ORA

VMANT,VCHAR,VFLAG,LABEL D,VCHAR NCHAR A,VMANT WHANT A,VFLAG A

LABEL::

;LOAD CHARACTERISTIC INTO D REGISTER ;WRITE CHARACTERISTIC ;LOAD MANTISSA VALUE ;ME ASSUHE HERE THAT ALL BYTES OF MANTISSA ;ARE THE SAME ;WRITE T~E MANTISSA ;SET ACCUMULATOR TO FLAG ;SET FLAGS PROPERLY

A-12

~I08(1MACROASSEMBLER,

VER L~.2 ERRORS-~ 0 PAGE RET ENDM ; +NUNO: HFLT MVI CALl.. MVI CALL MVl ORA RET WFLT MVl CALL MVl CALL MVl 0RA RET WFLT HVl CALL MVI CALL MVl ORA RET INR INR [NR MVI XRA CALL ORA RET

13 ;RElURN {NHANr RESTORED (H,L.))

O, OOQ,377Q,LIFi.NI D,OOO40H NCHAR A,~OOOOH

;14RI rE UNDERFLON

026 I00 + 315 237 013+ 076 DO0 UFLHI::


+

005552 005555 00555q 005560 00556I 005561 005563 005566 005570 005573 005575 005576 005577 005577 005601 00560~ 005606 005611 005613 005614 005615 005616 005617 005620 005622 005623 005626 005627

315 230 013+ ~ 076 377 267 + 311 + +NOVR: 026 077 + 315 237 013+ 076 377 ~OFLWI : :

;LOAO CHARACTERISTIC INTO O REGISTER ;WRITE CHARACTERISTIC ;LOAD MANTISSAVALLIE ;ME ASSUHE HERE rHAl ALL BYTES OF MANTISSA ;ARE 1HE SAME NHANI ;WRITE THE MANTISSA A,OOOFFH ;SET ACCUMULATOR lO FLAG A ;SET FLAGS PROPERLY ;RETURN {WMANT RESTORED (H,L)) 377Q,77Q, 177Q,OFt.NI ;~RIIE OVERFLOW ;LOAD CHARACTERISTIC INtO D REGISTER ;WRITE CHARACTERISTIC ;LOAD MANTISSA VALUE ;WE ASSUMEHERE THAT ALL BYTES OF MANrlSSA ;ARE THE SAME WMANT ;WRITE rHE MANTISSA A,OOO/FH ;SET ACCUMULATOR FLAG TO A ;SET FLAGS PROPERLY ;RETURN (NMANT RESTORE[) 377Q,77Q,77Q,INDFI ;WRITE INDEFINITE D,OOO3FH NCHAR A,OOOFFI4 D,OOO3FH NCHAR A,OOOFFH HMANT A,OOO3FH A L L. L M,IOOQ A WMANT A ;LOAD CHARACTERISTIC INTC D REGISTER ;WRITE CHARACTERISTIC ;LOAD MANTISSA VALUE ;WE ASSUMEHERE THAT ~I.L BYTES OF MANTISSA ;ARE THE SAME ;WRITE THE MANTISSA ;SET ACCUMULATOR FLAG lO ;SET FLAGS PROPERLY ;RETURN (WMANTRESTORED (~I,L?) ;WRITE NORMAL ZERO ;STORE CHARACTERISTIC FOR ZERO ;ZERO ACCUMULATOR ;STORE ZERO MANTISSA ;SET FLAGS PROPERLY ;RETURN

315 230 013+ + 076 177 ~67 + 311 + *WIND: + 026 077 315 237 013+ 076 377 INDFI:: 315 230 013+ + 076 077 267 + 311 + ; 05~ NZER: 054 05N 066 I00 257 315 230 013 267 311

005630 005631

055 167

; ROUTINE TO WRITE MANTISSA FOR ERROR RETURNS ; WHANT: DCR L ;POINT LEAST SIGNIFICANT BYTE ;OF MANTISSA MOV M,A ;STORE LSBYTE OF MANTISSA

A-13

1 8080 MACRO ASSEMBLER, VER 2.2 005632 005633 0056~4 005635 005636 055 16"/ 055 167 31I

ERRORS OCR MOV DCR MOV PET

: L

0 PAGE ;POINT TO NEXT I.EAS! S:GN;FICAJr ;OF MANTISSA ;STORENLE, BYTEOr 14.~NTISSA ;P0]NT TO HCST S[GN]~ lEANT BY~L ; 0F MANT [ ;STORE MSBYTE OF HAt,IT~SA ;RETURN (H,L) POINTS ;FLOATING ~OINT RESLk l"

M,A

; ROUTINE TO NRI1E CHARACTER[ [C FOR ERRORRETURNS ; NOTE: NE PRESERVE. ORZOINAL MANTISSA SIGN : ON ENTRY .q CONTAINS NEWCHARACTER,r!sTIC TO 86 STORE). 005637 0056[+0 005841 005642 005643 005645 005646 005647 054 054 054 176 346 200 262 167 311 NC~AR: INR INR [MR NOV AWl ORA ."-1Ov RET :.. .. L A,~. 200Q D H,A ;SET :,H,I ) TC POINI IC CHA4ACTERISTIC ;PART or ABOVE ;PART OF" AFIOVE :i.OAO CHARACTERISTICA ;AND MARTISSA SIGN ;JUSI KEEP MANTISSA SIGN ;OR IN NEW CHARACTERES;[C ,.~.cfORr_ ,~T BACK ;RErLJRN WI1FI IH,: I POINT ;OF RESOLT :SOMEONE ELSE N]I.L FIX UP (H,i.)

SUBROUTINE INDFC This ROLTINE WRIrES ,t, FLOATING INDEFINITF, SES IHIS NRITFS WRITESA FLOArING POINT I/.IDEF lki "E A[ {H,C~, SET[; THE CONDITION FlAG AND RErURNS O05650 005651 005652 005655 005656 135 151 315 177 013 153 311 !NDFC: NOV NOV CALL NOV BET E,L L,C AINO L,E ;SAVE L.PTR IN E ;SET I.=CPTR SO {H,L~--AD.:JR ;NR!TE INDEFINITE ;RES ;ORE L=LPTR ; RETURN

OF RESJLT

SUBROUTINE |.IZERC THIS RObTINE WRITES A NORHALFLAOTING POINT ZERO AT (H,C), SETSTHE CONDITION FLAG ANDRETURNS 005657 005660 005661 005664 005665 135 WZERC : 151 315 215 013 153 311 MOV MOV CALL MOV RET E,L L,C NZER L,E ;SAVE LPTR IN E ;SETL:CPTR SO {N,L)=ADDR ;WRITE NORMALZERO ;RESTORE L=LPTR ;RETURN OF RCSdLT

SUBROUTINE INCR

A-14

I BOBO MACRO ASSEMBLER, V[.R R.2 ERRORS = 0 PAGE 15

THIS SUBROUTINE INCREMENTS THE CHARACTERISTIC OF THE FLOATING POINT NUMBERPOINFED TO BY {H,i.). HE TEST FOR OVERFLOW AND SET APPROPRIATE FLAG. [SEE ERRROR RETURNS). REGIS1ERS ON EXIT: A = COND!TION FLAG {SEE ERROR RETURNS) D = CLOBBERED B,C,H,L. = SAME AS ON ENTRY 005666 005621 005673 005676 00567~ 005700 00570A 005~0~ 005"105 005706 005710 005711 00571R 005"713 005715 005716 005717 005"720 00572~ 005722 005723 [ NCR : 376 877 312 I66 013 127 024 303 306 013 054 INCA3: 054 054 INCR: 076 177 242 127 176 346 200 262 167 055 055 055 SCCFG: 257 CALL GCHAR MAXCH CPI OFLNI ,JZ M0V D,A INR O JMP INCR2 [NR L INR L INR MVI A,[7~Q ANA D NOV O,A NOV A,H AWl 200G ORAD NOV M,A DCR L DCR [ DCR L XRA A RET ;GET CHAR WITH SIGN EXTENDED ;COMPARE WITH MAX CHAR PERMITTED ;INCREMENT MOULD CAUSE OVERFLOW ;/SAVE IT IN O :/INCREMENT IT ;JUMP AROUNDALTERNATE ENTRY POINT ;COME HERE TO STORE CI4ARACTERISTIC ;POINT (H,t.} TO CHAR ;POINT (H,t.) TO CHAR ;/KILL SIGN BIT ;/BACK TO D ;/NOW SIGN IT ;/GET MANTISSA SIGN ;/PUT TOGETHER ;/STORE IT BACK ;/NON BACK TO BASE ;I**~TP ;SET SUCCESSFLAG

SUBROUI,INE DECR THIS SUBROUTINE DECREMENTS THE CHARACTERISTIC OF THE FLOATING POINT NUMBER POINTED TO BY (H,L). WE TEST FOR UNDERFLO~ AND 5El APPROPRIATE FLAG. (SEE ERRROR RETURNS). REG STERS ON EXIT: I A = CONDITION FLAG (SEE ERROR RETURNS) D : CLOBBERED B,C,H,t. = SAME AS ON ENTRY 005724 005727 0057~! 005754 315 IOI 0]3 376 300 312 ~50 I27 CALL CPI JZ NOV GCHAR MINCH UFLWI O,A ;GET CHAR WITH SIGN EXTENDED ;COMPARE WITH MIN CHAR PERMITTED ;DECREMENTWOULDCAUSE UNDERFLOW ;SAVE CHARACTERSTIC [NO

A-15

1 8080 MACRO ASSEMTLER, 005735 005736 025 303 305 013

VER 2.2

ERRORS = O PAGE DCR JMP O INCR~ ;O[CREt.IENT CHARACTERISTIC ;GO STORE iT BACK 5UBROUI!NE AOKS RETURN S I IF BASE HAS A I IN NSB ;SAVE BASE ;BASE 5 TO I_ ;LOAD IT ;SET FLAGS ;RESTORE BASE SUBROUI INE TSTR CHECKS C PIR IO SEE IF" NLS8 ~ RETURNS Z I IF NOT DESTROYS F,D ;SAVE BASE ;C PTR r0 L ;MASK TO 0 ;LOAD VALUE ;RESTORE BASE ;AND VALUE NITM MASK SUBROUT[NE ACPR STORES A IN LOCAIlON O= CPIF! LPTR IN E ;SAVE LPFR ;CP~R TO L ;STORE A ;RESTORE BASE SUBROUTINE DCMP COMPARES TWO DOUBLE[.ENG-H WORDS ;NUN MANIA TO A ;SAVE BASE IN F ;BASE 3 TO L ;COMPARE NITH DEN HANrA ;RETURN BASE TO L ;RETURN IF NOI THE SAME ;L TO NLI~ MAN/B ;LOAD IT ;DEN MANTB ADDro i.. ;BASE 4 TO L ; / o* rP EXTENSION ;,NON CHECK BYIE 3 ;/GEl FOR COMPARE

00574l 005"?42 005743 005744 0057L~5 005"146

135 151 176 267 153 311

AORS

NOVE, L t-lOV L, C MOVA, M ORA A NOVL, E RET

0057W7 005"150 00575~ 005753 005754 005755 005756

135 151 C26 002 ]76 153 242 31]

TSTR

MOVE ,L NOVL ,C MY[ D,2 NOVA ,M NOVL, E ANA D RET

005757 005780 005751 005782 005763

135 151 167 153 311

AC,OR

MOVE, MOVL, NOV ;I, MOVL, RET

L C A E

C05764 005"765 005766 005767 005"!70 005771 005772 005773 005774 005775 005776 005777 006000 006001 006002 006003

176 150 275 153 300 654 !78 150 054 276 153 300 054 054 176

DCNP

POV t-1 A, NOVE ,L ."lOV L , O CHPpt HOV , E L RNZ [NRI. NOVA ,M NOV , 8 ~ ,NR L CMP M 40V L, E RNZ INR L INR L NOV A ,M

A-16

1 8080 HACRO ASSEMBLER, 0060O4 006005 006006 00600"7 006010 00601l 150 O54 054 276 153

VER 2.2

ERROR6 = 0 PAGE 17 HOVL.,B !MR L INR L CMP M MOV L,E REF

;/BYTE 3 NON :/COMPARE ;!~**TP - ALL DONE SUBROUTINE D!VC PERFORMS ONE CYCLE OF DOUBLE PRECISION FLOATING PT DIVIDE ENTER AT ENTI ON FIRST CYCLE ENTER AT ENT2 ALL THEREAFTER :SHIFT MOVING DIVIDEND ;IF CARRY I,NUM.GT.D ;COMPARE NUM WITH DEN IlF CARRY NOT SE;,NUM.GE.DEN ;CALL DOUBLE SUBTRACT ;SAVE BABE IN E ;BASE 6 TO L ;BABE 7 TO L ;/~*~TP IADO I ;PUT IT BACK ;RESIORE BASE ro L. SUBROUTINE LXFR MOVESCPTR TO EPTR MOVES3 WORDSIF ENTER AT LXFR ;/MOVE 4 WORDS ;CPTR TO L l CPTR> TO A IEPTR TO L ;/INCREMENT C ;/INCREMENT E TO NEXT I/TEST FOR DONE ;/GO FOR FOR TILL D=O I/NOW RESET C AND E I/RESET BACK BY 4 ;/PUT BACK IN E ;/NON RESET C I/BY 4 ;/BACK TO C ;/DONE

006012 0G6015 00602O 006023 006026 006027 00603~ 006033 006034 OO6035 006036 006037 006041 006042 006043

315 332 315 322

351 02"1 364 027

012 014 OI 3 014

ENT2: ENTI: OVER:

315 0,t6 0 I 3 135 151 054 O54 1"16 306 001 16"1 153 311

CALL DLST JC OVER CALL DCMP JNC OVER RET CAL.L DSUB MOV E,L NOV L,C INR L iNR I. NOVA, M ADI NOV M,A MOVl.,E RET

006044 0F16()46 006047 006050 006051 006052 006053 006054 006055 006060 006061 00~063 006064 006065 00606? 0060"10

026 004 151 176 153 167 034 025 3n2 046 014 t73 326 004 137 17~ 326 004 II? ~11

; ; ; LXFR: REPS:

MVI O,4 MOV L.C MOV A,H MOV L,E MOV M,A INR C !NR E OSR O JNZ REP5 MOV A,E SUI 4 MOV E,A MOV A,C SUI 4 NOV C,A RET

SUBROI; I NE LDCP r THIS SUBROUTINE COMPUTESTHE CHARACTERISTIC FOR THE FLOATING DIVIDE ROUTINE

A-17

] 8080 MACRO ASSEMBLER. VER 2.2 ERRORS 0 PASE =

REGISTERS ON EXIT: A = CONDIT:OK FLAG ISEE ERRORRETIJRKS D,E = G4RBAGE B,C,H,L = SAI.IE AS ON ENTRY REGISTERS ON ENTRY: {H,B) (H,CI (H,L} 006071 006074 006075 315 I14 013 I.OCP : 223 303 I04 014 CALL SUB - ADDRESS OFF DIVISOR = ADDRESS OF QUOTIENT = ADDRESS OF DIVIDEND CFCHE CCHK ;SET [=C;-IAR {H, B ] A=CHARIF~,L) T ;SUBTRAC ~0 GEl" NFN CHARACTERIS11~ ;GO CHECK t-OR OVER/UNE.ERF~OI.J ;AND STORE CHARAC.rERTIS[IC

SUBROUTINE LMCP THIS SUBROUTINE COMPUTES THE CHARACT~;R!SI:(j FO~ "HE FLOATING NUI. TIPLY ROUT;ME. REGISTERS ON Ex!r: A = CONDITION~L.AG (S~.E ERROqRE]L.IIRN~) D,F ~ GARBAGE B,C,I-I.L = SAIIE AS ONENTRY ; ; ; REGISTERS ON ENTRY: (H,8} (H,C) (H,_I = ~.DDRESS OFF MULTIPI_ICAND = ADDRESS OF PRODUCT = ADDRES~ OF MULTIPLIER CF I.-IE C E ;SET E=CIIAR(H,B:, A=CHARII,-I,I ;ADO FO GET NE14 CHARACrKRISTIC ;NOI4 FAI.I. IN~.O ]HE ROUTINE ;WHICH CHECKSFOR OVER/UKDERFLOi.I ;AND STORECI--!ARAC!ERTiS[IC

006100 006103

; ; 315 114 013 LMCP: 203

CALl. ADD

SBUROUTINE CCI.!K THIS SUBROUTINEC, HECKS A CHARACTERISTICIN THE ACCUMUL4TOR FOR OVERCLONOR UNDERFLON. IT THEN STORES THE CHARACTERISTIC, PRESRVING THE PREVIOUSLY COHPUTEDMANT!SSA SIGN. REGISTERS ON ENTRY:

A-18

8080 MACRO ASS[.tIDL.ER,

VER2.2

ERRORS 0 PAGE = (H,L} IH,B} (H,C; A : = = =

19

ADDRESS OF ONE OPERAND AOI)RESS OF OHER OPERAND ADDRESS OF" RESULT NE~I CHARACTERISllC OF" RESULT

REG!SrERS,ON EXII: CONDITION Ft.AG (SEE ERROR RETURNS) = GARBAGF B,C,H,L ~ SAME AS ON ENTRY 006104 [)OGI04 006106 006111 006113 006116 006120 006123 006124 006125 006126 006131 006132 CCHK: 3"76 I00 332 123 376 200 332 133 376 300 332 142 135 151 127 315 303 153 311 014 Olq 014 SrORC: 013 CP] JC CPI JC SP! dC MOV MOV NOV CALL NOV RET IOOQ SrORC 200Q OFLNC 300Q ~JFLNC E,L L,C D,A [NCR3 L,E ;ENTER HERE TO CHECK CHARACTERISTIC :CHECK FOR 0 TO +63 ;.JUMP IF OKAY ;CHECK FOR +6~ TO +12"/ ;JUMP IF OVERFLOW ;CHECK FOR -12B TO -65 ;JUMP IF UNDERFLOW ;SAVE t. IN E ;LET L POINT TO RESULT ;SAVE CHARACTERISrIC IN D :STORE CHARACTERISTIC ;RESTORE L. ;RETURN

SUBROUTINE OFLNC THIS ROUTINE WRITES A FLOATING POINT OVERFLONAT (H,C) SETS THE CONDITION FLAG, AND RETURNS. 006133 006134 006135 006140 OOGI1 135 OFL.WC : 151 315 161 013 153 MOV MOV CALL MOV RET E,L L,C ~OVR L,E ;SAVE L IN E ;SET L=CPTR, SO (H,L]=ADOR OF RESULT ;WRITE OUT OVERFLO~ ;RESTORE L. ;RETURN

SUBROUTINE UFLWC THI3 ROUTINE WRITES A FLOATING POINT UNDERFLOWAT SETS THE CONDITIONFLAG, AND RETURNS. 006142 006143 006144 006147 006150 135 UFLWC: 151 315 143 013 153 31! MCV NOV CALL NOV RET E,L L.,C WUND I.,E ;SAVE L. IN E ;SET L.=CPTR, SO (H,L)=ADDR OF RESUI.T ;NRITE OUT UNDEF[ON ;RESTORE L ;REI~RN

SUBROUIlNE CSIGN THIS SUBROUTINE COMPUTESAND STORE THE MANTISSA

A-19

1 BOBO MACRO ASSEMBLER.

VER 2.2

ERRORS = 0 PAGE ~0 S;GN E-OR THE FLOATING t-lLJ, = [PLY AND DIvinE

RE(;ISIERS ~I-t,l } {I-,BI (l.:,~J

ON ENTRY: = AI)DRESS OF ONE OPERAND = ADDRESS (I~IER OF OPERAHD "- ADDRESS RESU[ ~ OF

REGISTERS ON EXIT: A,D,E -: B.C,H.t. 00615! 00615 GU6155 006160 315 171 014 253 315 161 014 3ii ; ; ; ; CSTR: 15! 05q 05~ 05~ 167 153 CAt.L XRA CALL. REf GARBAGE ~ SAME AS ON ENrRY MSFH E CSfR ;SEt A-SIGN(H,L , E:.GIGN(H,EI ;EXCLL, SIVE ORSIGNSTO GFT t.,kI4 ;SIORE SIGN INTO RESUL; ; RE[ URN SLJBRO[iTINE CSR STORES VALUE IN A !N CPTR P PUtS LPTR IN ~ ;SAVE LPIR ;N E ;CPTR TO I. ;CPTR e ;TO t. ;STORE ANSNER ;LPTR BACK TO L

SIGN

006161 006162 006163 00616N 006165 006166 005167

t1OV L,L HOV I ,C IN~ I INR L INR [ NOV N,A NOV L,E

REr
;

SUBROU]INE THIS SUBROUTINE FEICHES THE 51GNS OF THE" MANTISSAS OF 1HE FLOATING POINT NUMBERS POINTED "."0 BY (1~.[.~ AND (H,B) INIO T~IE A AND E REOISFERSRESPECIIVE..~. REGISIERS DN EXIT: i : S I ON OF MANT I 5SA OF ( H, L E ~ SIGN OF MANTISSA OF (H,B) B,C,D,H,L = SANE AS ON E~,ITRY 006171 006176 006173 006J74 006175 006176 135 i50 05g 05N 05g 176 NOV E,L MOV[.,B {NR L INR L [NR L MOV A,M ERRORS= 0 RAGE ~NI 128 ;SAVE MANT SIGN ;SAVE LPTR ;BPTRTO I.. ;BPrR P;/~*TP ;ro L ; 6PTR2>TOA

1 8080 HACROASSEMBLER, VER 2.2 006177 3}6 200

A-20

,] :)G2l . 03~2.32 d.16.P.O ~ ":C6204 05" ~0G.~,3!. {., ~ r) ! F,;-; I .3~6 2,.36 OOF:RI I 05.5 O55 055 . 013 I + .:: -.t~:

HOVL ,E 140V E,A !NP... INR!. INR L NOV A,r-~ ~NI ![-;~ DCR t 52R I. t~ET

;[.PTR BACKrO L ;STORE BPIR MANT SIGN ;I.PTR 2 ; ." , " T;-" ;TO L ; LPTR 2):0 ;SAVE I.PFR "IANF SIGN ;[.PIR BACK ;lO L. SLJBROUTINE BCrL. HOVES8PTI,. CHAR TO LPrR CHAR DESTROYSE ;I..P]R TOE ;BPTR TO L ;BPTR 2
I~/ ~"- *T ,

8CTI. : ;.,06 : ~? 0(;6217 ,354 0 O6P..FO P. 5~ 006;.21 0062?2 176 00622.5 0O6226 00627 006230 05~ 054 054 167

MOV .... [. HOVl..B INRt. INR~. [NR L NOV A,K NOvL.,E ! NRL INR t INR L NOV M.A NOV ,E I. REI ///SQUARE R007

:to L ;BPIR CHAR TO A :L.I:/F:+ TO L ; ~ PTR 2 ~TOt. ;STORE BPFR CHAR IN LPTR CHAR ,LPT. R TOL

THE L REG PTS TO THE [0 BE OPERATED 0~;. THE B REG PTS FO THE LOC NHERE THE RESULT l!~ TO BE STORED THE C REG PTS TO lTtl0) SCRATCI4 AREA. NHERE: C ~ ITERATION COUN1 C+l = L REG C2 = B REG C3 TO C+6 = INTRL REG I C7 TO C+I0 "" INTRL REG 2 C+II T0 C+t~ = INTRL REG3 C+15 ~ 006232 006233 006234 0062S6 0Q6231 175 151 066 000 05~ 167 [)SORT: HOV A,L MOV L,C MY! M,0 INR L MOV M,A ERRORS = 0 PAGE 22 INRt. MOV M,8 INR L MOVC,L HOV L,A NOV A,H ;STR 8 IN 3RD ;WRO 0 r SCRTCH ;SET C TO INTRL. ;REG I ;SET L PTR AT ;SEt REGS FOR COPY ;STORE L IN ;~N[} NRD SCRTCH ;INITIALIZE ITER CCUNT

OOf~(7MACRO ASSEMBLER. VER 2.2 G06240 00524! 006242 006243 006244 006245 054 160 054 1;5 157 174

A-21

006246 006251 006254 006255 006257 006262 006263 006265 006266 006271 O062?2 0062?4 006276 006277 006302 006303 00G305 006306 O063O7 O0631O 006312 0O6313 0063]? 006320 006322 006323 006324 006326 OO632? 006332 006333 006335 006336 006340 006341 006342 006343 006346 006347 006352 006353 006355 006356

315 315 107 346 302 ]70 346 170 312 037 346 366 167 303 03"7 346 167 151 17! 3O6 II? 315

210 016 046 016 2OO 031 015 I00 3O2 014 I00 3O6 014 EP06: AGN4: OO4 210 016 O04

CALL COPY CALL GCHR MOV B,A ANI 2000 JNZ ERSO HOV A,B AN! ]OO0 HOV A,B JZ EPOS RAR ANI 1770 ORI I000 MOV M,A JHP AGN4 ANI 177Q MOV M,A NOV[_,C MOV A,C AOI 4 NOV C,A NOV A,H CALC COPY MOV A ~ Sb[ 4 MOV L,A HOV 8,C ADI lOO HOV C,A CALL LMUL HOV A,C SUI lOO NOV C,A SUI 2 HOV L,A HOV L.H HOV A,H CALL COPY MOV A,C AOl ]0O MOV A L, HOV8, C AOI 4 HOV C,A CALL LADD

;CPY TC INTRL ;PUT CHR IN A ;MAKE COPY ;CK NEG ;CK NEG EXP ;OlV BY 2

REGI

;SEr SIGN BIT ;SAVE ISl APPROX ;OlV BY 2

;SAVE IST APPROX ;SET REGS ;TO COPY IST ;APPROX ;INTO INIRL REG 2 ;FRH INTR[. REGI ;HULTIPLY INIRL REG ;TIMES [NTRL REG2 ;PLACE RESULT IN ;INTRI. REG3 ;COPY ORG INTO ;INTRI_ REGI i

3O6 OlO 137 012 32~ 010

326 0O2 15"~ 210 016 010 004 315 134 011

;ADD INTRL ;REG3 TO ;[NTRL REGI ;ANS TO |NTRL ;REG3

A-22

: :H.~: MAGRO fi A:-3LMBLER,VER 2.2 ERRORS = 0 PAGE 175 %(?6 004 I[Il 326 004 ! 17 315 000 315 046 326 O01 345 177 167 :71 ~6 003 157 I06 004 160 !7D 376 005 ~02 306 151 055 I16 054 174 315 210 ZIi 1.51 315 215 303 021 MOV ,I. A SLJI 4 NOV B.A SU! N MOV C,A CAL=t. DlV CALL GCHR SUI I AtI177,3 MOV M, A MCV A,C SUI [{ MOV I.,A NOV 8oM INR[-3 MOV M,B MOV A,B CPI 5 JNZ AGN4 MOV L,C DCR L MOVC,M I NR L NOV A,14 CALl.. COPY RET HOVL.,C CALL NZER JMP AI_DN

L Or,.J67 O06370 006373 006376 006400 ~06402 006403 006404 006405 005407 006410 006411 0064~ 2 0054I ~ 0064~ 5 006420 006421 006422 00642Z 90@424 006425 O06h 30 OOG432

;DIV [NTR[ REG ~ ;BY INTRI_ REG2 ;PIJ t ANSW Itl INTR[. ;REGI

011 0)6

~C PT TO [NrRL REG I ;GET ITER ;COUNT NON INCR

OIN At.DN:

;IF = 5 RTNANS ;OTHERNISE CONT ;COPY ANS INT0 ;LOC REQUESTED

016 ER%Q: 013 015 ; ; ;

;WRITE A F,..OATINO ZERO C+l :- L. REG

/.I/ 5 DIGI

IN(.; PT. OUTPUI

*~**ROUTINE TO CONVERTFLOATING PT. **NUMBERS TO ASCII AND OUTPUT THEM VIA A SUBROUTINE "~*CALLED 0UTR NOTE: THIS IS CURRENTLY SET *,*TO OOTS OUTPtJr ROUTINE 006440 006443 086446 036447 006450 3i5 332 012 CVt~l : 302 070 0!5 014 014 l 51 CALL JNZ I NR INR NOV ZCHK NNZRO C C L,C ;CHECK NEI-; Z[.r~O FOR ;NOT ZERO ;IT WAS, OFFSET C BY 2

A-23

I 8080 HACRO ASSEMBLER, 006451 006454 006457 006460 006461 006462 006463 006464 006465 006470 006471 006472 006473 006474 006475 006476 006477 006500 006501 006502 006503 006504 006505 006506 00S507 006510 006511 006513 006514 006516 006521 006523 006525 006526 006527 0O653O 006531 006534 006536 006541 006544 006545 006547 006550 006553 006555 006556 006560 006563 315 215 013 315 03! 016

VER2,2

ERRORS= 0 PAGE 24 CALL WZER CALL SIGN INRITE ZERO ;SEND SPACE ON POS ZERO ;PNT TO DEC|MAL CXPONENF L L L

; i 054 054 054 O54 25~ 167 303 227 015 126 NNZRO: 054 106 054 136 054 176 014 014 162 054 160 054 163 054 107 346 167 376 312 326 346 007 054 167 170 315 056 315 315 107 346 170 312 076 220 3?6 372 3J5

INR

177 I00 125 015 001 I00 NERO:

031 016 235 172 016 046 016 TSTB: I00 156 015 200 022 I74 015 054 016 GOTV:

[NR INR XRA ;SET IT TO ZERO NOV JMP NOSKP ;OUTPUT [T NOV 0, M I/GET THE NUMBER CCNVERT TO INR L NOVB, M INR L NOV [NR L ;14 NORD***TP NOV A,H INR C ;/OFFSET SCRATCH POINIER BY 2 INR C MOV L,C IlL NOT NEEDED ANY MORE MOV M,O I/SAVE NUMBER IN SCRATCH INR L MOV M,8 INR L NOV M,E ;I***TP INR L NOV 8,A ;/SAVE COPY OF CHAR & SIGN ANI 1770 ;GET ONLY CHAR, NOV M,A ;/SAVE ABS(NUMBER) CPI IOOQ ;CK FOR ZERO JZ NZRO SUl I ;/GET SIGN OF DEC. EXP AN| 1000 ;/GET SIGN OF CHAR. RLC ;HOVE IT TO SIGN POSITION INR L ;/HOVE TO DECIMAL EXP. MOV M,A ;/SAVE SIGN OF EXP. NOV A,8 I/GET MANT. SIGH BACK CALL SIGN ;/OUTPUT SIGN MVI I_,(TEN5 AND 3770) ;/TRY HULT. OR OIV. BY I00000 FIRST CALL COPT ;/MAKE A COPY IN RAM CALL GCHR ;/GET CHAR. OF NUMBER MOV B,A ;/SAVE A COPY ANI 100O ;/GET ABSOLUTE VALUE OF CHAR MOV A,8 ;/INCASE PLUS JZ GOTV ;/ALREADY PLUS MVl A,2000 ;/MAKE MINUS INTO PLUS SUB 8 ;/PLUS-2OOB-CHAR CPI 220 ;/TEST FOR USE OF I00000 JM TRYI I/WONT GO CALL MORO ;/WILL GO SO O0 IT

A-24

" MACRO ASSEMBLER,VER 2.2 ERROR.C. :, .305566 0065!0 00,571 0065"14 0065-/6 006601 006604 086606 006611 006614 006616 306617 006622 006624 006627 0065:{0 006631 0066:32 00661"{4 006635 006640 30664.2 006645 306650 006653 006656 006661 OOGGE,3 006666 00667 I (106".,72 006&75 tt06675 006300 006i03 006705 005710 006?I I 006712 006713 006714 00671E 006"7~0 006"72:3 006724 C06",25 006"72.. 006"72? 0057:31 0067~4 OO6735 ."; 0 b U05 I 5"7 303 141 r}15 056 P4I 315 1"72 016 :31b 046 015 3"16 O01 362 222 015 315 054 016 306 001 167 ~,03 20"- 01.5 :376 007 362 211 015 151 055 055 066 005 13"1 315 377 015 :376 012 362 122 016 31.5 303 015 315 ..327 015 :316 303 0 302 250 076 305 315 060 000 315 107 016 ~ 07 315 NIl .9|6 1"70 346 0"17 515 151 .316 .306 260 315 060 O(JO 151 055 055 I "/6 376 005 076 256 314 060 [300 126 025 ~62 .3i ~ b~6 001 .315 ~?"/ ;51 O55

{.

PAGE25 ;z INCREMENTDEC. EXPONENT 5 BY ;/UPD.&TE MEH ; GO "RY AGAIN AND 3VTQ) ;.NON USE JUST rEN ;/PUT ;T IN RAM ;/GET "."4ARACTERSTI C I ;,M,JS: 3F[ IN RANGE "0 6 1 ;/AII. EAST ITS I 014.. BIGGER ;/M.;3INUt. OF DIV BY 10 ;/!NCR[NFNT DECIMAL EXP, ; :UOOA HEM rE ;/NGI,; TRYAGA[I4 ;/rEST FOR LESS THAN 7 ;~NOPE -- 7 OR GREATER ;/SET UP DIGIT COUNT ;!IN IST WORDOF SCRAfCH ;/t DIGIrS ;/SAVE CHAR. AS LEFT SHIFT COUNT ;/E,I4[FT LEFI PROPER NUMBER ;/TEST FOR 2 DIGITS hERE ;/JMP IF 2 DIGITS TO OUTPUT ;/OUTPUT FIRST DIGIT ;~M(~L FIPL..Y THE NUMBER I0 BY ;/PRIN[ DIGIT IN A ;/MORE DIGITS? ;/NO SO PRINT E ;/BASIC CALL TO OUTPUT :/GET DECIMAL EXP ;/SAVE A COPY ;/OIJTPLJT SIGN ;/GET CXP BACK ;/GET GOODBITS ;/GO CONVERT2 DIGITS ;/MAKE A INFO ASCII ;/OUTPUT DIGIT ;/GKT D!GIT COUNT ;IB~CK UP TO DIGIT COJNT ;/TEST FOR DECIMAL PT ;/PRINT . AFFER IST DIGIt ;/JUST IN CASE ;/OUTPUT . IF IST DIGIT ;/NON DECREMENT DIGIT COUNT ;/UPDATE MEM AND LEAVE FLOPS SEr ;/SERVES AS TERM FOR DIGO& CVRT ;/MULT. BY I0 (START WITH X2l :/LEFT SHIFT I : X2 ;/SAVE X2 IN ~RESULT= ;/SET TO TOP OF NUMBER

TRYI: TS"I: MOGN=

OKI: MOSKP =

POPD=

DIGO:

MULTI

AOI 5 HOVP,A .;M:~fsrB MVl t.,(lCl.; CALL COPT CALL GCHR. CP~ I JP OK " CA[L MORT., AT)I M0V M, A JMPTST I CPI "? JP MDGN NOV I. ,C DCR L DCR L MVl M,5 NOV E, A CALL LSF f CP1 120 JP T NOD CALL Ol GO CALL MULTT CALL OlGO JNZ POPO MVI A,305,3 CALL OUfR CALL GETEX NOV 8 ,A CALL S !ON NOVA ,B AWl 7"~Q CAL,. CTNO AD 1 2500 CALL OLITR HOVL ,C DCR L DCR L HOVA, H CPI 5 VV A. 2560 I CZ OUTR M0V O,M DCR O MOV M, O NET MVI CALL LSF T MOV L,C DCR L

A-25

8080 MACRO ASSEMBLER, VER 2.2 006736 006737 00674I 006742 006743 006746 006747 006751 006752 00675,~ 006755 006756 00676~ O06762 006763 O06765 006766 006771 006772 006773 006774 006775 006776 006777 007000 007001 007002 007003 007004 007005 007006 007007 0070 0 0070 I 0070 2 0070 3 0070 4 0070 5 0070 6 0070 7 007020 007021 007022 007023 007024 007025 007026 007031 007033 007035 007040 ~71 306 117 174 315 171 326 1;7 036

ERRORS = 0 PAGE 26 NOV A,C ADI ]lO NOV C,A MOV A,H CALL COPY NOV A,C SUI llO NOV C,A MVl E,2 MOV L,C DCR L CALL TLP2 NOV L,C NOV A,C AOI !20 NOV 8,A CALL DADD OCR l. MOV A,M MOVl.,B DCRI. ADC M RET MOV L,C DCR 1. XRA A HOV H,A DCR E RM INRI. INR L INR L NOV A,M RAL NOV M,A DCR L MOV A,M RAL MOV M.A OCR L MOV A,M RAL MOV H,A OCR [. MOV A,M RAL JMP TI.OOP ANI 2000 MVI A,240Q dZ PLSV MVl A,255Q ;/SEI C TO RESULT

011 210 016 011 002

;/NOW C SET RIGHT ;/SHOH RAN TO RAM TRANSFER ;/SAVE X2 FINAL.L.Y :/MUST RESET C ;/BACK TO NORMAL ;/NOW GET (X2)X4=X8 ;/BUT MUST SAVE OVERFI.ON ;/GET X8 ;/SET UP TO CALL DAOD ;/SET 8 TO X2 ;/TO X2 ;/ADD TWO LOW NORDS ;/BACK UP TO OVERFLON ;/GET IT ;/NOW SET TO X2 OVERFLOW ;/ITS AT B-~ ;/ADD WITH CARRY - CARRY WAS PRESERVFO ;/ALL DONE, RETURN OVERFLOW IN A ;/SET PTR FOR LEFT SHIFT OF NUMBER ;/BACK UP TO OVERFLON ;/OVERFLOW=0 IST TIME ;/SAVE OVERFLOW ;/TEST FOR DONE ;/DONE WHEN E MINUS ;/MOVE TO LOW ;/*+TP EXTENSION ;/SHIFT LEFT 4 BYTES :/PUT BACK ;I**TP - ALL DONE ;/GET LOW ;/SHIFT LEFT I ;/RESTORE ]T ;/BACK UP TO HIGH ;/GET HIGH ;/SHIFT IT LEFT WITH CARRY ;/PUT IT BACK ;/BACK UP TO OVERFLOW ;/GET OVERFLOW ;/SHIFT IT LEFT ;/GO FOR MORE ;/GET SIGN BIT ;/CPACE INSTEAD OF PLUS ;/TEST FOR + ;/NEGATIVE

055 315 003 016 151 171 306 012 107 315 006 013 055 176 150 055 216 311 151 055 257 167 035 370 054 054 054 ~75 67 O55 76 O27 67 O55 76 027 67 O55 76 O27 303 346 076 3~2 076

LSFT: TLOOP: TLP2:

002 016 200 240 042 0~6 255

S[GN:

A-26

1 8~Jf)0 M~CRO ASSEMBLER, YER 2.2 ERRORS = 0 PAGE C0"!042 007045 007045 007047 O07OL.O 007051 007052 007053 [;CT05LI 00"~0~ 007061 00705~ 007063 ~)OV06~ 00"!066 00"!070 007072 00"7075 007 O0 ~07 Ol 007 02 007 03 007 O~ 007 ~7 00~ ~0 007 ~! 007 ~g 007 !7 007 ~ 007 25 007 ~6 007 3] 007 37 00"~ 40 007 4~ 007 42 007 ~5 007 4g OOV 5~ 00? 53 007 54 007 56 OOV ~ 007 63 007 6~ ~07 55 ~07~70 .~It. OGO ~00 151 054 Q54 054 176 ~II 315 107 137 ]05 004 151 1"71 306 Oil 117 173 396 ~00 312 Ilg 315 137 171 II5 157 17~ 315 210 151 054 303 047 315 000 303 I00 315 151 107 3~5 107 137 346 200 312 145 035 163 [70 303 25~ 034 303 140 036 377 0~4 326 012 362 15~ 30B 01~ 107 173 315 303 170 PI.SV: CALf. OUIR GCHR: GETA: HOV L,C INR L [NR 016 MORD: RE[ [:At.[. GETEX NOV E,A MOV B,L INR 8 NOV L,C MOV A,C AD[ IIO MOV C,A MCV A,E ANI OOQ JZ DIVlT CALL LMUL MOV A,C NOV C.t. MOV L,A MOV A,H CALL COPY MOV L,C INR L JMP GETA CALL LDIV JMP FINUP CALL CTHO ~OV 8,A CALL. GETEX ~OV ,A ANI 2000 #Z AODI DCR E MOV MOV A,B JMP [NPOP [NR E JMP FINIT HVl E,377Q INR E SUl 120 OP LOOP AOI 120 MOV 8,A MOV A, CALL DIGO MOV A,8 ;/OUTPUT SIGN I/GET CHARCTERISTIC T I/MOVE TO I ~/~rp ~/FErCH iNTO A ; / DONE ;/~UL OR I);V DEPENDINGON EXP ;/SAVE DECIHAL EXP ;/SET UP IO MULT OR OIV ;/NON BOP POIN]ER SE~ ;zt. POINTS [0 NUHBER TO CONVERT ;/POINT C AT ~RESULT~ AREA ;/IN SCRATCH ;/NON C SET RIGHT ;/NON TEST FOR MUL ilTES~ NEGATIVE DEC. EXP. ;/IF /XP IS * THEN DIVIDE ;IMULT, ;/SAVE LOC. OF RESULf ;IC=LOC OF NUMBER(It NAS DESfROYED) ;/SET L TO hOC. OF RESUTL ;/SHON RAM TO RAM TRANSFER ;/~OVE RESULT TO NUMBER ;/NON GET DECIMAl. EXP ;/USE PART Or GCHR ;/DIVIDE ~/CONVERT TO 2 DIGITS ;/SAVE ONES DIGIT ;/GET DECIMAL EXP ;/SAVE A COPY :~TEST FOR NEGATIVE ;/BUMP EXP BY I SINCE 2 DIGITS ;/DECREMENT NEGATIVE EXP SINCE ~ DIGITS ~/RESTORE EXP WITH NEN VALUE ;/NOW DO 2NO DIGIT ;/GO OUT ~ND AND REST FQ DIGITS ;/COHPENSAfE FOR 2 DIGITS ;/CONVERT 2 OlGIf BIN TO BCO ;/ADD UP TENS DIGIT ;/SUBTRACT IO ;/Tilt NEGATIVE RESULT ;/RESTORE ONES DIGIT ;/SAVE ONES OIGIT ;/GET ~ENS DIGIT ;/OUTPUT IT ;/SET A TO 2ND DIGIT

016 OIR FINUP:

015 GETEX: 016 011 016 01~ 015 016 EINIT: 015 ADOI: 016 CTNO: LOOP: 01~ DIVlT: TWOD:

0[5

A-27

1 8080 MACROASSEMBLER, VER 2.2 007171 007]72 007173 0n7~75 007]~S 007200 00720~ 007204 007206 007207 007210 007211 007212 007213 007214 007215 007216 007217 007220 007221 00722~ 007223 007224 007225 007226 007227 007230 00723! 007232 007233 007~3W 007235 007241

ERRORS= O PAGE 28 RET MOV A,C ADI 5 NOV C,A HVl A,(TENS/256) CALL COPY MOV A,C SUI 5 MOV PET MOV 8,1"I MOV H, A MOV A,M INR L NOV D,M INR L HOV E,M ]MR L M0V L.M HOV H,8 HOV B,L NOV L,C MOV INRI. NOV A ,M MOV M,D INR L M0V H.r INR L NOv M,B

COPT: 306 076 315 326 117 147 176 054 126 05W 136 05~ 156 ~qO 151 167 176 162 05~ 163 05W 160 311 303 120 000 240 000 000 TENS: TEN : ; ; ; ; ; ; ; ; ; ; ; ; ; 0O5 2~0 016 005 COPY:

;,COPY ;/SET

FROH I0 N TO RAM

C TO PLACE TO PUT

;/COPY IT ;/NON RESET C ;/lrs RESET

;/SAVE RAM H ;/SET TO SOURCEH ;/GET 4 WORDS INrO THE REGS.

;/LAST ONE ERASES L ;/SET TO DESTINATION RAM ;/SAVE 4TH WORDIN 8 ;/SET TO DESTINATION ;/SAVE FIRST WORD ;/SAVE THIS NORD IN A {INPUT SAVES C HERE ;/NON PUT 2NO NORD

;/ALL ;/ALt.

4 COPIED NOH DONE = 100000.

08 303Q,I20Q,OQ,21Q ;1303240f0} 08 240Q,0Q,0G,4Q ;/12(8) = SCRATCH HAP FOR l/O

CONVERSION ROUTINES

RELATIVE TO (C+2}USE C-2 DIGIT COUNT C-I OVERFLOW C HIGH NUMBER - MANTISSA C+i LOW NUMBER C~-2 CHARACTERISTIC C3 DECIMAL EXPONEXT {SIGN E MAG.] C+4 TEN**N C+5 TEN**N C+6 TEN**N C+7 RESULT OF HULT & DIV C.8 AND TEMP FOR X2

A-28

80@0 MACRO ASSENBLER,

VER 2.L-t. ERRORS C+i3 C+II

= 0 PAGE I. FOR NUMBERTO GO INTO (INPUT ONLY) DIGIT JUST INPU1 (INPU1 ONLY) ,***O/GIN INPUT

007245 007247 007252 007254 007257

076 315 076 315 303

2"77 060 000 240 060 000 272

ERR:

MVI A,277Q CAt.L OUTR MVI A,240Q CALL OUTR JMP PRMT i/ll

;ERROR IN INPUt ;/SEND A ?{SPACE) ;/OUTPUT SPACE ;/GO PRONPT USER AND RESTART

9 II ") c D,G,T INPUT ROUTINE )

/L. POINTS TO WHERE PU[ TO INPUT NUMBER /C POINTSTO 13(10) WORDS SCRATCH OF 007252 00"7253 007264 0072G6 00"7267 007270 00727~ 007272 007274 907277 307302 007303 00730) 00"7307 0073]] t)07314 007316 007321 007323 007326 00733} 007334 007336 007337 00734] 007342 007~43 00734h 00"1345 007350 105 17I 306 017 157 160 014 07B 272 315 060 000 315 305 017 n54 ~67 315 142 017 376 376 312 034 017 376 025 3i20Bl 0~7 375 360 302 215 315 253 0!7 315 ]07 016 346 1"17 137 346 I00 007 267 107 1"13 312 353 0!6 076 200 INPUT : MOV 8,L MOV A,C ADI 17Q MOV L,A MOV M,8 INR C INR C MVl A,~72Q CALL OUTR CALL ZROIT INR L MOV M,A CALL GN~M CPI 376Q JZ DECPT CPI JZ INEXP CPI 360Q ,.I~Z ERR CALL FLTSGN CAL~ GETEX ANI [77~ NOV E,A ANI IOOO RLC ORA A NOV O,A MOV A, JZ AP[.S MVI A,2000 ;/SAVE ADDRESS WHEREDATA IS TO GO ;/IN SCRATCH ;/COMPUTE LOC. IN SCRATCH ;/PUT IT ;/OFFSE[ SCRATCH POINTER ;/BY 2 ;IPROMPI USER WITH : ;/OUTPUT : ;/ZERO NUMBER ;/AND ZERO ;/DECIMAL EXPONENT ;/GET INTEGER PAPT OF HUM ;/TERM=.? ;/YES ;/TES] FOR E ;/YES - HANDLE EXP ;/TEST FOR SPACE 1ERM (2hOB-26OB) ;/NOT [.EOAt. TERN ;/FLOAT AND SIGN IT ~/GET DECIMAL EXP ;/GET GOOD BITS ;/SAVE COPY ;/GET SIGN OF EXP ;/INTO SIGN BIT ;/SET FLOPS ;/SAVE SIGN ;/GET EXP BACK ;/JHP [S ~ ;/HAKE MINUS ~

PRMT:

TSTEX:

SCALE:

A-29

8080 MACRO ASSEMBLER, 007352 G07353 007354 007355 007357 007362 007365 00737 007~71 007374 807377 007401 007402 007405 00740"? 007412 007415 007~.17 007420 007423 007426 007430 00743l 007~34 007435 007~36 007437 O07u~l 007444 007445 007446 00?447 00?450 007451 00?454 007455 00?456 007461 00?464 00?48? 007472 007475 007477 00750~ 007503 00750~ 007~05 007506 007510 007511 007512 223 200 O56 315 346 376 372 315 326 157 303 056 315 315 346 267 315 326 235 !72 OIS I07 OIB 077 005 005 017 054 005

VER 2.2

ERRORS= 0 PAGE 30 SUB E ;/NON ITS + ADD B ;/SIGN NUMBER NOV M,A ;/SAVE EXP (SIGN & HAG.) MVI L,(TEN5 AND 3770] ;/TRY MORO~ITH 105 F!RSI CALL. COPT ;/[RANSFFR TO RAM CALL GETEX ;/GET DECIMAL EXP ANI ??Q ;/GET HAG. 01= EXP CPI 50 ;/TEST FOR USE O~ lO~ob JM TRYTN ;/NONT GO - TRY !O CALL MORO ,/~ILL GO SO DO IT SUl 5a ;/NAG = MAG -5 NOV N,A ;/UPOATE DEC. EXP IN MEN JMP [NT5 ;/GO TRY A~A]N MVl L,(TEN AND 377Q} ;/PUT TFN IN RAM CALL COPT CALL GETEX I/SET UP FOR LOOP ANI 77Q ;/GET MAGNITUDE ORA A ;/TEST FOR 0 JZ 5AVEN ;/DONE, MOVE NUN OUT AND GET OUT CALL MORD ;/NOT DONE - DO 18 SUI IO ;iEXP = EXP -I NOV t.l,A ;/UPDATE MEN JMP !NT! ;/TRY AGAIN NOV L,C ;IZERO DIGII COUN[ DCR L ;/SINCE ITS NECESSARY DCR L ;/TO COMPUTE EXP. MVI M,O ;/ZEROED CA~L EPI ;/GNUM IN MIDDLE HOV E,A ;/SAVE TERMINATOR NOV L,C ;/MOVE DIGIT COUNT I0 DCR L. ;/BACK UP FO DIGIT ~gLJHT DCR .. NOV B,M ;/GOT DIGIr COU~T CALL GETEX ;/SET L TO DEC. IZXF NOV M,8 ;/PUT EXP NOV A,E ;/TERM BACK TO A JMP TSTEX ;/TEST FOR E~OR-XX CALL FLTSON ;/FLOAT AND SIGN NUMBER CALL E,AVEN :/SAVE NUMBER IN (L) rEF:P CALL ZROIT ;/ZERO OUT NUM. FOR INPUTTING FXP CALL GNUM ;/NON [NPU[ EXPONENT CPI 360Q ;/TEST FOR SPACE FERN. JNZ ERR ;/NOT LEGAL -- TRY AGAIN NOV L,C ;/GET EXP OU~ OF MEN INR L INR L ;/EXP LIMITED TO 5 BITS NOV A,N ;/GET LONEST 8 BITS ANI 37Q ;/GET O00O BITS NOV B,A ;/SAVE THEN INR L ;/GET SIGN OF EXP NOV A,N ;/INTO A

API.S:

INTS:

355 016 241 ~RYTN: ]72 OJ5 107 015 077 [NTI: 257 017 054 016 001 DECP~:

303 015 017 151 055 055 000 315 245 017 151 055 315 160 107

3O3 314 016 315 253 017 315 257 017 305 ~17 315 142 017 378 360 302 245 151 054 054 i76 345 037 I07 054 178

INEXP:

A-30

1 8080 MACROASSEMBLER, VER2.2 {]O1513 00"1514 0G75]5 (1~;520 0r)7522 007523 007524 00"1525 007526 007527 007531 00"1532 C07533 007534 00753"1 007542 007595 00754"1 007552 007554 007557 007580 00758] 007562 00?563 007565 0075~0 007572 007575 0075~? 007600 007602 007603 00760q ,]07G0~ 0076;0 0075!3 0075~4 007S15 007620 001621 08"1622 00"2523 007524 007~25 007628 007827 00753l {)07532 007833 007634 26"1 ]70 372 078 220 054 206 157 I71 306 157 156 17g 3]5 303 315 376 312 376 302 151 054 054 054 066 303 37B 312 328 370 376 380 315 163 315 267 300 315 151 054 054 206 1~7 055 176 316 157 055 178 315

ERRORS = 0 PAGE 31 ORA A MOV A,B JM USEIT MVI A,OO !;LJB INR L ADD M NOV M,A NOV A,C AD] :SO HOV L,A NOV L,M MOV A,H CALL COPY ..JMP SCALE CALL INP CP! 2400 JZ GNUM CP[ JNZ TRYP MOV[.,C INR[. INR L INR L MVI M,2OOQ JMP GNUM CPI 253Q JZ GNUM SUI 260Q RM CPI 12Q RP CALL GETN MOV M,E CALL MULTI ORA A RNZ CALL G(N MOV L,C INR L INR L ADD M MOV BCR MOV A,M ACE OO MOV M,A BCR L MOV A,M ACI OO ;/SET FLOPS ;/INCASE NOTHING TO aO ;/IF NEG. USE AS + /IF" * MAKE/O--X = -X /POINT Ar EXP /GET REAL. DEC. EXP /PbT IN MEN /NON GET NUMBER BACK" /GET ADO OF L /L POINTS TO L. OF NUMBER /NOW L POINTS TO NUMBER /RAM TO RAMCOPY /COPY [T BACK /NO~ ADJUST FOR EXP /GET A CHAR /IGNORE LEAO[NG SPACES /TESt rOR /NOT H[NUS -/MINUS SO SET SIGN /IN CHAR [.OC. ./.~*rP ;/SET - SIGN

123 017 ~00 USEII:

015

210 33] 333 240 I~2 255 17~

0]6 016 000 017 017

GNUM:

200 142 Ol~ 253 [42 017 260 012 277 017 327 015 277 017

TRYP: TSTN:

;/IGNORE + ;/STRIP ASCII ;/RETURN IF TERM ;/TEST FOR NUMBER ;/ILLEGAL ;/SAVE DIGIT ;ILOC. OF DIGIT STORAGE TO L ;/SAVE DIGIT ;/MULT NUMBERBY [0 ;/TEST FOR TOO MANY DIGITS ;/TOO MANY DIGITS ;/GET DIGIT ;/SET L TO NUMBER ;/*~*TP ;/ADD IN THE DIGIT ;/PUT RESULT BACK ;/NON DO HIGtt ;/GEl HIGH TO ADD IN CARRY ;/ADD IN CARRY ;/UPDATE HIGH ;/**TP EXTENSION ;/ADD IN CARRY

000

000

A-31

~080 HACRO ASSEMBLER, 007636 007637 007640 00764l 007642 007643 007644 007645 007650 087553 00"7654 00765"7 007660 ~07662 007663 007664 00"7655 00"7566 007667 00"/670 007671 00?672 007675 0076q6 C07677 007700 00"1702 007703 00"7704 007705 007706 007707 007710 007711 00771~ 007713 007714 007715 007716

VER 2.P

ERRORS= 0 PAGE 32 MOVft,A RC OCR L DCR L MOV 8,M INR 8 MOV M,8 CALL INP JMP TTN MOV L,C JMP FLOAT NOV A,C AOi 15Q MOV L,A MOV E,M MOV L,E [NR!. MOV M,C HOV L,C MOV C,E MOV A,h CALL COPY MOV C,A RET MOV A.C ADI 160 MOV L,A MOV A,M RET HOV L,C XRA A HOV M,A INR L NOV M,A INR L MOV M, A INR L MOVM, A RET END ;/**oTP ALl. DONE :/OVERFLOW ERROR ;/BUMP DIGIT COUNT NON ;/GET DIGIT COUNT ;/BUMP DIGI! COUNT ;/UPDATE OIGIT COUNT ;/GET NEXT CHAR ;MUST BE NUN, OR TERM ;POINT L AT NUMBERTO FLOAT ;GO FLOAT IT ;/PUT NUMBER (1.) IN :/GET ADO OF L ;/GET L OF RESUt.T ;/POINT L AT (L~ ;/SET TO 2NO WORDTO SAVE C ;/SAVE C IN (L) +I SINCE If WILL BE I)EGTROYED ;/SET UP TO CAt.L COPY ;/NON L&C SET ;/RAM [0 RAM COPY ;/COPY TO L ;/(L)*I RETURNEDHERE 50 S1 AS C ;/NON EVERYTI41NG HUNKY-~ORRY ;/GET DIGIT ;~LAST LOC. IN SCRATCH ;/PUT [N L ;/GET DIGIT ;/ZERO NUMBER ;/*~TP

i67 330 055 055 105 002 160 315 333 000 EP~: 303 175 01"? 15i Ft.[SON 303 325 17} 6AVEN 306 015 }57 054 I 61 151 II3 174 315 210 016 117 31l 171 306 016 157 175 31I 151 257 167 054 167 054 167 054 157 311

GEIN:

ZROIT

:/NON SET .t;IGN ; / DONE

ro -*

NO PROGRAMERRORS

A-32

8c8~: r,I,,,,,jRO

A:-..~,EHB~(.R, VER2.2 ERRORS 0 PAGE --33 SYHBOL TABLE

: Ol A AOOP AORS OCI4K CCHK COM2 CSIGN D DEtPT OIVIT OSU6 ENT2 EQUL FINUP FXL2 GETEX GOTV INCR3 INP INT5 LO00 [.1~8 I. ADG LL~B LOOP M MO~N MSFH NORM OF|.~I OVER PSW SAVEN SHIO 5UOZ TLP2 TSTI TSTR USEJ[ NMANI W~ERC O2 O3 04 00000"! 00~73~ 005741 (]05342 006104 005050 006151 000002 007434 007114 005446 006012 004624 * 007~00 0052G3 00~107 006556 005703 000333 007365 005106 005116 004542 004577 007153 000006 0066l] 006171 005255 005566 006027 000006 0076~7 0046~4 00467~ 007003 00660~ 00574"? 007523 005630 00565~ ABCH ADDZ APLS ~CTL. CCMP COPT CSTR DADD DECR DI.ST DTST2 ~PI ERR FLOAT GCHAR GETN H INDF! INPOP INTR LOO] LI29 I_ASD LHCM LSF[ MADO MOSKP MUi. fl NORMI OFL~C PLSV REP3 SCALE SIGN IEN TRYI "[STB [WOO HCHAR HOVR ZCHK 005064 004726 007353 006215 005533 007|72 006161 005406 005724 005351 004422 0076~5 007245 00532~ 00550| 007677 000004 005604 006653 005177 005110 00512] 005002 005127 006~77 005244 006627 006727 005255 006133 007042 004447 007331 0070~ 007241 006574 00654~ 007122 005637 005561 0053~2 ACPR AGN4 B RHIN CFCHE COPY CTNO DCLR DFXL DRST E EPOS ERSO FLTSG GCHR GNUM INCR INDFC INPUT KPGO LO02 LI31 LDCP LHCP LSUB HANT M~NCH NCHK NOTO OKI POPO REP5 SCCFG SP TEN5 TRYP TSTEX UFL.HI HFLT ~UNO ZMCHK 005757 005306 000000 005042 005514 0072|0 00715i 005435 005316 005370 000003 006302 00643i ~07653 007046 007542 005666 005650 007262 005166 005037 005124 006071 006100 004540 004757 000300 004604 004652 006622 006650 006046 005722 000006 007235 007570 007314 005550 001607 00553 005332 ADDI ALDN 88014 C COMI CRIN CVRT DCMP DIGO DSQRT ENTI EQ02 ~[NIT GETA GOON INCR2 INEXP INTI l. LO03 L.ADD LOIV LMUL LXFR ~AXOH MORD NNZRO NZRO OUTR PRMT REP6 SCHAR STORC TLOOP TRYTN TSTN UFLWC NIND NZER ZROIT 007145 006421 005075 000001 005026 004515 006440 005"164 0O6703 006232 006020 004634 807140 007047 004473 005706 007461 007415 000005 005113 004534 004400 005137 006044 0000~7 007054 006470 006525 000060 00"7272 005271 005313 006~23 007002 007405 007575 006~2 005577 0056i5 007705

RAC/gw

A-33

Вам также может понравиться