home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / sd386v50.zip / sd386src.zip / DISASM.H < prev    next >
Text File  |  1995-04-14  |  11KB  |  175 lines

  1. /*****************************************************************************/
  2. /*                                                                           */
  3. /*  File:                                                IBM Confidential    */
  4. /*      DISASM.H                                                             */
  5. /*                                                                           */
  6. /*  OS/2 Protect Mode EXE File Debug, Interface to Debug Toolbox             */
  7. /*  Copyright 1988 by IBM Corp.  All rights reserved.                        */
  8. /*                                                                           */
  9. /*                                                                           */
  10. /*  Description:                                                             */
  11. /*      Typedef and constant for disassembler routine, also define the       */
  12. /*      interface needed                                                     */
  13. /*  History:                                                                 */
  14. /*      11/01/88   Jim Christensen (JimC at YKTVMH)     - created/written    */
  15. /*      04/19/91   Add more rettype constants.                            107*/
  16. /*      05/30/91   hooking up the assembler window.                       106*/
  17. /*                                                                           */
  18. /*...Release 1.00 (03/03/92)                                                 */
  19. /*...                                                                        */
  20. /*... 03/18/92  606   Srinivas  Handle multiple segment numbers in lno table */
  21. /*...                           due to alloc_text pragma.                    */
  22. /*...Release 1.01 (03/31/92)                                                 */
  23. /*...                                                                        */
  24. /*... 05/13/92  702   Joe       Fix for display of 16 bit opndsin use32 segs.*/
  25. /*****************************************************************************/
  26.  
  27. #define LINT_ARGS 1
  28.  
  29.  
  30. /*****************************************************************************/
  31. /* -do not change these defines.                                             */
  32. /*****************************************************************************/
  33. #define  USE16 0
  34. #define  USE32 1
  35.  
  36. typedef struct
  37. {
  38.   uchar  *InstPtr;                      /* instruction stream                */
  39.   uchar  *HexBuffer;                    /* disassembled hex output           */
  40.   uchar  *MneBuffer;                    /* disassembled mnemonic output      */
  41.   uchar  *TextBuffer;                   /* disassembled instruction output   */
  42.   ulong  InstEIP;                       /* EIP value for this instruction    */
  43.   struct
  44.   {
  45.     uint   Use32bit : 1;                /* 1 : use32, 0 : use16           101*/
  46.     uint   N387bit  : 1;                /* 1 : 80387                      101*/
  47.     uint   MASMbit  : 1;                /* 1 : masm, 0 : al/86            101*/
  48.     uint   Unused1  : 29;               /* reserved                       521*/
  49.   } Flags;                              /* flagbits for options              */
  50.   uchar  retInstLen;                    /* instruction length                */
  51.   uchar  retType;                       /* type of operand info              */
  52.   uchar  retReg;                        /* register field                    */
  53.   ulong  retOffset;                     /* instrn's offset/displacement      */
  54.   ushort retSeg;                        /* instrn's selector field           */
  55.   uchar  retBase;                       /* base register field               */
  56.   uchar  retIndex;                      /* index register field              */
  57.   uchar  retScale;                      /* scaling factor field              */
  58.   struct
  59.   {                                     /* retOpSize and retAddr32 swapped702*/
  60.      uint   retOpSize : 1;              /* 1 : opsize32, 0 : opsize16     702*/
  61.      uint   retAddr32 : 1;              /* 1 : addr32, 0 : addr16         702*/
  62.      uint   Unused2   : 30;             /* reserved                       521*/
  63.   }retbits;
  64.   ushort retescap;                      /* coprocessor code                  */
  65.   ulong  retImmed;                      /* immediate value                   */
  66. }DTIF;                                  /* Dave Toll's interface             */
  67.  
  68.  
  69. /* rettype definitions */
  70.  
  71. #define NOOPND              0            /* no operand info returned          */
  72. #define MEM8BIT             1            /* inst accesses 8 bit mem loc       */
  73. #define MEM16OR32BIT        2            /* inst accessss 16 bit mem loc      */
  74.                                          /* retOpSize = 0 => 32 bit           */
  75.                                          /* retOpSize = 1 => 16 bit           */
  76. #define MEM1616OR3216BIT    3            /* inst accessss 16:16 operand       */
  77.                                          /* retOpSize = 0 => 16:16            */
  78.                                          /* retOpSize = 1 => 32:16            */
  79. #define JMPIPDISP           4            /* inst jumps to IP/EIP+disp         */
  80. #define JMPNEARIND          5            /* inst jumps to addr in mem loc     */
  81. #define JMPREGNEAR          6            /* inst jumps to addr in reg         */
  82. #define JMPFARIND           7            /* inst jumps to addr in mem loc     */
  83. #define JMPFARDIR           8            /* inst jumps to addr of memory      */
  84. #define INTNINST            9            /* inst is INT n                     */
  85. #define XLATINST           10            /* inst is XLAT                      */
  86. #define RETNEAR            11            /* inst is a near return             */
  87. #define RETFAR             12            /* inst is a far return              */
  88. #define INTRET             13            /* inst is an IRET                   */
  89. #define ILLEGINST          14            /* an unknown instruction            */
  90. #define LEAINST            15            /* inst is load effective address    */
  91. #define ESCMEM             16            /* inst is escape that accesses mem  */
  92. #define ESCINST            17            /* inst is escape (no mem access)    */
  93. #define BOUNDINST          18            /* inst is BOUND                     */
  94. #define LGDTETC            19            /* LGDT/LIDT/SGDT/SIDT instruction   */
  95. #define BADSEGOV           20            /* a spurious segment override       */
  96. #define IMMEDINST          21            /* inst involving reg and immed      */
  97. #define CALLIPDISP         22            /* a near call to IP/EIP+disp        */
  98. #define CALLNEARIND        23            /* inst calls addr in mem loc        */
  99. #define CALLREGNEAR        24            /* inst calls addr in register       */
  100. #define CALLFARIND         25            /* inst calls addr in mem loc        */
  101. #define CALLFARDIR         26            /* inst calls addr of memory         */
  102. #define REPETC             27            /* REP/REPZ/REPNZ/REPE/REPNE prefix  */
  103. #define BYTESTRINST        28            /* CMPS/LODS/MOVS/SCAS/STOS byte     */
  104. #define WORDSTRINST        29            /*  "                  " word/dword  */
  105.  
  106. /* retreg definitions (for rettypes 1, 2, 3, 5, 7, 10, 20, 23, or 25 ) */
  107.  
  108. #define RETREGES    1                   /* ES register                       */
  109. #define RETREGCS    2                   /* CS register                       */
  110. #define RETREGSS    3                   /* SS register                       */
  111. #define RETREGDS    4                   /* DS register                       */
  112. #define RETREGFS    5                   /* FS register                       */
  113. #define RETREGGS    6                   /* GS register                       */
  114.  
  115. /* retreg definitions (for rettype 6 or 24) */
  116.  
  117. #define RETREGAX      0                 /* AX register                       */
  118. #define RETREGCX      1                 /* CX register                       */
  119. #define RETREGDX      2                 /* DX register                       */
  120. #define RETREGBX      3                 /* BX register                       */
  121. #define RETREGSP      4                 /* SP register                       */
  122. #define RETREGBP      5                 /* BP register                       */
  123. #define RETREGSI      6                 /* SI register                       */
  124. #define RETREGDI      7                 /* DI register                       */
  125. #define RETREGEAX     8                 /* EAX register                      */
  126. #define RETREGECX     9                 /* ECX register                      */
  127. #define RETREGEDX    10                 /* EDX register                      */
  128. #define RETREGEBX    11                 /* EBX register                      */
  129. #define RETREGESP    12                 /* ESP register                      */
  130. #define RETREGEBP    13                 /* EBP register                      */
  131. #define RETREGESI    14                 /* ESI register                      */
  132. #define RETREGEDI    15                 /* EDI register                      */
  133. #define RETREGNONE  255                 /* no register used                  */
  134.  
  135. /* repeat type return code             */
  136. #define REPTYPE     27
  137.  
  138.  
  139. #define TextCol 19                      /* instr output column number        */
  140. #define ModNameCol TextCol+15           /* allow min of 15 space for inst    */
  141. #define Use387    1                     /* if 1 use 387 instruction, 0 no    */
  142. /*  #define  AL86_MASM   1                 MYVIEW                            */
  143.  
  144.  
  145. void printmnem (USHORT);
  146. void prt8reg16 (UCHAR);
  147. void print387m (USHORT);
  148.  
  149. #define HEXBUFFSIZE  33
  150. #define MNEMBUFFSIZE 10 /* use this size for strings like"BOUND????"      905*/
  151. #define TEXTBUFFSIZE 49
  152.  
  153. typedef struct
  154. {
  155.  uint    instaddr;                                                      /*108*/
  156.  char    mne[MNEMBUFFSIZE];                                             /*108*/
  157.  uchar   hex[HEXBUFFSIZE];                                              /*108*/
  158.  uchar   text[TEXTBUFFSIZE];                                            /*108*/
  159.  uchar   len;
  160.  uchar   mod_type;                      /* => 16- or 32-bit module        106*/
  161.                                         /*  0 - 16 bit                    106*/
  162.                                         /*  1 - 32 bit                    106*/
  163.  uchar   type;                          /* type of operand info              */
  164.  ushort  OpSize;                        /* 1 =>opsize32, 0  opsize16      108*/
  165.  uchar   reg;                           /* register field                    */
  166.  ulong   offset;                        /* instrn's offset/displacement      */
  167.  ushort  seg;                           /* instrn's selector field           */
  168.  uchar   base;                          /* base register field               */
  169.  uchar   index;                         /* index register field              */
  170.  uchar   scale;                         /* scaling factor field           108*/
  171. }INSTR;
  172.  
  173. #define ENDOFCACHE NULL                 /*                                235*/
  174. #define ADDRNOTFOUND -1                 /* addr not in cache flag.        606*/
  175.