;REF. NO. BD1B ;PROGRAM TITLE DISASSEMBLER ; ; ORG 35B0H ; GO EQU 3866H CO EQU 3C52H INCHL EQU 3DF0H CRLF EQU 3CCCH EXPR EQU 3D85H LBYTE EQU 3E10H GETAD EQU 3DD4H LADR EQU 3E00H BLK EQU 3C50H HILO EQU 3DE2H START EQU 3844H SAVIT EQU 3F34H ; ; INICI: CALL EXPR DI0: CALL CRLF CALL GETAD CALL LADR DI1: MOV A,M CALL LBYTE ; PRINT INSTRUCTION CALL BLK CALL GETAD CALL UDT CALL GETAD DT2: CALL HILO JC START CALL SAVIT CALL GETAD JMP DI0 UDT: CALL GETAD MOV A,M ORI 3EH CPI 7EH JZ TBYT ; IT IS A 3 BYTE INSTRUCTION. CPI 7FH JZ UBYT ; IT IS A 1 BYTE INSTRUCTION. MOV A,M ORI 3AH CPI 3EH JZ DBYT ; IT IS A 2 BYTE INSTRUCTION. JMP UBYT ; IT IS A 1 BYTE INSTRUCTION. IMP16B: MVI C,10H JMP BLANC IMP11B: MVI C,0BH BLANC: MVI B,20H CALL CO DCR C JNZ BLANC RET ; IMP3B: MVI C,03H JMP BLANC IMPRH: MVI B,48H ; PRINT 'H' CALL CO RET ; IMPCO: MVI B,',' ; PRINT ',' CALL CO RET ; IMP14B: MVI C,0EH JMP BLANC IMPNEM: CALL GETAD MOV L,M MVI H,34H ; TABLE OF ADDRESSES MOV L,M MVI H,35H ; MNEMONICS TABLE CALL ECO3 RET ; SAVOT: MOV B,H ; STORE HL AND DE BEGINNING MOV C,L ; AT 40H. MVI L,40H MVI H,00H MOV M,B INR L MOV M,C INR L MOV M,D INR L MOV M,E RET ; GETOD: MVI L,40H ; INVERSE ROUTINE OF SAVOT. MVI H,00H MOV B,M INR L MOV C,M INR L MOV D,M INR L MOV E,M MOV H,B MOV L,C RET ; ECO3: MVI C,03H ; 3 CHARACTER OUT FROM TTY. CALL VERO RET ; VERO: MOV B,M CALL INCHL MOV D,H MOV E,L CALL CO MOV H,D MOV L,E DCR C JNZ VERO RET ; UBYT: CALL IMP16B ; FOR THE 1 BYTE INSTRUCTIONS. CALL GETAD MOV A,M ORI 3FH CPI 3FH JZ CEROCERO ;BITS NOS. 7 AND 6 = 0 CPI 7FH JZ CEROUNO ; BITS 7 AND 6 = 01 CPI 0BFH JZ UNCERO ; BITS 7 AND 6 = 10 CALL IMPNEM CALL GETAD ; TO SEE IF IT IS FF. MOV A,M CPI 0FFH RZ CALL IMP3B CALL GETAD MOV C,M MOV A,M RAR RAR RAR CALL LETRAS CALL CO CALL IMPCO MOV A,C CALL LETRAS CALL CO RET ; TBYT: CALL GETAD ; 3 BYT INSTRUCTION CALL SAVOT CALL GETAD CALL INCHL CALL SAVIT CALL GETAD MOV A,M CALL LBYTE CALL GETAD CALL INCHL CALL SAVIT CALL BLK CALL GETAD MOV A,M CALL LBYTE CALL IMP11B CALL GETOD MOV L,M MVI H,34H ; TABLE OF ADDRESSES. MOV L,M MVI H,35H ; TABLE OF MNEMONICS CALL ECO3 CALL IMP3B CALL GETOD CALL INCHL CALL SAVOT CALL GETOD CALL INCHL MOV A,M CALL LBYTE CALL GETOD MOV A,M CALL LBYTE CALL BLK CALL IMPRH RET ; DBYT: CALL GETAD ; 2 BYTE INSTRUCTION. CALL SAVOT CALL GETAD CALL INCHL CALL SAVIT CALL GETAD MOV A,M CALL LBYTE CALL IMP14B CALL GETOD MOV A,M RRC RRC JC LMVI ; IT IS AN MVI INSTRUCTION. RLC RLC ; RECOVER THE INSTRUCTION. MOV L,M MVI H,34H ; TABLE OF ADDRESSES. MOV L,M ; MVI H,35H CALL ECO3 ; OUTPUT 3 CHARACT. MNEMONIC. CALL IMP3B CALL GETOD CALL INCHL MOV A,M CALL LBYTE CALL BLK CALL IMPRH RET ; LMVI: CALL ESCMVI ; PRINT MVI CALL IMP3B CALL GETOD MOV A,M RRC RRC RRC ; ROTATE 3 TIMES TO SEE WHICH CHARACT. ANI 07H ; MASC BITS D3,D4,D5,D6,D7. CALL LETRAS CALL CO CALL IMPCO CALL GETOD CALL INCHL MOV A,M CALL LBYTE CALL BLK CALL IMPRH RET ; ESCMVI: MVI B,'M' ; PRINT MVI AT DE TTY. CALL CO MVI B,'V' CALL CO MVI B,'I' CALL CO RET ; LETRAS: ANI 07H ; TO COMPUTE THE LETTERS A,B,C,D,E,H CPI 05H ; FROM 0,1,2,3,4,5,6,7. JZ SUM43 JNC SUM46 ADI 41H MOV B,A RET ; SUM43: ADI 43H MOV B,A RET ; SUM46: ADI 46H MOV B,A RET ; UNCERO: CALL IMPNEM ; 1 BYTE INSTRUCTION WHICH BEGINS CALL IMP3B ;BY 16 CALL GETAD MOV A,M CALL LETRAS CALL CO RET ; CEROUNO: CALL IMPNEM ; RUTINE OF 1 BYTE INSTRUCTION CALL IMP3B ; WHICH BEGINS BY 01 CALL GETAD MOV A,M CALL NUMEROS RET ; NUMEROS: RAR ANI 1FH ; PRINT A NUMBER. CALL LBYTE CALL BLK CALL IMPRH RET ; CEROCERO: CALL IMPNEM ; 1 BYTE INSTRUCTION WHICH BEGINS CALL GETAD ; BY 00 MOV A,M RAR RAR ; TO SEE BIT D1 RC ; IT IS A RET INSTRUCTION RAR JC ESRST ; BIT D2=1 RST INSTRUCTION. CALL GETAD MOV A,M ANI 0FFH ; TO KNOWN IF IT IS HLT. CPI 00H RZ ; IT IS HLT CPI 01H RZ ; IT IS HLT CALL IMP3B CALL GETAD ; IT IS INC OR DCR MOV A,M RAR RAR RAR CALL LETRAS CALL CO RET ; ESRST: CALL IMP3B ; IT IS RST INSTRUCTION CALL GETAD MOV A,M RAR RAR RAR ANI 07H CALL LBYTE RET ; DISAS: CALL CRLF MVI C,0BH ; NUMBER OF CHARACTERS MVI H,35H ; INITIAL ADDRESS MVI L,0A5H ; OF DISASSEMBLER CALL VERO MVI E,0B0H ; ADDRES OF PROGRAM GO (MONITOR) MVI D,35H JMP GO ; END