ORG 0100H LXI SP,0D700H-1 LXI H,0CD00H SHLD INSLOC LXI H,BUFF SHLD BUFLOC XRA A OUT 0FEH OUT 0C8H CALL BLANK LXI B,40H LXI D,INST LHLD INSLOC CALL MESS LHLD INSLOC DAD B DAD B SHLD INSLOC INX D MSD MOV A,H CPI 0CFH JZ FSTPSS CALL MESS INX D LHLD INSLOC DAD B SHLD INSLOC CIN CALL INPT CPI 0DH JNZ CIN MVI M,' ' CALL PROCESS LHLD INSLOC DAD B SHLD INSLOC JMP MSD PROCESS PUSH D PUSH B LHLD BUFLOC XCHG LHLD INSLOC INX H INX H CALL ASC STAX D INX D DCX H DCX H DCX H CALL ASC STAX D INX D XCHG SHLD BUFLOC POP B POP D RET ASC CALL AGET RLC RLC RLC RLC MOV B,A INX H CALL AGET ADD B RET AGET MOV A,M SUI 30H CPI 0AH RC SUI 7 RET BLANK LXI H,0CC00H BLK MVI M,' ' INX H MOV A,H CPI 0D0H JNZ BLK RET INPT MVI M,0A0H IN CALL 0C01FH JZ IN CPI 0DH RZ CPI 7FH JNZ ARD MVI M,' ' DCX H JMP CURS ARD MOV M,A INX H CURS MVI M,0A0H RET MESS LDAX D CPI 0 RZ MOV M,A INX D INX H JMP MESS MOV EQU 40H FSTPSS LXI H,0D700H SHLD STABLOC LXI B,0D700H LHLD BGNLOC XCHG LHLD END AGNI CALL ADCMP JZ DOONE JC DOONE LDAX D CPI 0D3H JZ BT2 CPI 0DBH JZ BT2 CPI 0EBH JZ INHH CPI 0E3H JZ INHH CPI 2AH JZ FIND CPI 22H JZ FIND CPI 3AH JZ FIND CPI 32H JZ FIND ANI 0CFH CPI 0CDH JZ FIND CPI 21H JZ FIND ANI 0C7H CPI 0C2H JZ FIND CPI 0C4H JZ FIND CPI 0C3H JZ FIND CPI 6 JZ BT2 CPI 0C6H JZ BT2 INHH INX D JMP AGNI BT2 INX D INX D JMP AGNI FIND INX D LDAX D STAX B INX D INX B LDAX D STAX B INX D INX B LHLD STABLOC INX H INX H SHLD STABLOC LHLD END JMP AGNI ADCMP MOV A,L CMP E JZ FUR2 RNC FUR2 MOV A,H CMP D RET DOONE LHLD PLO SHLD PLOC START LHLD BGNLOC SHLD POSLOC NEWOP LHLD POSLOC XCHG LHLD END CALL ADCMP JZ THEND JNC ANMM THEND LHLD PLOC MVI M,1 INX H MVI M,' ' JMP FILES ANMM LHLD POSLOC MOV A,M STA OPLOC JMP LOKUP NEXBT LDAX D CPI 8 RZ CPI 10H RZ CPI 18H RZ CPI 20H RZ CPI 28H RZ CPI 0 INX D LDAX D JNZ NEXBT RET ADC22 MOV A,L CMP E RNZ MOV A,H CMP D RET LOKUP LHLD POSLOC XRA A STA FLAG LXI B,0D700H LABL PUSH H LHLD STABLOC MOV D,B MOV E,C CALL ADC22 POP H JZ NXT LDAX B MOV E,A INX B LDAX B MOV D,A CALL ADC22 JZ MATCH INX B JMP LABL MATCH MVI A,1 STA FLAG NXT LXI D,TAB3H LDA OPLOC MOV B,A LKJ LDAX D INX D CPI 0 JZ ENOD CMP B JNZ LKJ CALL LINE MVI M,'D' INX H MVI M,'B' INX H MVI A,1 STA CLOCLOC STA LOCLOC JMP SPACE ENOD LDA OPLOC CPI 1 JNZ LKOO MOV B,A LXI D,OPTB JMP RPOFF LKOO MOV B,A LXI D,OPTAB LOOK1 CALL NEXBT CMP B JZ ADDIT CPI 08H JNZ LOOK1 INX D RPOFF MOV A,B ANI 0CFH MOV B,A LOOK2 CALL NEXBT CMP B JZ RPS CPI 10H JNZ LOOK2 INX D MOV A,B ANI 0C7H MOV B,A LOOK3 CALL NEXBT CMP B JZ DEST CPI 18H JNZ LOOK3 INX D LDA OPLOC ANI 0F8H MOV B,A LOOK4 CALL NEXBT CMP B JZ SRCS CPI 20H JNZ LOOK4 MOV A,B ANI 0C0H CPI 40H JNZ ERROR MOVE XCHG SHLD MNLOC MVI A,5 STA TYPE LDA OPLOC ANI 7 CALL ASCIT STA SRCLOC LDA OPLOC ANI 38H RAR RAR RAR CALL ASCIT STA DSTLOC JMP PUT SRCS XCHG SHLD MNLOC MVI A,3 STA TYPE LDA OPLOC ANI 7 CALL ASCIT STA SRCLOC JMP PUT DEST XCHG SHLD MNLOC MVI A,2 STA TYPE LDA OPLOC ANI 38H RAR RAR RAR CALL ASCIT STA DSTLOC JMP PUT RPS XCHG SHLD MNLOC MVI A,4 STA TYPE LDA OPLOC ANI 30H RAR RAR RAR RAR CPI 0 JNZ LP1 MVI B,42H JMP ARND LP1 CPI 1 JNZ LP2 MVI B,44H JMP ARND LP2 CPI 2 JNZ LP3 MVI B,48H JMP ARND LP3 CPI 3 JNZ ERROR MVI B,36H JMP PUT ADDIT MVI A,1 STA TYPE XCHG SHLD MNLOC PUT CALL LINE ARND EQU PUT LHLD MNLOC INX H MOV A,M STA LOCLOC INX H XCHG LHLD PLOC LDA FLAG CPI 0 JZ NCHR PUSH B PUSH D DCX H CALL LABLER INX H POP D POP B NCHR LDAX D CPI 0 JZ ENDOP MOV M,A INX D INX H JMP NCHR ENDOP LDA TYPE DCR A JZ CR DCR A JZ DO DCR A JZ SO DCR A JZ RP DCR A JNZ ERROR MVI M,' ' INX H LDA DSTLOC MOV M,A INX H MVI M,',' INX H LDA SRCLOC MOV M,A INX H JMP CR RP MVI M,' ' INX H MOV M,B INX H JMP CR DO LDA OPLOC ANI 0C7H CPI 0C2H JZ DOO CPI 0C4H JZ DOO CPI 0C0H JZ DOO MVI M,' ' INX H LDA DSTLOC MOV M,A INX H JMP CR DOO LXI D,TAB2-2 LDA OPLOC ANI 38H RAR RAR RAR INR A LPDCR DCR A INX D INX D JNZ LPDCR LDAX D MOV M,A INX H INX D LDAX D CPI 0 JZ CR MOV M,A INX H JMP CR TAB2 ASC 'NZ' ASC 'Z' DB 0 ASC 'NC' ASC 'C' DB 0 ASC 'PO' ASC 'PE' ASC 'P' DB 0 ASC 'M' DB 0 SO MVI M,' ' INX H LDA SRCLOC MOV M,A INX H CR EQU $ LDA LOCLOC DCR A JZ LPLPLP STA CLOCLOC MVI M,',' LDA OPLOC ANI 0CFH CPI 1 JZ COMMA ANI 0C7H CPI 6 JZ COMMA SPACE MVI M,' ' COMMA INX H MVI M,30H INX H PUSH H LHLD POSLOC LDA LOCLOC DCR A JZ BYINX INX H BYINX MOV A,M CALL ASSGET MOV D,B MOV E,C INX H MOV A,M CALL ASSGET POP H LDA CLOCLOC DCR A JZ BEYOND PUSH D CALL CHEKR POP D MOV M,B INX H MOV M,C INX H BEYOND MOV M,D INX H MOV M,E INX H MVI M,'H' INX H LPLPLP MVI M,' ' INX H MVI M,' ' INX H XCHG LHLD POSLOC XCHG LDA LOCLOC MOV B,A DCR A JNZ LP5H LDA TYPE DCR A JNZ LP5H DCX H MVI M,'.' INX H MVI M,' ' INX H MVI M,' ' INX H LDAX D CPI 0E9H JZ PHL1 LP5H LDAX D CPI 7FH JNC NEXTS CPI 20H JC NEXTS MOV M,A JMP BHU PHL1 PUSH D LXI D,PCHL CALL MESS POP D NEXTS MVI M,' ' BHU INX H INX D DCR B JNZ LP5H MVI M,0DH INX H SHLD PLOC XCHG SHLD POSLOC XCHG JMP NEWOP ASSGET MOV B,A ANI 0FH ADI 30H CPI 3AH JC LPPL ADI 7 LPPL MOV C,A MOV A,B ANI 0F0H RAR RAR RAR RAR ADI 30H CPI 3AH JC PLLP ADI 7 PLLP MOV B,A RET ASCIT INR A LXI D,TAB LP DCR A JZ LOOK INX D JMP LP LOOK LDAX D RET LINE LHLD PLOC MVI M,' ' INX H MVI A,4 LPP MVI M,30H DCR A INX H JNZ LPP MVI M,' ' INX H MVI M,' ' INX H SHLD PLOC RET LABLER MVI M,'L' INX H XCHG LHLD POSLOC XCHG MOV A,D CALL ASSGET MOV M,B INX H MOV M,C MOV A,E CALL ASSGET INX H MOV M,B INX H MOV M,C INX H MVI M,'H' INX H MVI M,' ' RET CHEKR PUSH H LHLD POSLOC INX H MOV E,M INX H MOV D,M LHLD END MOV A,H CMP D JZ FURTH JNC LESS JMP OUT FURTH MOV A,L CMP E JZ OUT JC OUT LESS LHLD BGNLOC MOV A,H CMP D JZ FUR1 JNC OUT FUR1 MOV A,L CMP E JZ LTTN JC LTTN OUT POP H RET LTTN POP H DCX H MVI M,'L' INX H RET FILES MVI E,0 FLIES LHLD BUFF+4 DCX H MOV B,H MOV C,L JMP FILIS FILOS MOV B,H MOV C,L INX B INX H INX H FILIS MVI D,1 FILIES MOV A,M CPI 0DH JZ FIL2 DCX H MOV A,M CPI 1 JZ FIL3 INX H MOV A,M CPI 20H JNC FIL1 MVI M,' ' FIL1 INR D INX H JMP FILIES FIL2 INR D MOV A,D STAX B JMP FILOS FIL3 XRA A CMP E JNZ ALS8 INR E JMP FLIES TAB ASC 'BCDEHLMA' TAB3H DB 8 DB 10H DB 18H DB 20H DB 28H DB 30H DB 38H DB 0CBH DB 0D9H DB 0DDH DB 0EDH DB 0FDH DB 0 FLAG DB 0 BUFLOC DS 2 BUFF DS 6 INSLOC DS 2 STABLOC DS 2 DSTLOC DB 0 LOCLOC DB 0 POSLOC DW 0 SRCLOC DB 0 TYPE DB 0 OPLOC DB 0 MNLOC DW 0 PLOC DS 2 ALS8 EQU 0E060H ERROR EQU ALS8 BGNLOC EQU BUFF PLO EQU BUFF+4 END EQU BUFF+2 CLOCLOC DB 0 INST ASC 'ENTER AS A 4 DIGIT HEX ADDRESS (i.e. 074F)' DB 0 ASC 'BEGINNING ADDRESS OF OBJECT CODE ?' DB 0 ASC 'END ADDRESS OF OBJECT CODE ?' DB 0 ASC 'DESTINATION OF SOURCE ?' DB 0 PCHL ASC '******<<< WARNING >>>******' DB 0 OPTAB DB 0 DB 3AH DB 3 ASC 'LDA' DB 0 DB 32H DB 3 ASC 'STA' DB 0 DB 2AH DB 3 ASC 'LHLD' DB 0 DB 22H DB 3 ASC 'SHLD' DB 0 DB 0EBH DB 1 ASC 'XCHG' DB 0 DB 0C6H DB 2 ASC 'ADI' DB 0 DB 0CEH DB 2 ASC 'ACI' DB 0 DB 0D6H DB 2 ASC 'SUI' DB 0 DB 0DEH DB 2 ASC 'SBI' DB 0 DB 27H DB 1 ASC 'DAA' DB 0 DB 0E6H DB 2 ASC 'ANI' DB 0 DB 0EEH DB 2 ASC 'XRI' DB 0 DB 0F6H DB 2 ASC 'ORI' DB 0 DB 0FEH DB 2 ASC 'CPI' DB 0 DB 07H DB 1 ASC 'RLC' DB 0 DB 0FH DB 1 ASC 'RRC' DB 0 DB 17H DB 1 ASC 'RAL' DB 0 DB 1FH DB 1 ASC 'RAR' DB 0 DB 2FH DB 1 ASC 'CMA' DB 0 DB 3FH DB 1 ASC 'CMC' DB 0 DB 37H DB 1 ASC 'STC' DB 0 DB 0C3H DB 3 ASC 'JMP' DB 0 DB 0CDH DB 3 ASC 'CALL' DB 0 DB 0C9H DB 1 ASC 'RET' DB 0 DB 0E9H DB 1 ASC 'PCHL' DB 0 DB 0E3H DB 1 ASC 'XTHL' DB 0 DB 0F9H DB 1 ASC 'SPHL' DB 0 DB 0DBH DB 2 ASC 'IN' DB 0 DB 0D3H DB 2 ASC 'OUT' DB 0 DB 0FBH DB 1 ASC 'EI' DB 0 DB 0F3H DB 1 ASC 'DI' DB 0 DB 76H DB 1 ASC 'HLT' DB 0 DB 0 DB 1 ASC 'NOP' DB 0 DB 08H DB 0 DB 0AH DB 1 ASC 'LDAX' DB 0 DB 2 DB 1 ASC 'STAX' OPTB DB 0 DB 1 DB 3 ASC 'LXI' DB 0 DB 3 DB 1 ASC 'INX' DB 0 DB 0BH DB 1 ASC 'DCX' DB 0 DB 9H DB 1 ASC 'DAD' DB 0 DB 0C5H DB 1 ASC 'PUSH' DB 0 DB 0C1H DB 1 ASC 'POP' DB 0 DB 10H DB 0 DB 0C4H DB 3 ASC 'C' DB 0 DB 0C2H DB 3 ASC 'J' DB 0 DB 0C0H DB 1 ASC 'R' DB 0 DB 0C7H DB 1 ASC 'RST' DB 0 DB 5 DB 1 ASC 'DCR' DB 0 DB 4 DB 1 ASC 'INR' DB 0 DB 6 DB 2 ASC 'MVI' DB 0 DB 18H DB 0 DB 80H DB 1 ASC 'ADD' DB 0 DB 88H DB 1 ASC 'ADC' DB 0 DB 90H DB 1 ASC 'SUB' DB 0 DB 98H DB 1 ASC 'SBB' DB 0 DB 0A0H DB 1 ASC 'ANA' DB 0 DB 0A8H DB 1 ASC 'XRA' DB 0 DB 0B0H DB 1 ASC 'ORA' DB 0 DB 0B8H DB 1 ASC 'CMP' DB 0 DB 20H DB 1 ASC 'M0V' DB 0 DB 28H END