floating-point package for intel 8008 and 8080 microprocessor - ll lab (171286)

Upload: psc098

Post on 06-Apr-2018

239 views

Category:

Documents


2 download

TRANSCRIPT

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    1/46

    UCRL-51940

    FLOATING-POINT PACKAGE FORINTEL 8008 AND 8080 MICROPROCESSORS

    Michael D. Maples

    October 24, 1975

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

    I_AV~=IENCEI_IVEFIMOREI.ABOFIATOFIYUniversity ol Calilomia ~ Livermore ~

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    2/46

    NOTICE.sponsored by tht: United $~ates G~ven~menl.Neilhe~the United States nor the United ~tates I:n,~rgyof their employees, IOr lilly of their eorltlilctclrs~warranty~ express t~r implied, or asstltlleS ~t]y legldliability or responsihilit y fnr the accuracy,apparatus, product or ])rc)eess disclosed,represents that its rise would IIt~l illlr liegeprivlttely-owned rights."

    Printed in the United States of AmericaAvai.] able fromNational Technical. information ServiceU.S. Department of Commerce5285 Port Royal RoadSpringfield, Virginia 22151Price: Printed Copy $ *; Microfiche $2.25

    NTIS""Pages _Sellin_.g Price1-50 $4.0051-150 $5.45151-325 $7.60326-500 $10.60501.-1000 $13.60

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    3/46

    DISCI.AlMBRThis documeut was prepared as an account of work sponsored by an agency of the United StatesGnvernment.Neither the United States Government or the University of California nor any of theiremployees,makesany warranty, express or implied, or assumesany legal liability or responsibility forthe accuracy, complete.aess, or usefulness of any information, apparatus, product, or process disclosed,or represents that its use wouldnot infrioge privately owned ights. Refarenceherein to any specificcommercialproduct, process, or service by trade name, trademark, manufacturer, or otherwise, doesnot necessarily constitute or imply its endorsement, recommendation, r favoring by the United StatesGovermnent r the University of California. The views and opinions of attthors expressed herein donot necessarily state or reflect those of the United States Goveromentr the University of California,and shall not be used for advertising or product endorsement urposes.

    This report has been reproduceddirectly from he best available copy.Available to DOE nd DOltcontractors from heOffice of Scientific aud Technical nformation1.O. I~ox 62, OakRidge, TN 783~Prices available from (615) 576-8401,FIB626-8401

    Available o the public from heNational Technical Informalion ServiceU.S. Department of Commerce5285Port RoyalRd.,Springfield, VA 2161

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

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    4/46

    Distribution CategoryUC-32

    LAWRENCE LIVERMORE LABORATORYUniversityof Califomia.."Livermore,a/#ornia 4550

    UCRL-51940FLOATING-POINT PACKAGE FOR

    INTEL 8008 AND 8080 MICROPROCESSORSMichael D. Maples

    MS. Date: October 24, 1975

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    5/46

    Contents

    AbstractIntroc]uc tion ............................... 1Selection and Use of Operations ..................... 2Ac knowledgmen t s ............................. 7Appendi~. Source Listing of Float:iug-Po[nt Package .......... A-I

    -iii-

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    6/46

    FLOATING-IOINT PACKAGEFOR INTEL 8008 AND 8080MICROPROCESSORS

    AbstractThe Lawrence Livermore

    I,aboratory has used a scientific-notation mathematics package thatperforms floating-point arithmeticwith Intel 8008 and 8080 micro-processors. The execution times for

    the mathematical operations -- add,subtract, multiply, divide, andsquare root -- range from 3 to 77 ms.Instructions for using the floating-point package and a source listingof it are included.

    IntroductionFor the last two years, Lawrence

    Livermore Laboratory has used ascientific-notation mathematicspackage (f].oating-point package) withthe Intel 8008 and 8080 micropro-cessors.* This package allowsaddition, subtraction, multiplication,division, and square root operations.Table i shows the execution timesfor these operations. The programlisting of the complete 8080 floating-point package is in the Appendix.The package uses some I/O calls froman octal debug routine (ODT) that hasbecome a standard part of all inhouse*Reference to a company or productname does not imply approval orrecommendation of the product by theUniversity of California or theU.S. Energy Research & DevelopmentAdministration to the exclusion ofothers that may be suitable.

    -i-

    microcomputers, but this need not benecessary. The appropriate ODT calls(6 or 7) in the I/0 routines caneasily be placed by assembly languageequivalents.

    Table i. Worst-case execution timesfor the 8080 microprocessorusing a 0.5-~s clock withthe package in programmableread-only memory (PROM).

    Operation Execution times(ms)

    AddSubtractMultiplyDivideSquare root

    3378

    77

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    7/46

    The floating-point package uses24 bits of mantissa for approximately7-1/2 digits of accuracy inexpressing numeric data. Obviously,this decreases rapidly when complexiterative computations are used.Nevertheless, the package is function-ing quite satisfactorily in many

    experiments with accuracy require-ments of one part per hundredthousand.

    The package also indicates under-flows and overflows by placing zerosin the mantissa and a I00 (octal)the exponent word.

    Selection and Use of OperationsAll registers described in this

    paper point to four-word internalmathematical storage areas unlessotherwise stated. Also, before per-forming any mathematical operation,all needed operands must be placed inthe same random access memory (RAM)along with any needed scratch areas(i.e., all must reside in the samepage of ILAM).

    The first problem is how to getthe decimal numbers into the correctformat for use in the floating-pointpackage. The routine INPUT performsthe conversion for all teletypewriterinput. Also, it easily adapts toconverting any BCD numeric inputsfrom either digital pane], meters(DPM) or thumbwheel switches. To useINPUT, set the L-register to pointat the location in RAM ~ere theresult of the conversion is to beplaced and set the C-register to pointto another location in RAM where

    intermediate steps are to be al-culated. Then do a call to the INPUTroutine that does the appropriateconversion (see Table 2).The resulting floating-point numberhas three 8-bit words of mantissa anda fourth word that contains 6 bits ofexponent, 1 bit for mantissa sign,and 1 bit for exponent sign (seeFig. i). Negative mantissa areindicated only by the sign bit as themantissa itself is in sign-magnitudeform. But the negative exponents arein twos complement form.

    If an addition (LADD) is wanted,place the pointer to one addend inthe L-register, the pointer to theother addend in the B-register, and apointer in the C-register. TheC-register points to a four-wordscratch area used during the additionprocess. The result is pointed to bythe L-register (see Table 3).

    -2-

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    8/46

    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, SCRPGMVI L, STWD

    MVI C, SCRCALL INPUT

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

    STWD Mosts~gn~ficantwordSTWD " 1 ~

    LeastI1 I i I [ J j significantword765432 10STWD~31I I I I l lJ~~Exponenl" sign~ I = negative

    Mantissa sign~ 1 = negatiSe

    Fig. i. Floating-point word format.This format all.ows repre-sentation of numbers from6.46235 * 10-27 to4.61168 * ].018.

    The subtraction (LSUB) routineis very similar to the additionroutine. The L-register holds thepointer to the minuend and theB-register holds the pointer to thesubtrahend. The C-register once againis used as a four-word scratch area,and the result is placed in the areapointed to by the L-register,destroying the previous data residingthere (see Table 4).

    If a multiplication (LMUL)wanted, again use the L-, B-~ andC-registers. The pointer for themultiplicand resides in the L-register,the pointer for the multiplier in theB-register and the pointer to theresult in the C-register (see Table 5).

    -3-

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    9/46

    Table 3. Assembly language setup for addition.

    Program Comments

    ~I H, SCRPGMVI L, ADDI

    MVI B, ADD2MVI C, SLRCall LADD

    ;Set H to scratch page (I~M).;Pointer four-word addend and final;result.;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

    MVI B, SUB2MVl C, SCRCall LSUB

    ;Set H to match scratch page (RAM).;Pointer to four-word minuend and;final result.;Pointer to four-word subtrahend.;Four-word scratch area.;Turn control over to subtraction;routines.

    -4-

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    10/46

    Table 5. Assembly language setup for multiplication.

    Program Comments

    :~IV~. , SCRPGMVI L, MLCAN,~FVI , MlplrMVI C, RsltCALL LMUL

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

    Division (LDIV) like multiplica-tion uses the C-register to hold thepointer to the result (quotient).The L-register pointer refers todividend and the B-register pointerrefers to the divisor (see Table 6).

    The square root routine (DSQRT)uses the L-register to point to thenumber to be converted, the B-registerto point to the final convertednumber, and the C-register to pointto a 16 octal-word scratch area (seeTable 7).

    The final routine is the outputroutine (CVRT). This routine con-verts the binary floating-point

    number pointed to in the L-registerto its ASCII equivalent and types itout on the teletypewriter. Thisroutine uses a 17 octal-word scratcharea pointed to by the C-register(see Table 8). The final dataprinted in scientific notation. Theoutput routine like the INPUT routineis easily modified to output its datato an internal (memory) register fordisplay on an LED display.

    Table 9 gives a simple programthat allows the user to check outthe various routines and examine thevarious binary floating-point numbers.

    -5-

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    11/46

    Table 6. Assembly language setup for division.

    Program Comments

    MVI H, SCRPG~I L, dvdndMVl B, dvsrCALL 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, SCRPGMVI L, NUM~I B. CUTNM~I C, SCRCALL DSQRT

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

    -6-

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    12/46

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

    Program Comments

    ~IVl I, SCRPG~I L, OUTNM

    MVI C, SCRCALL CVRT

    ;Scratch page (R~M).;Number to be converted from floating;to decimal and printed in scientific;notation on teletypewriter.;17 octal-word scratch area.;Turn control over to convert routine.

    Acknowledgments

    Thispackage was based on apackage purchased from David Mead ofRecognition System. Major modifica-tions were made by Hal Brand to allowASCII I/0 and a triple-precision

    mantissa. Overflow-underflowproblems were resolved by Frank Olken.A hardy thanks is given to EugeneFisher for foreseeing the need forsuch a package.

    -7-

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    13/46

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

    Program Comments

    ORG 4500Q

    SCRPG EQU IIQOPI EQU OQOP2 EQU OPI + 4RSULT EQU OP2 + 4SCR EQU RSULT + 4MVI |I~ SCRPGMVI L, OPI~I C, SCRCALL Input5~I L, OP2MVI C, SCRCALL INPUTMVl L~ OPIMVl B~ OP2MVI C, RSULTCALL LDIV

    ~I L, RSULTMVI C~ SLRCALL CVRT

    HALT

    ;Program starts at location i00;(octal) page;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.;L-pointer now RSULT.Scratch area.;Output number starting in locationRSULT to teletypewriter.End.

    -8-

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    14/46

    Appendix. Source Listing of Floating-Point Package

    I~O;SO ~ACRO SSEMBLER, VERP.2 ERRORS 0 PAGE I

    004400ODO060000333(100300000077

    004400004403 315004406 3020044!1 315004414 312004417 303004422 315004425

    ////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 CONVERSION ROUTINESIII/NEi4 ROUTINE COMMENTS////ARE PRECIEDED BY /l//tO[HER CHANGESARE" NOTEDBYI///MODI~IED BY FRANK OLKEN 6/28175

    ORG 44000OUTR EOU 600INP EOU 3330HINCH EQUEQU;;

    3000077Q;/SET TO OOfS rTY ROUTINE;/SET READ TO ODTS INPUT;MINIHUH CHARACTERISTIC N[TH SIGN EXTENOED;HAXIMUH CHARACTERISTIC NITH SIGN EXTENDED

    15] 014 LDIV: CALL CSIGN332 012 CALL ZCHK022 Oll JNZ O~ST234~ 012 CALL BCHK250 013 dZ INOFC257 013 JMP NZERC342 012 OTST2: CALL 8CHK]33 014 JZ OFLWC

    004430 135004431 151004432 315 035 ,.313004435 153004436 3i5 020 014004441 ~51004442 :;15 351 0]2004445 026 027004447 I53 REP3:004450 315 012004453 0~5004~5~ 318 0~3 01~00~45"] i 75004~60 1510O~N61 I 1700~62 315 351 018004~65

    MOV E,LHOV L,CCALL DCLRNOV L,ECALL ENTIMOV L,CCALL OLSTMVI 0,23M0V L,ECALL ENT2DCR OJZ GOONMCV A,LNOV L,CNOV C,ACALL DLSTHOV 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

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    15/46

    18080 MACROSSEMBLER, VER2.2 ERRORS = 0 PAGE004466 131 NOV E,C004467 IIV NOV C,A00~~70 303 047 Oil jMP REP3;004L~73 315 341 013 GOON: CALL AORS00~476 372 1]5 011 JH CR[N004501 I75 NOV A,L004502 I51 NOV L,C004503 lit NOV C,A00~50~ 315 351 012 CALl_ DLST004507 115 MOV C,L004510 153 MOV L,E00~511 315 07I 014 CALL00h514 311 RET004515 315 114 013 CRIN: CALL004520 223 SUB004521 376 I77 CPI004523 312 133 01~ JZ004526 306 001004530 315 104 014 CALL004533 311 RET

    004534 257004535 303

    004540 076 200

    004542 315 357 013004545 315 342 012004550 310

    LDCPCFCHEE177QOFLWCICCHK

    ;I.PTR TO E;CPTR TO C;CHECK IF" RESUI. IS NORHALZED

    ;LPrR TO A;CPTR TO L;LPTR TO C;SHIFT QUOTIENT LEFT;COHPUTE TI4ECHARACTERISTICF PESUL.T;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 AOOITION SUBROUTINE;;LAO0: XRA A ;/**SET UP TO ADDJMP LADS ;/NON DO IT;;; ....... ........................... ....................//// SUBTRACTION SUBROUTINE

    1.SUB:;;;;;LAOS:

    MVl A,200Q

    CALL ACPRCALL BCHKRZ

    ;/***,SET UP TO SUBTRACTSUBROUTINE LADSFLOATING POINT ADD OR SUBA 128 ON ENTRY SUBA 0 ON ENTRY ADDF-S F,FIRST OPER DESTROYEDBASE II USED FOR SCRATCH;SAVE ENTRY PNT AT BASE ~;CHECK ADDEND/SUBrRAHEND= ZERO;IF SO, RESULT=ARGSO RETURN;THIS MILL PREVENT UNDERFLON NDICATION ON;ZERO + OR - ZERO

    .4.-2

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    16/46

    iB0110 MACRO ASSEMBLER. VER 2.2 ER.4ORS :, t} PAGE 3

    00,~55! 316 133 013 CALL004554 -ll;? 34 l! JL EO02004557 12"1 NOV0, A004560 332 I/V 01 i ..JC ..LrB30456;~ 223 SUB E004564 3N6 ITI AN I 127004566 I27 NOV00N567 135 MOVE,[OOuSqO 151 MOV .,COO~Sq 054 INR L004572 I 63 MOV M,E004573 150 HOV .,B004534 303 ~0~ 0]1 JMP NCHK0045T/ 1"13 LI_TB: MOV004600 222 SUB D004601 3~6 133 AWl I~004603 !2~ MOV D,A004604 07~ 030 NCHK: MVl A,24004606 232 CMP O004603 322 2]4 011 JNC SHIO004612 026 030 HV[ D,24004~ 4 2B7 BH~O: ORA A004B~5 ~5 ~~00~2 ~ALL DA~T004628 025 DCR O004R21 $02 214 Oil dNZ004624 1~5 EOUL: NOVA,I..004625 270 CHP 8004626 302 234 011 ,JNZ EQ02004631 151 MOV004632 U54 INR L004633 156 HOV L,H004634 315 002 012 EO02: CALL LASD004637 315 35~ 013 CA~L ACPR004642 336 002 CPI 2004644 302 5~ 011 JNZ NOTO00464~ 303 215 013 JMP WZER00~65~ 026 001 NO~O: ffVlOON65N ~q2 ANA 0004655 312 3~6 011 JZ ADDZ00~660 315 34"1 013 CALL. TSTR00N663 31 ~11 OI JZ004666 175 MOV A,L004663 150 MOVL ,B80~670 I0~ HO~004671 315 046 013 5UBZ: CALL DS~JB0046"/4 315 357 011 CALL MANT004677 315 347 013 CA1.L TSTR004702 312 255 012 JZ 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 .PrR Ct4AR FROMBPTR CHAR;DIFFERENCE [0 D

    ;F.GT.S IF L.NE.B;C PTR TO L;C PTR I TO L;PESTORE.;CHECK WHATTO;SAVE ANSWER;TEST FOR ZERO ANSWER

    ;WRITE FLOArlNO ZERO AND RETURN;WILL TEST FORSUB;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

    A-3

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    17/46

    8080 MACRO ASSEMBLER, VER 2.2 ERRORS = 0 PAGE 4

    004705004706 150004707004710 1710047~] I10004712 13b004713 I07004"714 315004717 170004720 I01004721 I~7004722 153004?23 303

    004726004731004734004737004742004745004750004753004756

    004757004760004761004"/6200476400476500476600476700477000477100477200477400477500477600477"7005000005001

    044 014

    255 012; COPY

    315 133 013 ADOZ:322 337 01l315 215 014315 357 0]1 ADO2:315 008 013322 322 013315 370 012315 266 013

    135151176346 200153054054O54137176346 1772O3167055055O55

    M0V A,LMOV .,ONOV B,AHOV A,CM0V C,BMOV E,LNOV 8,ACALL LXFRM0VMOV 8,CMOV C,ANOV l.,EJMP NORMTHECALl. CCMPJNC AOO2CALL BET!CALL MANTCALL OAD~JNC SCCFGCALL ORSTCALL INCRRET;; TItIS ROUTINESTORESTHETHE SIGN HAS PREVIOUSLY;MANT: HOV E,LM0V L,CMOV A,MAN;NOV L,ENR LINR LINR LMOV E,AMOVANIAOO EH0VM. AOCR LDCR.OCR LRET

    ;AND RETURNINTERCHANGE;l.AND B;CPTR TO A;8PTR TO C;LPTR TO |.;CPTR TO 8;tiOVE BPTR> tO LP R

    ;NORMALIZE ESLII r ANDRETURNLARGER CHARACTERISTIC I0 tHE RESULf

    ;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 RETURNMANTISSA SIGN IN IHE RESULIBEEN COMPUTED BY LASD.;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

    SUBROUTINE _ASD

    A-4

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    18/46

    MACRO .C~SEMBI.FR, VER 2.2 ERROR~; = 0 PAGE

    00500..:. 315 Ill 014 I_AF~D: CALL-ISFI-,rio5005 273 CIIPr~O500G 332 064 012 JC ABCHO0501l 302 0"/5012 JNZ BBCH.OOEO4 203 ADD E005.01.~ 3."32042 012 JC SHINO05flPO 3~5 341 013 CALf AORS005i0~3 362 lOB 012 JP LO0000~J026 31~.) 364 013 CO~l: CALl OCMP005031 332 124 012 ,.JC _13]005034 302 lie 012 JNZ LO01~95037 OIB00~ LO0~: HVI A,~00504~ 362 Ilii 012 JP LI2800~)050 315 364 013 COM2: CALL OCMP00=~053 332 113 012 JC LO0300505~ 302 121 012 JNZ LImBO05OBI 303 03"/ 012 JNP LO02O050~4 315 341 013 ABCH; CALL AORS00506"~ 3"12 lOB 012 JM LOOO00507~- 303 oaB 012 ,JHP COMI0050-15 3~5 341 013 BBCH: CALL AORSU05100 372 ~I~ 012 ~FI L128O051O3 303 050 012 JMP COM200510G 257 I. 000 XRA A00~510~ 3~I RET~0~)II~ O-IB 00~ LO0I: MY! A,I005~ IP i~II RET005~13 0"16 003 L003: MVI A,300(5l ~5 ~. I RET00511~ 076 ~00 L128: MVl A,~2800~~ 20 31 RET905~2; 076 201 L!29: MVI A,129005~23 311 RET005124 Ol~00512~ ~II RET;

    00512/ 315 )33 0~3 LMCM: CALl. CCMP005~ ~2 300 RNZ005133 315 3~4 013 CALL OCMP005136 311 RET

    uTlt. l~rY ROUTINEFOR LADSCAL.CULATES TRUE OPER ANO SGNRETbRNS ANSbER IN;FETCII MANT 51GNS, F IN A,O;COMPARE"SIGNSiF" ,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 LOAD1;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

    SUBROUTINE LMCMCOMPARES THE MAGNITUDE OFTWO Ft.OATING PNT NUMBERSZ I IF ,C I IF F.L.T.S.;CHECK CHARS;RETURN IF NOT EQUAL;IF EQUAL, CHECK MANTS

    A-5

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    19/46

    8080 MACRO ASSEHBLER, VER 2.2 LRRORS = 0 PAGE

    005137 315 151005i42 315 332005145 312 25?005150 315 342005153 312 257005156 135005]57 15l005160 315 035 013005!63 153005164 026 030005166 315 3700051"71 332 244 01@305174 !75005175 15100517S 117005177 315 370 012005202 175005203 ]5~005204 I~7005205 025005206 302 166 012005211 315 341 013005E14 3"72 )00 014005217 135005220 15100522] 315 351 012005224 153005225 3!5 ;14 0]3005230 203005231 376 200005233 312 142 014005236 326 O01005240 315 104 014005243 311005244 175005245 ~51005246 I1"?005247 315 006 0i3005252 303 177 012

    /

    014 LMUt. :El20~3012013

    KPGO:

    [NTR:

    MADO

    CALL. CSICNCALL ZCHKJZ NZERCCAIL BCHK.JZ WZERCH0V E,LNOV _,ECALl DCL.RNOV L,EMVl 0,24CAl.[. ORSTdC HAOONOVA,[.HOVl.,CHOV C,ACALL. ORST~OV A,LNOV .,CNOVDCRD JNZ KPGCCA_[. A(IRSJM L.MCPM0V E,LNOV I.,CCALL OI..STMOV L.,ECALL CFCHEADD ECPI 2000JZ U~LNCSLJICALL CCHKRETNOV A,LNOV .,CNOv C.ACALL OADO,JMP INTR

    ; SUBROUI NE NORM

    SUP.ROUI NE I.MULFLOATING OIIITNULTIPI YL. PTR ~ 8 PTR TO C PTR;COMPUrE SiGN Or RESULT AND SORL;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;St41f. T !. PTRRIGHT;U]I.L ADO t.9 PTR F C :; INTERCHANGE; L AND;C P1RS;SHIFf PRODUCTOVER; ]NTERCHANGEI L ANDC PTRSBACk, I C;ORIGINAL>

    :l

    t.IORE CYCLES F" Z 0:TEST IF RESUL[ 15 NORttAI_ITE[};IFNORt-IAL,ZED GO CONPUrf_ :.IAR;SAVE LPTR IN E;SET L:CPTR;I.EFT SHIFT RESULT0 NORMAL.;_tL;RES CORELPTR;0THERNISESET 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[NSAFE .OR NORMALIZE:CHECK CHARACIERIS[IC AND TCRE ~; RE URNINTERCHANGE;1_ ANO;C PTRS

    ;ACCUHUt.ATE PROOUCT

    A-6

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    20/46

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

    0--5255 135005256 315 I01 013005261 12700 .E,262 153005263 315 332 0120(15266 312 215 013()[152"1005272 267005273 3"12 ,313 012

    THIS SUBROUrlNE WILL NORMALIZE A FL.OAIINO POINTNUMBFR, PRESERVING TS ORIGINAL SIGN.WE CHECK FOR UNDERFLOW ND SEI THE CONDITIONFLAG 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 INDFXL FI.OAT LINSIGNEO (POS!TIVE) TRIPLE PRECISIONAT [H,L);REG!STERS ON EXIT:

    A = CONDITION FLAG (SEE ERRORRETURNS1D,E : GARBAGEB,C,H,L = SAME AS ON ENTRYNORM:NORMI:FXLI:FXL2:REPG:

    00527~005277 336 300005301 "~12 143 013005304 315 351 0120O5307 02500531~ 303 271 012005313 303 303 013 SCHAR:005316 135 DFXL:005317 054005320 054005321 054005322 257

    MOV E,LCALL GCHARNOV D,AMOV L,ECALL ZMCHKaz WZERMOV A,MORA AdM 5CHARMOV A,DCPI MINCHdZ WUNDCALL DLSTOCR OJMP REP8JMP INCR3MOV E,LINR L1 NR LINR LXRA 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;MANTISSASET FLAGSIF MOST SIGNFICANT BIT = I THENNUMBER S NORMALIZED AND WE GO TOSTORE THF CHARACTERISTICOTHERWISE CHECK FOR UNDERFLONCOMPAREWITH MINIMUM CHAR!F EQUAL THEN UNDERFLONSHIF] MANTISSA LEFTDECREMENTCHARACTERSTICLOOP AN TEST NEXT BITSTORE THE CHARACTERISTIC USING.THE SAME CODE AS THE INCREMENTENTER HERE TO FLOAT UNSIGNEDINTEGERFIRT SAVE L. IN EM#KE (H,L) POINT CHARHAKE (H,L) POINT CHARMAKE (H,L) POINT CHARZERO ACCUMULATOR

    A-7

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    21/46

    I0080 MACRO SSEMBLER, VER 2.2 ERRORS = 0 PAGE B005323 167 MOV M,A005324 153 MOV L,E005325 026 030 FLOA: MVI 0.24005327 303 263 012 dMP FXL2

    005332005332 054005333 05H005334 1"/6005335 055005336 266005337 055005340 266005341 311

    005342005343005344005347G05350

    ;STORE A PLUS (+) SIGN;RESTOREL;ENTER HERETO FLOA[ INTEGF.P:PRESERVING ORIGINAL SiG~ IN (FI,I..|*~;SET UP CHARACTERISTIC;GO FLOAT tHE NUMBER

    THIS ROUTINE SETS THE ZERO FIAG IF IT OEIECTSA FLOATING ZERO AT {H,L}.

    SUBROUTINE ZCHK

    SUBROUTINE ZMCHKTHIS ROUTINE SETS tHE ZERO FLAG IF [I OEIE("rsZERO MANTISSA AT {H,LI

    ZCHK:ZMCHK: ]NR I.INR [.NOV ADCR L.ORA MOCR [.ORA MRE~

    SUBROUTINE BCHK

    ,H;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.;RETURNSHITH ZEROFI.I,C~ S.F~ APPROPR!AFI-I.Y

    ; THIS ROUTINE CHECKS (h,8} FOR F!0ATING PI ZERO;135 BCHK: NOV E,L :SAVE LPTR IN E150 NOV L,B ;SEt L=BPTR315 332 012 CALL ZCHK ;CHECK FOR ZERO]53 M0V L,E ;RESTORE L=LPTR311 RET ;RErURN; SUBROUrlNE DLST; SHIFTS DBL FIORD ONE PLACE LF805351 054 DLST: INR L005352 05h INR L ;i* TP005353 176 MOV A,M ;LOAD IT00535~ 267 ORA A ;KILL C~RRY005355 027 RA:. ;SHIFT IT LEFT005356 167 M0V M,A ;STORE IT

    005357 055 DCR L8080 MACRO ASSEMBLER, VER 2.2 ERRORS = 0 PAGE 9

    005360 176 NOv A,M ;LOAD IT

    A-8

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    22/46

    .3353F~

    UOSX6500536"~

    OOh3"/O0053710053720053730053743053"7500537600!33770054000054000540;.005403G05405

    005406005407lObq!0054l 3[~1354t0054150~4 I1f]0542 ~0U54220C5423005424q~542b0054270044~00 ) 4

    02":

    16705.$02"7167

    135176037167054176037167054176037167153~ll

    150054t 5417t3054054205i 6"7150054I153054167175

    ;;;;DRST

    ;;DADD:

    I~ALMCV H, ADCR LHOV A ,MRALMOV H. ARET

    HOVE ,l.MOV, t.lRARMOVM, AiNR LMOV , 11HOV M,AHOV , tiRARMOV M, ANOV t ,ERE

    NOVE ,L.HOVL ,B.NR LINR L.MOVA ,MMOV ., EINR LINRI.AD9 41"10/H, ANOV L,BINR LNOV A ,hlMOV I_, EI NRI.ADC ."1HOVN, AHOV L ,BMOV A,M1!OVL. E

    ;SHIFI T ;.EFTCARRY SCT BY FIRST SHIFTWILl. BE iN LSB OF SECOND;/*o~!P EXTENS!ON;!~,,Al[. DI.)NE [P

    SJEROUT N[ DRSI:.4141[- T~:, OUBLEORD NE [ ACE":0 TrlE RIGHTDOES Nor AFF[.ET D;..,,*r

    p/IODIFIED RIOI4T SHIFT !P;I.OAD F RSr WORD;ROTATE:STORE. I; / " ," o IP;;.OAD .E3NDNOR[);SHIFT IT Rl611!;S]ORE;..~,, iP EXIENS[ON

    ;/,,~rP -- ALL DONETP5UBROUIINE OADDADDS INO DOUBI.E PRECISIONNORDS, 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

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    23/46

    18080 MACROSSEMBLER, VER2.2 ERRORS 0 PAGE ]0005432 216 AOC M005433 167 NOV M,A005434 3II RET

    005435 257 OCLR: XRA A005436 167 NOV005437 054 INR L005440 167 MOV M,A005441 054 INR L005442 167 HOV M,A005443 055 OCR L005444 055 DCR L005445 311 RET

    005446 135 DSUB: MO E,L005447 054 INR L005450 054 INR .005451 176 MOV A,M005452 150 MOV L,8005453 054 INR L005454 054 !MR L005455 226 SUB005456 153 MOV L,E005457 054 INR L005460 054 INR L005461 167 NOV005462 055 DCR L005463 176 HOV A,M005464 150 NOV L,B005465 054 INR L005466 236 SB8 M005467 I53 HOV L,E005490 054 [NR L005471 167 NOV M,A005472 055 DCR L005493 176 NOV A,M005474 150 NOV L,8005495 236 SB8 M005496 [53 HOV L,E005477 167 NOV M,A005500 3]] RET

    SUBROUTINE GCHAR

    ;ADO WITH CARRY;STORF ANSWERSUBROUTINEDCL.RCLEARS THO SUCCESSIVELOCATIONS OF MEMORY

    ; .i ,~ .I o TFEX FN.C~ON;,TP ZERO 3; / " rP - ALl. r.~ONE/***~ALL NEW OSUB -- SHORTER***SUBROUTINE DSUBDOUBLE PRECISION SUBTRACT;SAVE BASE IN E:/o*Tp EXTENSION;/START WITH LOWS;/GET ARG;/NOW SE~ UF TO SbB

    ;/NON DO Ii;/NON MUSTPUT 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

    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

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    24/46

    MACRO A(.;SEt.IBLER, ER 2.~-; ERRORS = 0 PAGE II

    005501005502005503 05k00550H I005505 3~6 1"7:100550"1 .~06 10000551 356 100005513 31

    0055!u 13501)5515 150605516005521 1530055E3 315 !01 013~055~6 n55t)055~7 0550055& 055CaSh31QQ5532 31]

    GCHAR

    L.EFTMOSTBir.REGISTERS ON EXIT:

    A =. C!-IARACTERiSIlC OF (H,!.) NITH SIGN EXTENDEO[. = [ORIGINAL Li + ~B,C,(~,E,14 : SAHL AS ON ENIRYINR I_INR LINR t.NOV A,MAN[ llqQAOI IOOQXRI IOOQRET

    SUBROUTINE CFCHE

    ;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

    THIS SUBRO~JTINE RETURNSTHE CHARACTERISTICS OF THEFLOATING POINT NUMBERSPOINTED TO BY {H,L) AND(H,B) IN THE A AND E REGISTERS RESPECTIVELY,WITH THEIR SIGNS EXTENDED NTO THE I.EFTMOST BIT.REGISTERS ON EXIT:

    CFCHE

    CHARACTERISTICOF (I-I,L.; NITH SIGN EXTENDEDCHARACTERISTIC OF (H,8) NITH SIGN EXTENDEDB,C,H,I_ = SAME AS ON ENTRYD = AMOV E, LNOV L ,8CALL GCHARHOV L. EMOV E, ACALL GCHARDCR LOCR LDCR LNOV 0, ARET

    SUBROUTINE CCMP

    ;SAVE LPTR IN E;SET L. = BPTR;GET CHAR(H,B) WITH SIGN EXTENDED N;RESTORE L = LPrR;SET E=CHAR(H,8) NITH SIGN EXTENDED;SEt A=CHARtH,L} WITH SIGN [XFENDEO;RESTORE L = I.PTP;RESTOREL = I_PTR;RESTOREL. = I_PTR;SET D=A=CHAR(H,L) WITH SIGN EXTENDED

    TNIS S~JBROUTINE COMPARES HE CHARACTERISTICS OFFLOATING POINT NUMBERSPOINTEO TO BY (H,L) AND (H,B).

    A-II

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    25/46

    18080 MACRO SSEMBLER, VER 2.2 ERRORS 0 PAGE

    005533 315005536 12"700553? E230055~0 02?005541005542 311

    ;;;;CCMP

    ;;;;;;;;;;;;WFLT

    LABEL::

    THE ZERO fL:P-FLOP IS SETCHAR{H,B). IF CrlAR(H,LI IS LE~S THAN L.HAR(I~,,B:THE CARRv .BIT HILL BE SET. THENREGIST!~R5 ON EXIT:

    CHARACTERISTIC OF (H,!~ WIIF, SIGN EXTENCECCHARACTERIST!C OF :H,B~ [.~ITH SIGN EXIENDEOAB,C,I!,L = SAME AS ON ENTRYCALL CFCHEMOV D, ASUB ERAL~OV A,DRET

    ;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~;RErURNERRORRETURNS

    THE FOLLONING CODE IS USED TO RETURN VARIOUSERROR CONDITIONS. IN EACH CASE A FLOATING PCINTNUMBER 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 (+) RESULT (-;UNDERFLOW 377 000 000 000 I00OVERFLOW 17"/ 37? 37? 377INDEFINITE 077 377 377 377 077NORMAL C00 XXX XXX XXX XXXNORMAL ZERO 000 000 000 000 I00

    000 000 000 300377 3"7 3?7 @77377 377 3"77 ~77XXX XXX XXX XXX(AL~AYS ~ETURNS0)

    ENTR~ POINTS:WUNO - WRITE UNDERFLOWWOVR - WRITE OVERFLOWWIND - WRITE INOEFINITEWZER - ~RITE NORMAL ZEROMACRO VMANT,VCHAR,VFLAG,LABEL ;WRITE FLOATING NUMBERMVl D,VCHARCALL NCHARMVI A,VMANTCALL WHANTMVl A,VFLAGORA A

    ;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

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    26/46

    ~I08(1 ACRO SSEMBLER, VER L~.2 ERRORS ~ 0 PAGE 13

    00555200555500555q00556000556I00556100556300556600557000557300557500557600557700557700560100560~005606005611005613005614005615005616005617005620005622005623005626005627

    005630005631

    RETENDM;+NUNO: HFLT026 I00 + MVI D,OOO40H315 237 013+ CALl.. NCHAR076 DO0 UFLHI:: MVI A,~OOOOH

    +315 230 013+ CALL NHANI076 377 ~ MVl A,OOOFFH267 + ORA A311 + RET+NOVR: WFLT026 077 + MVl D,OOO3FH315 237 013+ CALL NCHAR076 377 ~OFLWI : MVl A,OOOFFI4

    315 230 013+ CALL WMANT076 177 + MVl A,OOO/FH~67 + 0RA A311 + RET*WIND: WFLT026 077 + HVl D,OOO3FH315 237 013+ CALL NCHAR076 377 INDFI:: MVI A,OOOFFH315 230 013+ CALL HMANT076 077 + MVl A,OOO3FH267 + ORA A311 + RET;05~ NZER: INR054 INR05N [NR066 MVI257 XRA315 CALL267 ORA311 RET

    ; ROUTINE TO;WHANT: DCR55

    167

    I00230 013

    MOV

    ;RElURN {NHANr RESTOREDH,L.))O, OOQ,377Q,LIFi.NI ;14RI rE UNDERFLON

    377Q,77Q, 77Q,OFt.NI

    ;LOAO CHARACTERISTIC INTO O REGISTER;WRITE CHARACTERISTIC;LOAD MANTISSA VALLIE;ME ASSUHE HERE rHAl ALL BYTES OF MANTISSA;ARE 1HE SAME;WRITE THE MANTISSA;SET ACCUMULATOR lO FLAG;SET FLAGS PROPERLY;RETURN {WMANT RESTORED (H,L));~RIIE OVERFLOW

    377Q,77Q,77Q,INDFI

    ;LOAD CHARACTERISTIC INtO D REGISTER;WRITE CHARACTERISTIC;LOAD MANTISSA VALUE;WE ASSUME HERE THAT ALL BYTES OF MANrlSSA;ARE THE SAME;WRITE rHE MANTISSA;SET ACCUMULATOR O FLAG;SET FLAGS PROPERLY;RETURN (NMANT RESTORE[);WRITE INDEFINITE;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 ACCUMULATORO FLAG;SET FLAGS PROPERLY;RETURN (WMANT RESTORED ~I,L?)

    L ;WRITE NORMAL ZEROL.LM,IOOQ ;STORE CHARACTERISTIC FOR ZEROA ;ZERO ACCUMULATORWMANT ;STORE ZERO MANTISSAA ;SET FLAGS PROPERLY;RETURNWRITE MANTISSA FOR ERROR RETURNS

    LM,A

    ;POINT LEAST SIGNIFICANT BYTE;OF MANTISSA;STORE LSBYTE OF MANTISSA

    A-13

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    27/46

    18080 MACRO SSEMBLER, VER .2 ERRORS : 0 PAGE

    005632 055 OCR L005633 16"/ MOV M,A0056~4 055 DCR005635 167 MOV005636 31I PET

    005637 0540056[+0 054005841 054005642 176005643005645005646005647

    O05650005651005652005655005656

    005657005660005661005664005665

    346 200262167311

    135151315 177 013153311

    135151315 215 013153311

    ;POINT TO NEXT I.EAS! S:GN;FICAJr;OF MANTISSA;STORE NLE, BYTE Or 14.~NTISSA;P0]NT TO HCST S[GN]~ lEANT BY~L; 0F MANT;STORE MSBYTEOF HAt,IT~SA;RETURN (H,L) POINTS;FLOATING ~OINT RESLk l"; ROUTINE TO NRI1E CHARACTER[ [C FOR ERROR RETURNS; NOTE: NE PRESERVE. ORZOINAL MANTISSA SIGN: ON ENTRY .q CONTAINS NEWCHARACTER,r!sTIC TO 86 STORE).NC~AR: INR :.. ;SET :,H,I ) TC POINI IC CHA4ACTERISTICINR .. ;PART or ABOVE[MR L ;PART OF" AFIOVENOV A,~. :i.OAO CHARACTERISTICA;AND MARTISSA SIGNAWl 200Q ;JUSI KEEP MANTISSA SIGNORA D ;OR IN NEW CHARACTERES;[C."-1Ov H,A ,.~.cfORr_ ,~T BACKRET ;RErLJRN WI1FI IH,: I POINT;OF RESOLT:SOMEONEELSE N]I.L FIX UP (H,i.)

    SUBROUTINE INDFC

    !NDFC: NOV E,LNOV L,CCALL AINONOV L,EBET

    WZERC

    This ROLTINE WRIrES ,t, FLOATING INDEFINITF, SESIHIS NRITFS WRITESA FLOArING POINT I/.IDEF lki "EA[ {H,C~, SET[; THE CONDITION FlAG AND RErURNS;SAVE L.PTR IN E;SET I.=CPTR SO {H,L~--AD.:JR OF RESJLT;NR!TE INDEFINITE;RES ;ORE L=LPTR; RETURN

    SUBROUTINE.IZERCTHIS RObTINE WRITESA NORHALFLAOTING POINT ZEROAT (H,C), SETS THE CONDITIONFLAGAND RETURNSMOV E,LMOV L,CCALL NZERMOV L,ERET

    ;SAVE LPTR IN E;SETL:CPTR SO {N,L)=ADDR OF RCSdLT;WRITE NORMALZERO;RESTORE L=LPTR;RETURNSUBROUTINE INCR

    A-14

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    28/46

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

    005666005621 376 877005673 312 I66 013005676 12700567~ 024005700 303 306 01300570A 054005~0~ 054005"105 054005706 076 177005710 242005711 12700571R 176005"713 346 200005715 262005716 167005717 055005"720 05500572~ 055005722 257005723

    005724 315 IOI 0]3005727 376 3000057~! 312 ~50005754 I27

    [ NCR

    INCA3:INCR:

    SCCFG:

    THIS SUBROUTINE INCREMENTS THE CHARACTERISTICOF THE FLOATING POINT NUMBERPOINFED TO BY {H,i.).HE TEST FOR OVERFLOWAND SET APPROPRIATE FLAG.[SEE ERRRORRETURNS).REGIS1ERS ON EXIT:

    A = COND!TION FLAG {SEE ERROR RETURNS)D = CLOBBEREDB,C,H,L. = SAME AS ON ENTRYCALL GCHARCPI MAXCH,JZ OFLNIM0V D,AINR OJMP INCR2[NR LINR LINRMVI A,[7~QANA DNOV O,ANOV A,HAWl 200GORADNOV M,ADCR LDCR [DCR LXRA ARET

    SUBROUI,INE DECR

    REG

    ;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

    THIS SUBROUTINE DECREMENTS THE CHARACTERISTICOF THE FLOATING POINT NUMBER POINTED TO BY (H,L).WE TEST FOR UNDERFLO~ AND 5El APPROPRIATE FLAG.(SEE ERRROR RETURNS).STERS ON EXIT:A = CONDITION FLAG (SEE ERROR RETURNS)D : CLOBBEREDB,C,H,t. = SAME AS ON ENTRYCALL GCHAR ;GET CHAR WITH SIGN EXTENDEDCPI MINCH ;COMPARE WITH MIN CHAR PERMITTEDJZ UFLWI ;DECREMENT WOULDCAUSE UNDERFLOWNOV O,A ;SAVE CHARACTERSTIC [NO

    A-15

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    29/46

    18080 MACRO ASSEMTLER, VER 2.2005735 025005736 303 305 013

    00574l 135005"?42 151005743 176005744 2670057L~5 153005"146 311

    0057W7005"15000575~005753005754005755005756

    005757005780005751005782005763

    C05764005"765005766005767005"!70005771005772005773005774005775005776005777006000006001006002006003

    135151C26 002]7615324231]

    135151167153311

    176150275153300654!78150054276153300054054176

    AORS

    TSTR

    AC,OR

    DCNP

    ERRORS = O PAGEDCR OJMP INCR~ ;O[CREt.IENT CHARACTERISTIC;GO STORE iT BACK

    NOVE, Lt-lOV L, CMOVA, MORA ANOVL, ERET

    MOVE ,LNOVL ,CMY[ D,2NOVA ,MNOVL, EANA DRET

    MOVE, LMOVL, CNOVI, AMOVL, ERET

    POV, -1NOVE ,L."lOV L , OCHPptHOV , ERNZ[NR .NOVA ,MNOV , 8,NR LCMP M40V L, ERNZINR LINR LNOV A ,M

    5UBROUI!NE AOKSRETURN S I IF BASEHAS A I IN NSB;SAVE BASE;BASE 5 TO I_;LOAD IT;SET FLAGS;RESTORE BASESUBROUI INE TSTRCHECKS C PIR IO SEE IF"NLS8 ~RETURNS Z I IF NOTDESTROYS F,D;SAVE BASE;C PTR r0 L;MASK TO 0;LOAD VALUE;RESTORE BASE;AND VALUE NITM MASKSUBROUT[NE ACPRSTORES A IN LOCAIlON O= CPIF!LPTR IN E;SAVE LPFR;CP~R TO L;STORE A;RESTORE BASESUBROUTINE DCMPCOMPARES TWODOUBLE .ENG-HWORDS

    ;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 MANTBADD o i..;BASE 4 TO L; / o* P EXTENSION;,NON CHECK BYIE 3;/GEl FOR COMPARE

    A-16

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    30/46

    18080 HACRO ASSEMBLER, VER 2.2

    0060O4 150006005 O54006006 05400600"7 276006010 15300601l

    006012 3150G6015 33200602O 315006023 322006026006027 31500603~ 135006033 151006034 054OO6035 O54006036 1"16006037 306006041 16"1006042 153006043 311

    351 01202"1 014364 OI 3027 0140,t6 0 3

    001

    006044 026 0040F16()46 151006047 176006050 153006051 167006052006053 034006054 025006055 3n2 046 014006060 t73006061 326 00400~063 137006064 17~006065 326 00400606? II?0060"10 ~11

    ENT2:ENTI:

    OVER:

    ;;;LXFR:REPS:

    ERROR6 = 0 PAGE 17HOVL.,B!MR LINR LCMP MMOV L,EREF

    CALL DLSTJC OVERCALL DCMPJNC OVERRETCAL.L DSUBMOVE,LNOV L,CINR LiNR I.NOVA, MADNOV M,AMOV .,ERET

    ;/BYTE 3 NON:/COMPARE;!~**TP - ALL DONESUBROUTINE D!VCPERFORMS ONE CYCLE OF DOUBLEPRECISION FLOATING PT DIVIDEENTER AT ENTI ON FIRST CYCLEENTER AT ENT2 ALL THEREAFTER:SHIFT MOVING DIVIDEND;IF CARRY I,NUM.GT.D;COMPARE NUM WITH DENIlF CARRY NOT SE;,NUM.GE.DEN

    ;CALL DOUBLE SUBTRACT;SAVE BABE IN E;BASE 6 TO L;BABE 7 TO L;/~*~TPIADO I;PUT IT BACK;RESIORE BASE ro L.

    SUBROUTINE LXFRMOVES CPTR TO EPTRMOVES 3 WORDS F ENTER AT LXFRMVI O,4 ;/MOVE 4 WORDSMOV L.C ;CPTR TO LMOV A,H l CPTR> TO AMOV L,E IEPTR TO LMOV M,AINR C ;/INCREMENT C!NR E ;/INCREMENT E TO NEXTOSR O I/TEST FOR DONEJNZ REP5 ;/GO FOR FOR TILL D=OMOV A,E I/NOW RESET C AND ESUI 4 I/RESET BACK BY 4MOV E,A ;/PUT BACK IN EMOV A,C ;/NON RESET CSUI 4 I/BY 4NOV C,A ;/BACK TO CRET ;/DONE

    SUBROI; I NE LDCPTHIS SUBROUTINE COMPUTESTHE CHARACTERISTICFOR THE FLOATING DIVIDE ROUTINE

    A-17

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    31/46

    ] 8080 MACRO SSEMBLER. VER 2.2 ERRORS 0 PASE

    006071 315 I14 013006074 223006075 303 I04 014

    006100 315 114 013006103 203

    I.OCP

    ;;;;;LMCP

    REGISTERS ON EXIT:A = CONDIT:OK FLAG ISEE ERRORRETIJRKSD,E = G4RBAGEB,C,H,L = SAI.IE AS ON ENTRY

    REGISTERS ON ENTRY:{H,B) - ADDRESS OFF DIVISOR(H,CI = ADDRESS OF QUOTIENT(H,L} = ADDRESS OF DIVIDENDCALL CFCHESUB

    CCHK;SET [=C;-IAR {H, B ] A=CHARIF~,L);SUBTRACT ~0 GEl" NFN CHARACTERIS11~;GO CHECK -OR OVER/UNE.ERF~OI.J;AND STORE CHARAC. ERTIS[IC

    SUBROUTINE LMCPTHIS SUBROUTINE OMPUTES THE CHARACT~;R!SI:(jFO~ "HE FLOATING NUI. TIPLY ROUT;ME.

    REGISTERS ON Ex!r:A = CONDITION~L.AG (S~.E ERROqRE]L.IIRN~)D,F ~ GARBAGEB,C,I-I.L = SAIIE AS ONENTRY

    REGISTERS ON ENTRY:(H,8} = ~.DDRESS OFF MULTIPI_ICAND(H,C) = ADDRESS OF PRODUCT(H,_I = ADDRES~ OF MULTIPLIERCALl. CF .-IEADD 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

    SBUROUTINECI.!KTHIS SUBROUTINEC, HECKS A CHARACTERISTIC NTHE ACCUMUL4TOR OR OVERCLONOR UNDERFLON.IT THEN STORES THE CHARACTERISTIC, PRESRVINGTHE PREVIOUSLY COHPUTEDMANT!SSA SIGN.

    REGISTERS ON ENTRY:

    A-18

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    32/46

    8080 MACROSS[.tIDL.ER, VER2.2 ERRORS 0 PAGE 19

    006104[)OGI04 3"76 I00006106 332 123 014006111 376 200006113 332 133 Olq006116 376 300006120 332 142 014006123 135006124 151006125 127006126 315 303 013006131 153006132 311

    006133 135006134 151006135 315 161 013006140 153OOGI1

    006142 135006143 151006144 315 143 013006147 153006150 31!

    CCHK

    SrORC:

    OFL.WC

    UFLWC

    (H,L} : ADDRESS OF ONE OPERANDIH,B} = AOI)RESS OF OHER OPERAND(H,C; = ADDRESSOF" RESULTA = NE~I CHARACTERISllC OF" RESULTREG!SrERS ON EXII:

    CONDITION Ft.AG (SEE ERROR RETURNS)= GARBAGFB,C,H,L ~ SAME AS ON ENTRY;ENTER HERE TO CHECK CHARACTERISTICCP] IOOQ :CHECK FOR 0 TO +63

    JC SrORC ;.JUMP IF OKAYCPI 200Q ;CHECK FOR +6~ TO +12"/JC OFLNC ;JUMP IF OVERFLOWSP! 300Q ;CHECK FOR -12B TO -65dC ~JFLNC ;JUMP IF UNDERFLOWMOV E,L ;SAVE t. IN EMOV L,C ;LET L POINT TO RESULTNOV D,A ;SAVE CHARACTERISrIC IN DCALL [NCR3 :STORE CHARACTERISTICNOV L,E ;RESTORE .RET ;RETURNSUBROUTINE OFLNC

    THIS ROUTINE WRITES A FLOATING POINT OVERFLONAT (H,C)SETS THE CONDITION FLAG, AND RETURNS.MOV E,L ;SAVE L IN EMOV L,C ;SET L=CPTR, SO (H,L]=ADOR OF RESULTCALL ~OVR ;WRITE OUT OVERFLO~MOV L,E ;RESTORE .RET ;RETURN

    SUBROUTINE UFLWCTHI3 ROUTINE WRITES A FLOATING POINT UNDERFLOWATSETS THE CONDITIONFLAG, AND RETURNS.MCV E,L ;SAVE L. IN ENOV L.,C ;SET L.=CPTR, SO (H,L)=ADDR OF RESUI.TCALL WUND ;NRITE OUT UNDEF[ONNOV I.,E ;RESTORE LRET ;REI~RN

    SUBROUIlNE CSIGNTHIS SUBROUTINE COMPUTESAND STORE THE MANTISSA

    A-19

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    33/46

    1BOBO MACRO ASSEMBLER. VER 2.2 ERRORS = 0 PAGE ~0

    00615! 315 171 01400615 253GU6155 315 161 014006160 3ii

    006161006162 15!006163 05q00616N 05~006165 05~006166 167005167 153

    006171 135006176 i50006173 05g006J74 05N006175 05g006176 17618080 HACROASSEMBLER, VER 2.2

    S;GN E-OR THE FLOATING -lLJ, = [PLY AND DIvinERE(;ISIERS ON ENTRY:

    ~I-t,l } = AI)DRESS OF ONE OPERAND{I-,BI = ADDRESSOF (I~IER OPERAHD(l.:,~J "- ADDRESSF RESU[ ~REGISTERS ON EXIT:

    A,D,E -: GARBAGEB.C,H.t. ~ SAME AS ON ENrRYCAt.L MSFHXRA ECALL. CSfRREf

    ;SEt A-SIGN(H,L , E:.GIGN(H,EI;EXCLL, SIVE ORSIGNSTO GFT .,kI4 SIGN;SIORE SIGN INTO RESUL;; RE URN

    ; SLJBRO[iTINE CSR; STORES VALUE IN A !N; CPTR P; PUtS LPTR IN ~CSTR: t1OV ,L ;SAVE LPIR ;N EHOV I ,C ;CPTR TO I.IN~ ;CPTR eINR L ;TO .INRNOV N,A ;STORE ANSNERNOV L,E ;LPTR BACK TO LRErSUBROU]INE

    ; THIS SUBROUTINE FEICHES THE 51GNS OF THE" MANTISSASOF 1HE FLOATING POINT NUMBERS OINTED "."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, LE ~ SIGN OF MANTISSA OF (H,B)B,C,D,H,L = SANE AS ON E~,ITRYNOV E,L ;SAVE LPTRMOV .,B ;BPTRTO I..{NR L ;BPrR P-INR L ;/~*TP[NR L ;ro LMOV A,M ; 6PTR2>TOA

    ERRORS= 0 RAGE006177 3}6 200 ~NI 128 ;SAVE MANT SIGN

    A-20

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    34/46

    ,] )G2l.03~2.32d.16.P.O":C6204~ .~,3!.{., ~F,;-;)OOF:RI. 013:: I +

    ;.,06 ?0(;62170 O6P..FO006;.210062?200622.50O622600627006230

    0062320062330062340062S60Q6231OOf~(7MACRO

    05"I.3~6 2,.3605.5O55055-.t~:

    ,354P. 5~17605~054054167

    175151066 00005~167

    8CTI. :

    HOVL ,E ;[.PTR BACK O L140V E,A ;STORE BPIR MANT SIGN!NP... ;I.PTR 2INR . ; ." , " T;-"INR L ;TO LNOV ,r-~ ; LPTR 2):0~NI [-;~ ;SAVE I.PFR "IANF SIGNDCR t ;[.PIR BACK52R . ;lO L.t~ET SLJBROUTINE CrL.HOVES8PTI,. CHARTO LPrR CHARDESTROYSEMOV. .... ;I..P]R TOEHOVl..B ;BPTR TO LINR . ;BPTR 2INR . , / ~" *T~[NR L :to LNOV A,K ;BPIR CHARTO ANOv L.,E :L.I:/F:+ TO! NR ; ~ PTR 2INR t ~TO .INR LNOV M.A ;STORE BPFR CHAR IN LPTR CHARNOV. ,E ,LPT. R TOLREI///SQUARE R007THE L REG PTS TO THE [0 BEOPERATED~;.THE B REG PTS FO THE LOC NHERETHE RESULT l!~ TO BE STOREDTHE C REG PTS TO lTtl0) SCRATCI4AREA.NHERE:C ~ ITERATION COUN1C+l = L REGC2 = B REGC3 TO C+6 = INTRL REG IC7 TO C+I0 "" INTRL REG2C+II T0 C+t~ = INTRL REG3C+15 ~

    [)SORT: HOV A,L ;STORE L INMOV L,C ;~N[} NRD SCRTCHMY! M,0 ;INITIALIZE ITER CCUNTINR LMOV M,AASSEMBLER. VER 2.2 ERRORS= 0 PAGE 22

    G0624000524!006242006243006244006245

    0541600541;5157174

    INR . ;STR 8 IN 3RDMOV M,8 ;WRO 0r SCRTCHINR L ;SET C TO INTRL.MOVC,L ;REG IHOV L,A ;SET L PTR ATNOV A,H ;SEt REGS FOR COPY

    A-21

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    35/46

    006246006251006254006255006257006262006263006265006266006271O062?20062?400627600627700630200630300G305006306O063O7O0631O0063120O63130063]?006320006322006323006324006326OO632?006332006333006335006336006340006341006342006343006346006347006352006353006355006356

    315315107346302]7034617031203734636616730303"734616715117!3O6II?315

    3O6

    32~32615"~

    315

    210 016046 0162OO031 015I003O2 014

    I003O6 014

    OO4210 016O04OlO137 0120100O2

    210 016010004134 011

    EP06:AGN4:

    CALL COPYCALL GCHRMOVB,AANI 2000JNZ ERSOHOV A,BAN! ]OO0HOV A,BJZ EPOSRARANI 1770ORI I000MOV M,AJHP AGN4ANI 177QMOV M,ANOV _,CMOV A,CAOI 4NOV C,ANOV A,HCALC COPYMOV A ~Sb[ 4MOV L,AHOV 8,CADI lOOHOV C,ACALL LMULHOV A,CSUI lOONOV C,ASUI 2HOV L,AHOV L.HHOVA,HCALL COPYMOV A,CAOl ]0OMOV , AHOV8, CAOI 4HOV C,ACALL LADD

    ;CPY TC INTRL REGI;PUT CHR IN A;MAKE COPY;CK NEG;CK NEG EXP;OlV BY 2;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 i;TIMES [NTRL REG2;PLACE RESULT IN;INTRI. REG3;COPY ORG INTO;INTRI_ REG

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

    A-22

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    36/46

    ::H.~:i AGRO

    L Or, J67O06370006373006376006400~064020064030064040064050054070064100064110064 20054 ~0064 500642000642100642200642Z90@424006425O06h 30OOG432

    006440006443086446036447006450

    A:-3LMBLER, ER .2 ERRORS = 0 PAGE

    175 MOV ,I.%(?6 004 SLJI 4 ;DIV [NTR[ REG ~I[Il NOV B.A ;BY INTRI_ REG2326 004 SU! N ;PIJ t ANSWtl INTR[.!17 MOV C,A ;REGI315 000 011 CAL= . DlV315 046 0)6 CALL GCHR326 O01 SUI I345 177 AtI 77,3167 MOV M, A:71 MCV A,C~6 003 SUI [{ ~C PT TO [NrRL REG I157 MOV I.,A ;GET ITERI06 NOV 8oM ;COUNT NON INCR004 INR -3160 MOVM,B!7D MOV A,B376 005 CPI 5 ;IF = 5 RTNANS~02 306 OIN JNZ AGN4 ;OTHERNISE CONT151 MOV L,C055 At.DN: DCR L ;COPY ANS INT0I16 MOVC,M ;LOC REQUESTED054 I NRL174 NOV A,14315 210 016 CALl.. COPYZI RET1.51 ER%Q: HOVL.,C315 215 013 CALL NZER ;WRITE A F,..OATINO ZERO303 021 015 JMP AI_DN; 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 ROUTINE3i5 332 012 CVt~l : CALL302 070 0!5 JNZ014 I NR014 INRl 51 NOV

    ZCHK ;CHECK ORNEI-; Z[.r~ONNZRO ;NOT ZEROC ;IT WAS, OFFSET C BY 2CL,C

    A-23

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    37/46

    I8080 HACRO ASSEMBLER, VER2,2006451 315 215 013006454 315 03! 0 16 ;i006457 054006460 054006461 054006462 O54006463 25~006464 167006465 303 227 015006470 126 NNZRO:006471 054006472 106006473 054006474 136006475 054006476 176006477 014006500 014006501006502 162006503 054006504 160006505 054006506 16300S507 054006510 107006511 346 177006513 167006514 376 I00006516 312 125 015006521 326 001006523 346 I00006525 007 NERO:006526 054006527 1670O653O 170006531 315 031 016006534 056 235006536 315 172 016006541 315 046 016 TSTB:006544 107006545 346 I00006547 170006550 312 156 015006553 076 200006555 220006556 3?6 022 GOTV:006560 372 I74 015006563 3J5 054 016

    ERRORS= 0 PAGE 24CALL WZERCALL SIGN INRITE ZERO;SEND SPACE ON POS ZEROINR[NRINRXRANOVJMPNOV

    INR LNOVB, MINR LNOV[NR LNOV A,HINR CINR CMOV L,CMOV M,OINR LMOV M,8INR LNOV M,EINR LNOV 8,AANI 1770NOV M,ACPI IOOQJZ NZROSUl IAN| 1000RLCINR LMOV M,ANOV A,8CALL SIGN

    LLLNOSKP0,M

    ;PNT TO DEC|MAL CXPONENF

    ;SET IT TO ZERO;OUTPUT [TI/GET THE NUMBERO CCNVERT

    ;14 NORD***TP;/OFFSET SCRATCH POINIER BY 2IlL NOT NEEDED ANY MOREI/SAVE NUMBER IN SCRATCH

    ;I***TP;/SAVE COPY OF CHAR & SIGN;GET ONLY CHAR,;/SAVE ABS(NUMBER);CK FOR ZERO;/GET SIGN OF DEC. EXP;/GET SIGN OF CHAR.;HOVE IT TO SIGN POSITION;/HOVE TO DECIMAL EXP.;/SAVE SIGN OF EXP.I/GET MANT. SIGH BACK;/OUTPUT SIGNMVI I_,(TEN5 AND 3770)CALL COPTCALL GCHRMOV B,AANI 100OMOV A,8JZ GOTVMVl A,2000SUB 8CPI 220

    JM TRYICALL MORO

    ;/TRY HULT. OR OIV. BY I00000 FIRST;/MAKE A COPY IN RAM;/GET CHAR. OF NUMBER;/SAVE A COPY;/GET ABSOLUTE VALUE OF CHAR;/INCASE PLUS;/ALREADY PLUS;/MAKE MINUS INTO PLUS;/PLUS-2OOB-CHAR;/TEST FOR USE OF I00000I/WONT GO;/WILL GO SO O0 IT

    A-24

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    38/46

    MACRO SSEMBLER,VER 2.2 ERROR.C. :, {. PAGE25.305566 ."; 0 b U050065!0 I 5"700,571 303 141 r}150065"14 056 P4I TRYI:0065-/6 315 1"72 016006601 :31b 046 015 TS"I:006604 3"16 O01086606 362 222 015006611 315 054 016 MOGN=006614 306 001006616 167306617 ~,03 20"- 01.5006622 :376 007 OKI006624 362 211 015006627 151 MOSKP0065:{0 055006631 0550066:32 066 00500661"{4 13"1006635 315 377 015006640 :376 012 30664.2 362 122 016006645 31.5 303 015306650 315 ..327 015 POPD=006653 :316 303 0006656 302 250006661 076 305OOGGE,3 315 060 000006666 315 107 01600667 I ~ 07(106".,72 315 NIl .9|6006&75 1"70tt06675 346 0"17006300 515 151 .316006i03 .306 260 DIGO:006705 315 060 O(JO005710 151006? I 055006712 055006713 I "/6006714 376 00500671E 076 256006"7~0 314 060 [300006"72:3 126006724 025C 06",25 ~62006"72.. .3i ~006"72? b~6 001 MULTI0057:31 .315 ~?"/0067~4 ;51OO6735 O55

    AOI 5 ;z INCREMENTDEC. EXPONENTBY 5HOVP,A ;/UPD.&TE MEH.;M:~srB ; GO "RY AGAINMVl t.,(lCl.; AND 3VTQ) ;.NON USE JUST rENCALL COPTCALL GCHR.CP~ IJP OK "CA[L MORT.,AT)M0V M, AJMPTST ICPI "?JP MDGNNOV I. ,CDCRLDCR LMVl M,5NOV E, ACALL LSF fCP1 120JP T NODCALL Ol GOCALL MULTTCALL OlGOJNZ POPOMVI A,305,3CALL OUfRCALL GETEXNOV 8 ,ACALL S !ONNOVA BAWl 7"~QCAL,. CTNOAD 1 2500CALL OLITRHOVL ,CDCR LDCR LHOVA, HCPI 5VV A. 2560CZ OUTRM0V O,MDCR OMOVM, ONETMVICALL LSF TMOV L,CDCR L

    ;/PUT ;T IN RAM;/GET "."4ARACTERST C;,M,JS: 3F[ IN RANGE "0 6;/AII. EAST TS I 014.. BIGGER;/M.;3I Ut. OF DIV BY 10;/!NCR[NFNT DECIMAL EXP,; :UOOA E HEM;/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 PROPERNUMBER;/TEST FOR 2 DIGITS hERE;/JMP IF 2 DIGITS TO OUTPUT;/OUTPUT FIRST DIGIT;~M(~L FIPL..Y THE NUMBERY I0;/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 DECREMENTDIGIT 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

    A-25

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    39/46

    8080 MACRO ASSEMBLER, VER 2.2

    0067360067370067400674200674300674600674700675100675200675,~00675500675600676~O06762006763O067650067660067710067720067730067740067750067760067770070000070010070020070030070040070050070060070070070 00070 I0070 20070 30070 40070 50070 60070 7007020007021007022007023007024007025007026007031007033007035007040

    ~71306 011117174315 210 016171326 0111;7036 002055315 003 016151171306 012107315 006 013055176150055216311151055257167035370054054054~7567O5576O2767O557602767O5576O27303 002 016346 200076 2403~2 042 0~6076 255

    LSFT:

    TLOOP:TLP2:

    S[GN:

    ERRORS = 0 PAGE 26

    NOV A,CADI ]lONOV C,AMOV A,HCALL COPYNOV A,CSUI llONOV C,AMVl E,2MOV L,CDCR LCALL TLP2NOV L,CNOV A,CAOI !20NOV 8,ACALL DADDOCR.MOV A,MMOV .,BDCR .ADC MRETMOV L,CDCR .XRA AHOV H,ADCR ERMINR .INR LINR LNOV A,MRALNOV M,ADCR LMOV A,MRALMOV M.AOCR LMOV A,MRALMOV H,AOCR [.MOV A,MRALJMP TI.OOPANI 2000MVI A,240QdZ PLSVMVl A,255Q

    ;/SEI C TO RESULT;/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 TWOLOW 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

    A-26

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    40/46

    18~Jf)0 M~CRO ASSEMBLER, YER 2.2 ERRORS = 0 PAGEC0"!042007045007045007047O07OL.O007051007052007053[;CT05LI00"~0~00706100705~007063~)OV06~00"!06600"!07000707200"7075007 O0~07 Ol007 02007 03007 O~007 ~700~ ~0007 ~!007 ~g007 !7007 ~007 25007 ~6007 3]

    007 3700"~ 40007 4~007 42007 ~5007 4gOOV 5~00? 53007 54007 56OOV ~007 63007 6~~07 55~07~70

    .~It. OGO ~00 PI.SV: CALf. OUIR151 GCHR: HOV L,C054 GETA:Q54 INR L054 [NR176~II RE[315 107 016 MORD: [:At.[. GETEX137 NOV E,A]05 MOV B,L004 INR 8151 NOV L,C1"71 MOV A,C306 Oil AD[ IIO117 MOV C,A173 MCV A,E396 ~00 ANI OOQ312 Ilg 016 JZ DIVlT315 137 OIR CALL LMUL171 FINUP: MOV A,CII5 NOV C.t.157 MOV L,A17~ MOV A,H315 210 015 CALL COPY151 GETEX: MOV L,C054 INR L303 047 016 JMP GETA315 000 011 DIVlT: CALL LDIV303 I00 016 JMP FINUP315 151 01~ TWOD: CALL CTHO107 ~OV 8,A3~5 107 015 CALL. GETEX137 ~OV ,A346 200 ANI 2000312 145 016 #Z AODI035 DCR E163 EINIT: MOV[70 MOV A,B303 25~ 015 JMP [NPOP034 ADOI: [NR E303 140 016 JMP FINIT036 377 CTNO: HVl E,377Q0~4 LOOP: INR E326 012 SUl 120362 15~ 01~ OP LOOP30B 01~ AOI 120107 MOV 8,A173 MOV A,315 303 0[5 CALL DIGO170 MOV A,8

    ;/OUTPUT SIGNI/GET CHARCTERISTICI/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 NUHBERTO CONVERT;/POINT C AT ~RESULT~ AREA;/IN SCRATCH;/NON C SET RIGHT;/NON TEST FOR MULilTES~ 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

    A-27

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    41/46

    18080 MACROASSEMBLER, VER 2.2007171007]72007173 3060n7~75007]~S 076007200 31500720~007204 326007206 117007207007210007211 147007212 176007213 054007214 126007215 05W007216 136007217 05~007220 156007221 ~qO00722~007223 151007224 167007225007226 176007227 162007230 05~00723! 163007232 05W007233 160007~3W 311

    007235 303007241 240

    0O5

    2~0 016005

    120 000000 000

    COPT:

    COPY:

    TENS:TEN;;;;;;;;;;;;;

    ERRORS= O PAGE 28RETMOV A,CADI 5NOV C,AHVl A,(TENS/256)CALL COPYMOV A,CSUI 5MOVPETMOV ,1"IMOV H, AMOV A,MINR LNOV D,MINR LHOV E,M]MR LM0V L.MHOV H,8HOV B,LNOV L,CMOVINR .NOV A ,MMOV M,DINR LM0V H.rINR LNOv M,B

    ;,COPY FROH 0 N TO RAM;/SET C TO PLACE TO PUT;/COPY IT;/NON RESET C;/lrs RESET;/SAVE RAM H;/SET TO SOURCEH;/GET 4 WORDS NrO THE REGS.

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

    ;/ALL 4 COPIED NOH;/ALt. DONE08 303Q,I20Q,OQ,21Q ;1303240f0} = 100000.08 240Q,0Q,0G,4Q ;/12(8) =

    SCRATCHHAP FOR l/O CONVERSION OUTINESRELATIVE TO (C+2}USEC-2C-ICC+iC~-2C3C+4C+5C+6C+7C.8

    DIGIT COUNTOVERFLOWHIGH NUMBER- MANTISSALOW NUMBERCHARACTERISTICDECIMAL EXPONEXT {SIGN E MAG.]TEN**NTEN**NTEN**NRESULT OF HULT & DIVAND TEMP FOR X2

    A-28

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    42/46

    80@0 MACRO ASSENBLER, VER 2.L-t. ERRORS = 0 PAGE

    007245 076 2"77007247 315 060 000007252 076 240007254 315 060 000007257 303 272

    007252 10500"7253 17007264 306 0170072G6 15700"7267 16000727000727~ 014007272 07B 272007274 315 060 000907277 315 305 017307302 n54007303 ~6700730) 315 142 01700"7307 376 3760073]] 312 034 017t)07314 376 025007316 3i20Bl 0~7007321 375 360007323 302 215007326 315 253 0!700733} 315 ]07 016007334 346 1"17007336 137007337 346 I0000734] 007007342 267007~43 10700734h 1"1300"1345 312 353 0!6007350 076 200

    ERR:

    C+i3C+II I. FOR NUMBERTO GO INTO (INPUT ONLY)DIGIT JUST INPU1 (INPU1 ONLY),***O/GIN INPUT

    MVI A,277QCAt.L OUTRMVI A,240QCALL OUTRJMP PRMT

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

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

    INPUT

    PRMT:

    TSTEX:

    SCALE:

    /L. POINTS TO WHERE O PU[ INPUT NUMBER/C POINTSTO 13(10) WORDS F SCRATCHMOV 8,LMOV A,CADI 17QMOV L,AMOV M,8INR CINR CMVl A,~72QCALL OUTRCALL ZROITINR LMOV M,ACALL GN~MCPI 376QJZ DECPTCPIJZ INEXPCPI 360Q,.I~Z ERRCALL FLTSGNCAL~ GETEXANI [77~NOV E,AANI IOOORLCORA ANOV O,AMOV A,JZ AP[.SMVI 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. ERN;/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 ~

    A-29

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    43/46

    8080 MACRO SSEMBLER, VER 2.2007352 223G07353 200007354007355 O56007357 315007362007365 34600737 376007~71 372007374 315807377 326007401 157007402 303007405 05600740"? 315007412 315007415 346007~.17 267007420007423 315007426 32600743000743l 303007~34 151007435 055007~36 055007437O07u~l 315007444007445 15100744600?447 05500?450007451 31500?454 16000745500?456 3O3007461 31500?464 31500?48?007472 315007475 378007477 30200750~ 151007503 05400750~ 054007~05 i76007506 345007510 I07007511 054007512 178

    API.S:235!72 OISI07 OIB077 INTS:005005 017054005355 016241 ~RYTN:]72 OJ5107 015077 [NTI:257 017054 016001015 017

    000245 017

    107314 016253 017257 017305 ~17142 017360245

    037

    DECP~:

    INEXP:

    ERRORS= 0 PAGE 30SUB E ;/NON ITS +ADD B ;/SIGN NUMBERNOV M,A ;/SAVE EXP (SIGN & HAG.)MVI L,(TEN5 AND 3770] ;/TRY MORO ~ITH 105 F!RSICALL. COPT ;/[RANSFFR TO RAMCALL GETEX ;/GET DECIMAL EXPANI ??Q ;/GET HAG. 01= EXPCPI 50 ;/TEST FOR USE O~ lO~obJM TRYTN ;/NONT GO - TRY !OCALL MORO ,/~ILL GO SO DO ITSUl 5a ;/NAG = MAG -5NOV N,A ;/UPOATE DEC. EXP IN MENJMP [NT5 ;/GO TRY A~A]NMVl L,(TEN AND 377Q} ;/PUT TFN IN RAMCALL COPTCALL GETEX I/SET UP FOR LOOPANI 77Q ;/GET MAGNITUDEORA A ;/TEST FOR 0JZ 5AVEN ;/DONE, MOVE NUN OUT AND GET OUTCALL MORD ;/NOT DONE - DO 18SUI IO ;iEXP = EXP -INOV.l,A ;/UPDATE MENJMP !NT! ;/TRY AGAINNOV L,C ;IZERO DIGII COUN[DCR L ;/SINCE ITS NECESSARYDCR L ;/TO COMPUTE EXP.MVI M,O ;/ZEROEDCA~L EPI ;/GNUM IN MIDDLEHOV E,A ;/SAVE TERMINATORNOV L,C ;/MOVE DIGIT COUNT I0DCR . ;/BACK UP FO DIGIT ~gLJHTDCR .NOV B,M ;/GOT DIGIr COU~TCALL GETEX ;/SET L TO DEC. IZXFNOV M,8 ;/PUT EXPNOV A,E ;/TERM BACK TO AJMP TSTEX ;/TEST FOR E~OR-XXCALL FLTSON ;/FLOAT AND SIGN NUMBERCALL E,AVEN :/SAVE NUMBER N (L) rEF:PCALL ZROIT ;/ZERO OUT NUM. FOR INPUTTING FXPCALL GNUM ;/NON [NPU[ EXPONENTCPI 360Q ;/TEST FOR SPACE FERN.JNZ ERR ;/NOT LEGAL -- TRY AGAINNOV L,C ;/GET EXP OU~ OF MENINR LINR L ;/EXP LIMITED TO 5 BITSNOV A,N ;/GET LONEST 8 BITSANI 37Q ;/GET O00O BITSNOV B,A ;/SAVE THENINR L ;/GET SIGN OF EXPNOV A,N ;/INTO A

    A-30

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    44/46

    18080 MACROASSEMBLER, VER2.2 ERRORS= 0 PAGE 31{]O1513 26"1 ORA A00"1514 ]70 MOV A,B0G75]5 372 123 017 JM USEIT(1~;520 078 ~00 MVI A,OO0r)7522 220 !;LJB007523 054 USEII: INR L007524 206 ADD M00"1525 157 NOV M,A007526 I71 NOV A,C007527 306 015 AD] :SO007531 157 HOV L,A00"1532 156 NOV L,MC07533 17g MOV A,H007534 3]5 210 0]6 CALL COPY00753"1 303 33] 016 ..JMP SCALE007542 315 333 000 GNUM: CALL INP007595 376 240 CP! 240000754"1 312 I~2 017 JZ GNUM007552 376 255 CP[007554 302 17~ 017 JNZ TRYP007557 151 MOV .,C007580 054 INR .00758] 054 INR L007562 054 INR L00?563 066 200 MVI M,2OOQ007565 303 142 Ol~ JMP GNUM0075~0 37B 253 TRYP: CPI 253Q007572 312 [42 017 JZ GNUM007575 328 260 TSTN: SUI 260Q0075~? 370 RM007600 376 012 CPI 12Q007602 380 RP00760300760q 315 277 017 CALL GETN,]07G0~ 163 MOV M,E0076;0 315 327 015 CALL MULTI0075!3 267 ORA A0075~4 300 RNZ007S15 315 277 017 CALL G(N007620 151 MOV L,C001621 054 INR L08"1622 054 INR L00"2523 206 ADD M007524 1~7 MOV007~25 055 BCR007628 176 MOV A,M007827 316 000 ACE OO00753l 157 MOV M,A{)07532 055 BCRL007833 178 MOV A,M007634 315 000 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 RAM COPY/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;/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

    A-31

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    45/46

    ~080 HACRO ASSEMBLER, VER 2.P

    007636 i67007637 330007640 05500764l 055007642 105007643 002007644 160007645 315 333 000 EP~:007650 303 175 01"?087553 15i Ft.[SON00"7654 303 32500765"7 17} 6AVEN007660 306 015~07662 }5700766300766400"7655 05400"7566 I 61007667 15100"/670 I I 3007671 17400?672 315 210 016007675 1170076q6 31C07677 171 GEIN:007700 306 01600"1702 157007703 17500"7704 31007705 151 ZROIT007706 257007707 167007710 054007711 16700771~ 054007713 167007714 054007715 157007716 311

    NO PROGRAMERRORS

    ERRORS= 0 PAGE 32MOV t,ARCOCR LDCR LMOV 8,MINR 8MOV M,8CALL INPJMP TTNMOV L,CJMP FLOATNOV A,CAOi 15QMOV L,AMOV E,MMOV L,E[NR .MOV M,CHOV L,CMOV C,EMOV A,hCALL COPYMOV C,ARETMOV A.CADI 160MOV L,AMOVA,MRETHOV L,CXRA AHOV M,AINR LNOV M,AINR LMOV M, AINR LMOVM, ARETEND

    ;/**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 NUMBERN (1.):/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

    :/NON SET t;IGN ro -*; / DONE

    A-32

  • 8/3/2019 Floating-point Package for Intel 8008 and 8080 Microprocessor - Ll Lab (171286)

    46/46

    8c8~: r,I,,,,,jRO A:-..~,EHB~(.R, VER2.2 ERRORS-- 0 PAGE 3SYHBOL TABLE

    : OlA 00000"! ABCH 005064 ACPR 005757AOOP 00~73~ ADDZ 004726 AGN4 005306AORS 005741 APLS 007353 B 000000OCI4K (]05342 ~CTL. 006215 RHIN 005042CCHK 006104 CCMP 005533 CFCHE 005514COM2 005050 COPT 007|72 COPY 0072|0CSIGN 006151 CSTR 006161 CTNO 00715iD 000002 DADD 005406 DCLR 005435DEtPT 007434 DECR 005724 DFXL 005316OIVIT 007114 DI.ST 005351 DRST 005370OSU6 005446 DTST2 004422 E 000003ENT2 006012 ~PI 0076~5 EPOS 006302EQUL 004624 * ERR 007245 ERSO 00643iFINUP 007~00 FLOAT 00532~ FLTSG ~07653FXL2 0052G3 GCHAR 00550| GCHR 007046GETEX 00~107 GETN 007677 GNUM 007542GOTV 006556 H 000004 INCR 005666INCR3 005703 INDF! 005604 * INDFC 005650INP 000333 INPOP 006653 INPUT 007262INT5 007365 INTR 005177 KPGO 005166LO00 005106 LOO] 005110 LO02 005037[.1~8 005116 LI29 00512] LI31 005124I. ADG 004542 I_ASD 005002 LDCP 006071LL~B 004577 LHCM 005127 LHCP 006100LOOP 007153 LSF[ 006~77 LSUB 004540M 000006 MADO 005244 HANT 004757MO~N 0066l] MOSKP 006627 M~NCH 000300MSFH 006171 MUi.l 006727 NCHK 004604NORM 005255 NORMI 005255 NOTO 004652OF|.~I 005566 OFL~C 006133 OKI 006622OVER 006027 PLSV 007042 POPO 006650PSW 000006 REP3 004447 REP5 006046SAVEN 0076~7 SCALE 007331 SCCFG 005722SHIO 0046~4 SIGN 0070~ SP 0000065UOZ 00467~ IEN 007241 TEN5 007235TLP2 007003 TRYI 006574 TRYP 007570TSTI 00660~ "[STB 00654~ TSTEX 007314TSTR 00574"? [WOO 007122 UFL.HI 005550USEJ[ 007523 HCHAR 005637 HFLT 001607NMANI 005630 HOVR 005561 ~UNO 00553W~ERC 00565~ ZCHK 0053~2 ZMCHK 005332 O2 O3

    04

    ADDI 007145ALDN 00642188014 005075C 000001COMI 005026CRIN 004515CVRT 006440DCMP 005"164DIGO 0O6703DSQRT 006232ENTI 006020EQ02 004634~[NIT 807140GETA 007047GOON 004473INCR2 005706INEXP 007461INTI 007415l. 000005LO03 005113L.ADD 004534LOIV 004400LMUL 005137LXFR 006044~AXOH 0000~7MORD 007054NNZRO 006470NZRO 006525OUTR 000060PRMT 00"7272REP6 005271SCHAR 005313STORC 006~23TLOOP 007002TRYTN 007405TSTN 007575UFLWC 006~2NIND 005577NZER 0056i5ZROIT 007705