; DIS-ASSEMBLER FOR I-8086 (DR. ASM-86) ; CPU DEPENDING PART ; ; 1983.6.21. VER.1.00 ; 1982.7.23. VER.1.02 ; ; EQUATIONS OF EXTERNAL & ENTRY SYMBOLS ; ENTRY STRTMD ;START MODE SET UP ROUTINE ENTRY LOOPIN ;LOOP INITIALIZE ROUTINE ENTRY SETDB ;SET DEFINE BYTE PSUDO LINE ENTRY SETDW ;SET DEFINE WORD PSEUDO LINE ENTRY SETBDT ;SET BYTE DATA ENTRY SETWDT ;SET WORD DATA ; ENTRY IXMNEM ;MNEMONIC MAIN INDEX ENTRY IXMAIN ;MAIN ROUTINE INDEX ; ENTRY PORG ;ORIGINATE PSUDO DATA POINT ENTRY PEQU ;EQUATION PSUDO DATA POINT ENTRY PEND ;END PSUDO DATA POINT ; ENTRY CSTUP ;START UP COMMENT ENTRY CPAGE ;PAGE TOP COMMENT ENTRY CTAG ;TAG DATA ENTRY MENDCD ;END CODE POINT ; EXT GETYN ;GET YES NO RESPONSE EXT COPY ;COPY DATA EXT ENDLIS ;ONE LINE END PROCESS EXT STLBOR ;SET LABEL DATA EXT LOOPDL ;LINE DECODE LOOP FOR INDEXED EXT CHKLBS ;CHECK LABEL EXT SRCHCD ;SEARCH CODE EXT SRCHCO ;SEARCH CODE ONLY EXT SETLOC ;SET LOCATION DATA EXT SETBYT ;SET BYTE DATA ; EXT WKOPCD ;OPCODE POINT IN WORK EXT BCODE ;INPUT FILE CODE BUFFER EXT PCURNT ;CURRENT PROGRAM ADDRESS ; ; EQUATIONS OF DATA ; CR EQU 0DH ;CARIAGE RETURN FF EQU 0CH ;FORM FEED LF EQU 0AH ;LINE FEED ; ; OPTION SELECTION AT START POINT ; STRTMD: RET ; ; ONE LINE DECODING LOOP INITIALIZE ROUTINE ; OUTPUT ; HL:LINE END ROUTINE POINTER ; LOOPIN: XRA A STA MDPREF ;PREFIX MODE STA MDSOVR ;SEGMENT OVERRIDE MODE STA MODPTR ;PTR SET UP MODE STA MDLOCK ;LOCK MODE MVI A,-1 STA MENDCD ;RESET END CODE MODE LXI H,ENDLIN RET ; ; END PROCESS OF ONE LINE ; ENDLIN: LDA MDPREF MOV C,A LDA MDSOVR ORA C JZ ENDLIS ;OK TO MAIN CALL SETDBS ;NOT MATCH JMP ENDLIS ;TO MAIN END ROUTINE ; ; SET UP OF LABELED OPERAND ; SLOPDT: ;DATA LABEL MVI A,'D' JMP STLBOP ; SLOPPR: ;PROGRAM LABEL MVI A,'A' JMP STLBOP ; SLOPTB: ;TABLE LABEL MVI A,'T' STLBOP: PUSH H PUSH B MOV C,A MOV A,M INX H MOV H,M MOV L,A ;GET ADDRESS CALL STLBOR POP B POP H INX H INX H INR B INR B RET ; ; SET IMMEDIATE LABEL ; SLOPIM: CALL CHKLBL ;CHECK LABEL MODE JNC SLOPTB ;EXTERNAL PUSH H ;INTERNAL PUSH B LXI H,CPOFST MVI B,7 MOV A,M ;SET 'OFFSET ' STAX D INX D INX H DCR B JNZ $-5 POP B POP H JMP SLOPTB ; ; SET DATA LABEL ; SLOPDL: CALL CHKLBL ;CHECK LABEL MODE JC SLOPDT ;INTERNAL CALL SETPTR ;EXTERNAL MVI A,'.' STAX D INX D JMP SLOPDT ; ; SET DEFINE BYTE ; SETDB: POP H ;CANCEL CODE POINTER SETDBS: CALL CLROPA ;CLEAR OPCODE & OPRAND AREA LXI H,PDB CALL SETOPC ;SET 'DB ' MVI B,1 ;ONE BYTE MVI A,-1 STA MENDCD ;RESET END MODE LDA BCODE ;GET CODE JMP SETBDT ;SET BYTE DATA ; ; SET DEFINE WORD ; SETDW: LXI H,PDW CALL SETOPC ;SET 'DW ' POP H MVI B,0 ;TWO BYTE DATA SO INITIAL ZERO JMP SLOPPR ;SET AS PROGRAM LABEL ; ; SET OPCODE TO BUFFER ; INPUT ; HL:OPCODE DATA POINT ; OUTPUT ; DE:OPERAND BUFFER POINT ; SETOPC: LXI D,WKOPCD ;OPCODE DATA BUFFER LXI B,4 ;LENGTH OF OPCODE CALL COPY LXI D,WKOPCD+8 ;OPERAND BUFFER POINT RET ; ; SET COMMA ; SETCOM: PUSH PSW MVI A,',' STAX D INX D POP PSW RET ; ; CLEAR OPCODE & OPERAND AREA ; CLROPA: LXI H,WKOPCD MVI B,56 CLRLIL: MVI M,' ' ;FILL BY SPACE INX H DCR B JNZ CLRLIL MVI M,0 ;SET END CODE RET ; ; SET WORD DATA ; INPUT ; HL:DATA ; DE:BUFFER POINTER ; SETWDT: PUSH PSW MVI A,'0' STAX D INX D CALL SETLOC ;SET ADDRESS MVI A,'H' STAX D INX D POP PSW RET ; ; BYTE DATA ; ABSBYT: MOV A,M INX H INR B ; ; SET BYTE DATA ; INPUT ; A:DATA ; DE:BUFFER POINTER ; SETBDT: PUSH PSW MVI A,'0' STAX D INX D POP PSW SETBDS: CALL SETBYT MVI A,'H' STAX D INX D RET ; ; SET END CODE MODE ; STENDC: PUSH PSW XRA A STA MENDCD ;SET END CODE MODE POP PSW RET ; ; CHECK LABEL MODE ; OUTPUT ; CF:ON INTERNAL LABEL OFF EXTERNAL LABEL OR NOT DEFINED ; CHKLBL: PUSH H PUSH D PUSH B MOV A,M INX H MOV H,M MOV L,A ;GET ADDRESS CALL CHKLBS ;CHECK LABEL TABLE MOV A,M ;GET MODE CODE POP B POP D POP H RNC ;NOT FOUND ANI 7FH CPI 'X' RET ; ; EACH INSTRUCTION ROUTINE ; ; INPUT ; A:CODE ; C:A ; B:LENGTH OF CODE ; DE:OPERAND DATA BUFFER POINT ; HL:CODE DATA BUFFER POINT ; ; ONE BYTE NO OPERAND ; OBNOOP: CPI 9CH RNZ ;DO NOTHING MVI A,'F' ;PUSHF JMP SETFCD ;SET F ; OBNOPE: ;NO OPERAND END CODE JMP STENDC ; ; SHIFT CODE EA1/R1,1/CL ; SHIFTC: CALL SBGRUP ;SET BY SECOND OPCODE JC SETDBS ;MISS AMTCH CALL EARGST ;SET EA1/R1 CALL SETCOM MOV A,C ANI 2 MVI A,'1' JZ $+9 MVI A,'C' STAX D INX D MVI A,'L' STAX D ;SET 1 OR CL INX D RET ; ; STRING ; STRING: ANI 0FAH CPI 0AAH JZ STRINN ;STOS OR SCAS SO NO SEGMENT OVERRIDE LDA MDSOVR ORA A JNZ STRINO ;WITH SEGMENT OVERRIDE STRINN: MOV A,C ANI 1 MVI A,'B' JZ $+5 ;BYTE MVI A,'W' ;WORD CALL SETFCD ;SET FIFTH CODE STRINS: ;CHECK & MAKE REPEAT PREFIX LDA MDPREF ORA A RZ ;NO PREFIX MOV A,C ANI 0FEH CPI 0A6H JZ $+8 ;WITH MODE CPI 0AEH JNZ STRINP ;WITHOUT MODE PUSH H ;WITH MODE LXI H,-13 DAD D LDA MDPREF ANI 1 JNZ $+6 MVI M,'N' INX H MVI M,'Z' POP H STRINP: XRA A STA MDPREF ;CLEAR PREFIX MODE RET ; STRINO: ;WITH OVERRIDE CALL STRINS ;CHECK PREFIX MOV A,C ANI 0FEH CPI 0ACH JZ STRIND ;LODS SO ONLY SOURCE CALL STRINE ;'.0' DUMMY CALL SETCOM STRIND: CALL SETOVR ;SET OVERRIDE CALL SETPTR ;SET SIZE STRINE: ;SET DUMMY DATA MVI A,'.' STAX D INX D MVI A,'0' STAX D INX D RET ; ; XLAT ONE BYTE WITH SEGMENT OVERRIDE ; OBNOVR: LDA MDSOVR ORA A RZ ;NO OVERRIDE CALL SETOVR ;OVERRIDE MODE MOV A,C ANI 0FEH MOV C,A CALL SETPTR JMP STRINE ; ; LONG DISPLACEMENT ; LDISPL: CPI 0E9H ;JMP CZ STENDC ;END CODE PUSH D MOV E,M INX H MOV D,M ;GET DISPLACEMENT INR B CDISPL: INR B LHLD PCURNT MOV A,B INX H DCR A JNZ $-2 ;TO NEXT POINT OF THIS INSTRUCTION DAD D POP D MVI C,'A' JMP STLBOR ;SET LABEL ; ; SHORT DISPLACEMENT ; SDISPE: CALL STENDC ;END CODE SDISPL: ANI 0FEH CPI 0E0H JNZ SDISPS DCX D DCX D DCX D DCX D MOV A,C ANI 1 JNZ $+7 ;LOOPZ MVI A,'N' STAX D INX D MVI A,'Z' STAX D INX D INX D INX D JZ SDISPS ;LOOPNZ INX D SDISPS: PUSH D MOV A,M MOV E,A RAL SBB A ;GET SIGN MOV D,A JMP CDISPL ; ; FAR LABEL ; FARLBL: CPI 0EAH CZ STENDC ;JMPF CPI 9AH MVI A,'F' CZ SETFCD ;SET F CALL SLOPPR ;SET OFFSET CALL SETCOM MOV A,M INX H PUSH H MOV H,M MOV L,A CALL SETWDT ;SET ADDRESS POP H INX H INR B INR B ;+4 BYTES RET ; ; RETURN WITH OFFSET ; RETOFF: CALL STENDC JMP ABSBYT ;SET DATA ; ; DOUBLE EA/R MODE ; WEARMD: MVI A,-1 STA MODPTR ;NO NEED OF PTR MOV A,M STA CODMOV ;SAVE SECOND OPCODE MOV A,C ANI 2 JZ WEARMS ;EA,R CALL SETREM ;R,EA CALL SETCOM JMP EARGST ;SET EA OR R ; WEARMS: ;EA,R CALL EARGST CALL SETCOM JMP SETREM ; ; EA1/R1,DATA ; EADATA: ANI 0FEH CPI 80H JNZ EADATS ;MOV CALL SBGRUP ;GET BY SECOND CODE JC SETDBS ;NOT MATCH EADATS: CALL EARGST ;SET EA1/R1 EADATC: CALL SETCOM MOV A,C RRC JC SLOPIM ;WORD IMMENDIATE JMP ABSBYT ;BYTE ; ; EA1/R1,SIGN EXPAND DATA ; SEXIMD: CALL SBGRUP JC SETDBS ;NOT MATCH SECOND CODE CALL EARGST ;SET EA1/R1 CALL SETCOM MOV A,M ;GET IMMEDIATE DATA INX H PUSH H PUSH B MOV L,A RLC SBB A ;GET SIGN MOV H,A MVI C,'T' CALL STLBOR ;SET AS TABLE DATA POP B POP H INR B ;UP ONE BYTE RET ; ; R1,DATA ; RGDATA: PUSH H ANI 8 LXI H,IXRGWD JNZ $+6 ;WORD LXI H,IXRGBT ;BYTE MOV A,C CALL SETRES ;SET REGISTER NAME POP H CALL SETCOM MOV A,C ANI 8 JNZ SLOPIM ;WORD IMMEDIATE JMP ABSBYT ;BYTE ; ; ACC,ADD ; ACCADD: CALL SETACC ;SET ACC CALL SETCOM ACCADS: MVI A,-1 STA MODPTR ;SET PTR MODE CALL SETOVR JMP SLOPDL ;ADDRESS ; ; ADD,ACC ; ADDACC: CALL ACCADS ;SET ADDRESS CALL SETCOM JMP SETACC ; ; SEG,EA2/R2 ; SEGEAD: MOV A,M CALL SETSEG ;SET SEGMENT CALL SETCOM SEGEAS: MOV A,C ORI 1 ;TO WORD MODE MOV C,A JMP EARGST ; ; EA1/R1,SEG ; EADSEG: MVI A,-1 STA MODPTR MOV A,M STA CODMOV ;SET SECOND OPCODE CALL SEGEAS ;SET EA/R BY WORD MODE CALL SETCOM LDA CODMOV JMP SETSEG ; ; ACC,BYTE NUMBER ; ACCBYT: CALL SETACC CALL SETCOM JMP ABSBYT ; ; BYTE NUMBER,ACC ; BYTACC: CALL ABSBYT CALL SETCOM JMP SETACC ; ; ACC,DX ; ACCDX: CALL SETACC CALL SETCOM ACCDXS: MVI A,'D' STAX D INX D MVI A,'X' STAX D INX D RET ; ; DX,ACC ; DXACC: CALL ACCDXS CALL SETCOM JMP SETACC ; ; ACC,DATA ; ACCDAT: CALL SETACC JMP EADATC ; ; AX,R2 ; ACCRGS: MVI A,'A' STAX D INX D MVI A,'X' STAX D INX D CALL SETCOM ACCRGG: PUSH H LXI H,IXRGWD MOV A,C CALL SETRES ;SET REGISTER NAME POP H RET ; ; EA1/R1,DATA OR EA1/R1 ; EDOREA: MOV A,M STA CODMOV ;SAVE SECOND OPC CALL SBGRUP ;SECOND BYTE GROUP JC SETDBS ;MISS MATCH CALL EARGST ;SET EA1/R1 LDA CODMOV ANI 38H JZ EADATC ;TEST RET ;OTHER ; ; R1,EA2/R2 ; LDEFAD: MOV A,M ANI 0C0H CPI 0C0H JZ SETDBS ;ERROR MOV A,C ORI 3 MOV C,A ;WORD MODE & R1/EA2 MODE JMP WEARMD ; ; EA1/R1 WORD ; EADWRD: CPI 0FFH JNZ EARGST CALL SBGRUP ;SECOND BYTE GROUP JC SETDBS ;ERROR MOV A,M ANI 30H CPI 20H CZ STENDC ;JMP OR JMPF MOV A,M ANI 38H CPI 18H JNZ EARGST MVI A,'F' ;CALLF CALL SETFCD JMP EARGST ; ; EA1/R1 BYTE ; EADBYT: CALL SBGRUP JC SETDBS JMP EARGST ; ; INT 3 ; INT3: MVI A,'3' STAX D INX D RET ; ; ESC BYTE,EA/R ; ESCDAT: ANI 7 MOV C,A MOV A,M ANI 38H ORA C CALL SETBDT MOV A,M ANI 0C0H CPI 0C0H RZ ;NOP CALL SETCOM MVI A,-1 STA MODPTR ;SET PTR MODE JMP SETEAD ;SET EA ; ; REPEAT PREFIX ; REPFIX: LDA MDPREF ;GET CURRENT MODE ORA A JNZ SETDBS ;DOUBLE REPEAT PREFIX MOV A,C STA MDPREF ;SET PREFIX CODE PREFIX: PUSH H PUSH B PUSH D MOV A,M LXI H,IXMNEM CALL SRCHCO ;SEARCH CODE JC PREFIE ;ERROR XTHL XCHG LXI B,4 CALL COPY ;SET OPCODE INX D INX D INX D INX D ;TO NEXT CODE POINT POP H PUSH D LXI D,IXMAIN DAD D MOV E,M INX H MOV D,M XCHG POP D ;TEXT POINTER POP B ;RESTORE LENGTH INR B ;UP ONE BYTE XTHL MOV A,M ;GET CURRENT CODE INX H MOV C,A RET ;TO EACH ROUTINE ; PREFIE: ;NOT FOUND MISS MATCH POP D POP B POP H JMP SETDBS ; ; LOCK PREFIX ; LOKFIX: LDA MDPREF ORA A JNZ SETDBS ;NO PREFIX PERMITED LDA MDLOCK ORA A JNZ SETDBS ;DOUBLE LOCK IS ERROR CMA STA MDLOCK JMP PREFIX ; ; SEGMENT OVERRIDE ; SEGOVR: LDA MDSOVR ORA A JNZ SETDBS ;DOUBLE SEGMENT OVERRIDE IS ERROR MOV A,C STA MDSOVR ;SET OVERRIDE MODE DCX D DCX D DCX D DCX D DCX D DCX D DCX D DCX D JMP PREFIX ; ; SECOND CODE IS 0AH ; SECNOP: MOV A,M CPI 0AH JNZ SETDBS ;MISS MATCH INX H INR B RET ; ; SET EA OR R ; INPUT ; C:FIRST OPCODE ; B:LENGTH ; HL:DATA POINT ; DE:TEXT POINT ; OUTPUT ; C:C ; B:B+1 OR +3 ; EARGST: MOV A,M ANI 0C0H CPI 0C0H JNZ SETEAD ;SET EFFECTIVE ADDRESS ; ; SET REGISTER NAME ; INPUT/OUTPUT ; SAME WITH EARGST ; SETREG: PUSH H MOV A,C RRC MOV A,M LXI H,IXRGWD JC $+6 LXI H,IXRGBT ;BYTE CALL SETRES ;SET CODE POP H INX H INR B ;UP ONE BYTE LENGTH RET ; ; SET REGISTER NAME ; INPUT ; A:BIT 0-2 CODE OF REGISTER ; HL:DATA INDEX TOP ; SETRES: ANI 7 ADD A ADD L MOV L,A MVI A,0 ADC H MOV H,A MOV A,M STAX D ;SET REGISTER NAME INX D INX H MOV A,M STAX D INX D STA MODPTR ;SET PTR UPDATE MODE RET ; ; SET REGISTER OF MOV ; SETREM: PUSH H MOV A,C RRC LXI H,IXRGWD JC $+6 ;WORD LXI H,IXRGBT ;BYTE LDA CODMOV RRC RRC RRC CALL SETRES POP H RET ; ; SET EFFECTIVE ADDRESS ; SETEAD: CALL SETOVR ;SET OVERRIDE INR B MOV A,M ANI 0C7H INX H CPI 6 JZ SLOPDL ;DIRECT ADDRESS PUSH PSW CALL SETPTR ;SET W/B POP PSW PUSH PSW ANI 0C0H JZ SETEAN ;NO OFFSET CPI 80H JZ SETEAL ;LONG OFFSET MOV A,M ;SHORT OFFSET ORA A JP $+9 ;PLUS MVI A,'-' ;MINUS STAX D INX D XRA A SUB M CALL SETBDS ;SET DISPLACEMENT INX H INR B ;UP BYTE COUNT SETEAN: POP PSW PUSH H ANI 7 ADD A ADD A LXI H,IXEAMD ADD L MOV L,A MVI A,0 ADC H MOV H,A MVI A,'[' STAX D INX D MOV A,M STAX D INX D INX H MOV A,M STAX D ;SET INDEX REGISTER NAME INX D INX H MOV A,M CPI ' ' JZ SETEAE ;SINGLE MODE MVI A,'+' ;DOUBLE MODE STAX D INX D MOV A,M STAX D INX D INX H MOV A,M STAX D INX D SETEAE: MVI A,']' STAX D INX D POP H RET ; SETEAL: ;LONG OFFSET CALL SLOPTB ;SET AS LABEL OF TABLE JMP SETEAN ; ; SET PTR ; INPUT ; C:BIT 0 W/B CODE ; SETPTR: LDA MODPTR ORA A RNZ ;NO NEED OF PTR CMA STA MODPTR ;SET PTR UPDATE MODE PUSH H MOV A,C ANI 1 LXI H,CPWORD JNZ $+6 ;WORD LXI H,CPBYTE ;BYTE PUSH B MVI B,9 MOV A,M STAX D ;SET 'XXXX PTR ' INX H INX D DCR B JNZ $-5 POP B POP H RET ; ; SET SEGMENT OVERRIDE CODE ; SETOVR: LDA MDSOVR ORA A RZ ;NO SEGMENT OVERRIDE CALL SETSES ;SET SEGMENT CODE MVI A,':' STAX D INX D XRA A STA MDSOVR ;CLEAR OVERRIDE MODE RET ; ; SET SEGMENT NAME ; INPUT ; A:CODE DATA ; SETSEG: ORI 1 STA MODPTR ;SET PTR MODE SETSES: RRC RRC ANI 6 PUSH H LXI H,IXSEGM ADD L MOV L,A MVI A,0 ADC H MOV H,A MOV A,M STAX D INX D INX H MOV A,M STAX D ;SET SEGMENT NAME INX D POP H RET ; ; SECOND BYTE FROUP MNEMONIC ; OUTPUT ; CF:ON ERROR ; SBGRUP: DCX D DCX D DCX D DCX D DCX D DCX D DCX D LDAX D SUI '0' CPI 5 CMC RC ;TOO LARGE OR ERROR DCX D PUSH B ADD A ADD A ADD A ADD A ADD A ;*32 MOV C,A MOV A,M ;GET SECOND CODE RRC ANI 1CH ADD C MOV C,A MVI B,0 PUSH H LXI H,IXGRUP DAD B ;GET MNEMONIC POINT MOV A,M CPI '*' STC JZ SBGRUS ;ERROR CODE MVI B,4 MOV A,M STAX D ;SET MNEMONIC INX D INX H DCR B JNZ $-5 INX D INX D INX D INX D ORA A SBGRUS: POP H POP B RET ; ; SET ACC ; INPUT ; C:BIT 0 W/B ; SETACC: MVI A,'A' STAX D INX D MOV A,C ANI 1 MVI A,'L' JZ $+5 ;BYTE MVI A,'X' ;WORD STAX D INX D RET ; ; SET FIFTH CODE ; INPUT ; A:CODE ; DE:NEXT BLOCK TOP ; SETFCD: DCX D DCX D DCX D DCX D STAX D INX D INX D INX D INX D RET ; ; MAION ROUTINE INDEX ; IXMAIN: DW OBNOOP ;0 NO OPERAND DW OBNOPE ;1 NO OPERAND END DW SHIFTC ;2 SHIFT DW STRING ;3 STRING DW LDISPL ;4 LONG DISPLACEMENT DW SDISPE ;5 SHORT DISPLACEMENT END DW FARLBL ;6 FAR-LABEL DW RETOFF ;7 BYTE NUMBER END DW WEARMD ;8 EA1/R1,EA2/R2 DW EADATA ;9 EA1/R1,DATA DW RGDATA ;10 R1,DATA DW ACCADD ;11 ACC,ADD DW ADDACC ;12 ADD,ACC DW SEGEAD ;13 SEG,EA2/R2 DW EADSEG ;14 EA1/R1,SEG DW ACCBYT ;15 ACC,BYTE NUMBER DW BYTACC ;16 BYTE NUMBER,ACC DW ACCDX ;17 ACC,DX DW DXACC ;18 DX,ACC DW ACCDAT ;19 ACC,DATA DW WEARMD ;20 R1,EA2/R2 DW ACCRGS ;21 AX,R2 DW EDOREA ;22 EA1/R1,DATA OR EA1/R1 DW LDEFAD ;23 R1,EA2/R2 DW ACCRGG ;24 R1 WORD DW SETSEG ;25 SEG DW EADWRD ;26 EA1/R1 WORD DW EADBYT ;27 EA1/R1 BYTE DW SDISPL ;28 SHORT DISPLACEMENT DW INT3 ;29 INT 3 DW ABSBYT ;30 INT N DW ESCDAT ;31 ESC BYTE,EA/R DW REPFIX ;32 REPEAT PREFIX DW LOKFIX ;33 LOCK PREFIX DW SEGOVR ;34 SEGMENT OVERRIDE DW SECNOP ;35 SECOND OPCODE MUST BE 0AH DW SEXIMD ;36 SIGN EXPANDED IMMEDIATE DW OBNOVR ;37 ONE BYTE WITH SEGMENT OVERRIDE ; ; INDEX OF MNEMONICS ; MASK 1B MASK FOR CODE ; COUNT 1B BLOCK COUNT ; BLOCK 5B*N CODE 1B ; IXMNEM: DB 0FFH,21 ;0 NO OPRERAND 1B DB 09FH,'LAHF' DB 09DH,'POPF' DB 09CH,'PUSH' ;PUSHF DB 09EH,'SAHF' DB 037H,'AAA ' DB 03FH,'AAS ' DB 098H,'CBW ' DB 099H,'CWD ' DB 027H,'DAA ' DB 02FH,'DAS ' DB 0CEH,'INTO' DB 0F8H,'CLC ' DB 0FCH,'CLD ' DB 0FAH,'CLI ' DB 0F5H,'CMC ' DB 0F4H,'HLT ' DB 0F9H,'STC ' DB 0FDH,'STD ' DB 0FBH,'STI ' DB 09BH,'WAIT' DB 090H,'NOP ' ; DB 0FFH,3 ;1 NO OPERAND END 1B DB 0CFH,'IRET' DB 0C3H,'RET ' DB 0CBH,'RETF' ; DB 0FCH,1 ;2 EA1/R1,1/CL SHIFT 2-4B DB 0D0H,'*3 ' ; DB 0FEH,5 ;3 STRING 1B DB 0A4H,'MOVS' DB 0A6H,'CMPS' DB 0AEH,'SCAS' DB 0ACH,'LODS' DB 0AAH,'STOS' ; DB 0FFH,2 ;4 DISPLACEMENT 16 BITS 3B DB 0E9H,'JMP ' DB 0E8H,'CALL' ; DB 0FFH,1 ;5 DISPLACEMENT 8 END 2B DB 0EBH,'JMPS' ; DB 0FFH,2 ;6 FAR-LABEL 5B DB 0EAH,'JMPF' DB 09AH,'CALL' ;CALLF ; DB 0FFH,2 ;7 BYTE NUMBER END 2B DB 0C2H,'RET ' DB 0CAH,'RETF' ; DB 0FCH,9 ;8 EA1/R1,EA2/R2 2-4B DB 088H,'MOV ' DB 000H,'ADD ' DB 008H,'OR ' DB 010H,'ADC ' DB 018H,'SBB ' DB 020H,'AND ' DB 028H,'SUB ' DB 030H,'XOR ' DB 038H,'CMP ' ; DB 0FEH,2 ;9 EA1/R1,DATA 3-6B DB 0C6H,'MOV ' DB 080H,'*0 ' ;ADD - CMP ; DB 0F0H,1 ;10 R1,DATA 2-3B DB 0B0H,'MOV ' ; DB 0FEH,1 ;11 ACC,ADD 2-3B DB 0A0H,'MOV ' ; DB 0FEH,1 ;12 ADD,ACC 2-3B DB 0A2H,'MOV ' ; DB 0FFH,1 ;13 SEG,EA2/R2 2-4B DB 08EH,'MOV ' ; DB 0FFH,1 ;14 EA1/R1,SEG 2-4B DB 08CH,'MOV ' ; DB 0FEH,1 ;15 ACC,BYTE NUMBER 2B DB 0E4H,'IN ' ; DB 0FEH,1 ;16 BYTE NUMBER,ACC 2B DB 0E6H,'OUT ' ; DB 0FEH,1 ;17 ACC,DX 1B DB 0ECH,'IN ' ; DB 0FEH,1 ;18 DX,ACC 1B DB 0EEH,'OUT ' ; DB 0FEH,9 ;19 ACC,8/16 NUMBER 2-3B DB 004H,'ADD ' DB 00CH,'OR ' DB 014H,'ADC ' DB 01CH,'SBB ' DB 024H,'AND ' DB 02CH,'SUB ' DB 034H,'XOR ' DB 03CH,'CMP ' DB 0A8H,'TEST' ; DB 0FEH,2 ;20 R1,EA2/R2 2-4B DB 084H,'TEST' DB 086H,'XCHG' ; DB 0F8H,1 ;21 AX,R2 1B DB 090H,'XCHG' ; DB 0FEH,1 ;22 EA1/R1,DATA OR EA1/R1 3-6B OR 2-4B DB 0F6H,'*1 ' ;TEST - IDIV ; DB 0FFH,3 ;23 R1,EA2 (EXCEPT MODE=11) 2-4B DB 08DH,'LEA ' DB 0C5H,'LDS ' DB 0C4H,'LES ' ; DB 0F8H,4 ;24 R1 WORD 1B DB 050H,'PUSH' DB 058H,'POP ' DB 040H,'INC ' DB 048H,'DEC ' ; DB 0E7H,2 ;25 SEG 1B DB 006H,'PUSH' DB 007H,'POP ' ; DB 0FFH,2 ;26 EA1/R1 WORD 2-4B DB 0FFH,'*2 ' ;INC - PUSH DB 08FH,'POP ' ; DB 0FFH,1 ;27 EA1/R1 2-4B DB 0FEH,'*4 ' ;INC,DEC ; DB 0FFH,20 ;28 DISPLACEMENT BYTE 2B DB 074H,'JZ ' DB 07CH,'JL ' DB 07EH,'JLE ' DB 072H,'JC ' DB 076H,'JBE ' DB 07AH,'JPE ' DB 070H,'JO ' DB 078H,'JS ' DB 075H,'JNZ ' DB 07DH,'JGE ' DB 07FH,'JG ' DB 073H,'JNC ' DB 077H,'JA ' DB 07BH,'JPO ' DB 071H,'JNO ' DB 079H,'JNS ' DB 0E2H,'LOOP' DB 0E1H,'LOOP' ;LOOPZ DB 0E0H,'LOOP' ;LOOPNZ DB 0E3H,'JCXZ' ; DB 0FFH,1 ;29 INT 3 1B DB 0CCH,'INT ' ; DB 0FFH,1 ;30 INT N 2B DB 0CDH,'INT ' ; DB 0F8H,1 ;31 ESC BYTE NUMBER,EA/R 2-4B DB 0D8H,'ESC ' ; DB 0FEH,1 ;32 REPEAT PREFIX DB 0F2H,'REP ' ; DB 0FFH,1 ;33 LOCK PREFIX DB 0F0H,'LOCK' ; DB 0E7H,1 ;34 SEGMENT OVERRIDE DB 026H,'*5 ' ; DB 0FFH,2 ;35 SECOND OPCODE MUST BE 0AH DB 0D5H,'AAD ' DB 0D4H,'AAM ' ; DB 0FFH,1 ;36 SIGN EXAND IMMEDIATE 3-5B DB 083H,'*0 ' ;ADD-CMP ; DB 0FFH,1 ;37 ONE BYTE NO OPERAND WITH SEGMENT OVERRIDE DB 0D7H,'XLAT' ; DB 0 ; ; SECOND BYTE GROUP ; IXGRUP: DB 'ADD ' DB 'OR ' DB 'ADC ' DB 'SBB ' DB 'AND ' DB 'SUB ' DB 'XOR ' DB 'CMP ' ; DB 'TEST' DB '****' DB 'NOT ' DB 'NEG ' DB 'MUL ' DB 'IMUL' DB 'DIV ' DB 'IDIV' ; DB 'INC ' DB 'DEC ' DB 'CALL' DB 'CALL' ;CALLF DB 'JMP ' DB 'JMPF' DB 'PUSH' DB '****' ; DB 'ROL ' DB 'ROR ' DB 'RCL ' DB 'RCR ' DB 'SHL ' DB 'SHR ' DB '****' DB 'SAR ' ; DB 'INC ' DB 'DEC ' DB '****' DB '****' DB '****' DB '****' DB '****' DB '****' ; ; REGHISTER NAME & OTHER INDEXES ; IXSEGM: DB 'ESCSSSDS' IXRGWD: DB 'AXCXDXBXSPBPSIDI' IXRGBT: DB 'ALCLDLBLAHCHDHBH' IXEAMD: DB 'BXSIBXDIBPSIBPDI' DB 'SI DI BP BX ' CPBYTE: DB 'BYTE PTR ' CPWORD: DB 'WORD PTR ' CPOFST: DB 'OFFSET ' ; ; PSEUDO OPERATION CODES ; PORG: DB 'ORG ' PEND: DB 'END ' PEQU: DB 'EQU ' PDB: DB 'DB ' PDW: DB 'DW ' ; ; COMMENTS ; CSTUP: DB 'DIS-ASSEMBLER I8086 VER.1.02',0 CPAGE: DB FF,' DIS-ASSEMBLER I8086 VER.1.02',0 CTAG: DB ':',0 ;TAG DATA ; ; WORKINGS ; MDPREF: DS 1 ;REPEAT PREFIX MODE MDSOVR: DS 1 ;SEGMENT OVERRIDE MODPTR: DS 1 ;PTR SET UP MODE MDLOCK: DS 1 ;LOCK MODE CODMOV: DS 1 ;DOUBLE REGISTER CODE SECOND OPCODE ; MENDCD: DS 1 ;END CODE MODE 0 END CODE ; ; END