home *** CD-ROM | disk | FTP | other *** search
/ Windows Graphics Programming / Feng_Yuan_Win32_GDI_DirectX.iso / Samples / Chapt_04 / Patcher / OpCode.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-05-11  |  4.8 KB  |  406 lines

  1. #pragma once
  2.  
  3. //-----------------------------------------------------------------------------------//
  4. //              Windows Graphics Programming: Win32 GDI and DirectDraw               //
  5. //                             ISBN  0-13-086985-6                                   //
  6. //                                                                                   //
  7. //  Written            by  Yuan, Feng                             www.fengyuan.com   //
  8. //  Copyright (c) 2000 by  Hewlett-Packard Company                www.hp.com         //
  9. //  Published          by  Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com      //
  10. //                                                                                   //
  11. //  FileName   : opcode.h                                                             //
  12. //  Description: Intel instruction map                                               //
  13. //  Version    : 1.00.000, May 31, 2000                                              //
  14. //-----------------------------------------------------------------------------------//
  15.  
  16.  
  17. typedef enum
  18. {
  19.     _INVALID,
  20.  
  21.     // prefix
  22.     _ADDRSIZE,
  23.     _OPNDSIZE,
  24.     _SEG,
  25.     _LOCK,
  26.     _REP,
  27.     _REPNE,
  28.     
  29.     // instructions
  30.     _before_instruction,
  31.     _AAA,
  32.     _AAD,
  33.     _AAM,
  34.     _AAS,
  35.     _ADC,
  36.     _ADD,
  37.     _AND,
  38.     _ARPL,
  39.     
  40.     _BOUND,
  41.     _BSF,
  42.     _BSR,
  43.     _BSWAP,
  44.     _BT,
  45.     _BTC,
  46.     _BTR,
  47.     _BTS,
  48.     
  49.     _CALL,
  50.     _CBW,
  51.     _CLC,
  52.     _CLD,
  53.     _CLI,
  54.     _CLTS,
  55.     _CMC,
  56.     _CMOVA,
  57.     _CMOVAE,
  58.     _CMOVB,
  59.     _CMOVBE,
  60.     _CMOVE,
  61.     _CMOVG,
  62.     _CMOVGE,
  63.     _CMOVL,
  64.     _CMOVLE,
  65.     _CMOVNE,
  66.     _CMOVNO,
  67.     _CMOVNP,
  68.     _CMOVNS,
  69.     _CMOVO,
  70.     _CMOVP,
  71.     _CMOVS,
  72.     _CMP,
  73.     _CMPSB,
  74.     _CMPSWD,
  75.     _CMPXCH8,
  76.     _CMPXCHG,
  77.     _CPUID,
  78.     _CWD,
  79.     
  80.     _DAA,
  81.     _DAS,
  82.     _DEC,
  83.     _DIV,
  84.     
  85.     _EMMS,
  86.     _ENTER,
  87.     
  88.     _HLT,
  89.     
  90.     _IDIV,
  91.     _IMUL,
  92.     _IN,
  93.     _INC,
  94.     _INS,
  95.     _INSB,
  96.     _INT,
  97.     _INT3,
  98.     _INTO,
  99.     _INVLPG,
  100.     _IRET,
  101.     
  102.     _JB,
  103.     _JBE,
  104.     _JCXZ,
  105.     _JL,
  106.     _JLE,
  107.     _JMP,
  108.     _JNB,
  109.     _JNBE,
  110.     _JNL,
  111.     _JNLE,
  112.     _JNO,
  113.     _JNP,
  114.     _JNS,
  115.     _JNZ,
  116.     _JO,
  117.     _JP,
  118.     _JS,
  119.     _JZ,
  120.     
  121.     _LAHF,
  122.     _LAR,
  123.     _LDS,
  124.     _LEA,
  125.     _LEAVE,
  126.     _LES,
  127.     _LFS,
  128.     _LGDT,
  129.     _LGS,
  130.     _LIDT,
  131.     _LLDT,
  132.     _LMSW,
  133.     _LODSB,
  134.     _LODSWD,
  135.     _LOOP,
  136.     _LOOPE,
  137.     _LOOPNE,
  138.     _LSL,
  139.     _LSS,
  140.     _LTR,
  141.     
  142.     _MOV,
  143.     _MOVD,
  144.     _MOVQ,
  145.     _MOVSB,
  146.     _MOVSWD,
  147.     _MOVSX,
  148.     _MOVZX,
  149.     _MUL,
  150.     
  151.     _NEG,
  152.     _NOP,
  153.     _NOT,
  154.     
  155.     _OR,
  156.     _OUT,
  157.     _OUTSB,
  158.     
  159.     _PACKSSDW,
  160.     _PACKSSWB,
  161.     _PACKUSDW,
  162.     _PADDB,
  163.     _PADDD,
  164.     _PADDSB,
  165.     _PADDSW,
  166.     _PADDUSB,
  167.     _PADDUSW,
  168.     _PADDW,
  169.     _PAND,
  170.     _PANDN,
  171.     _PCMPEQB,
  172.     _PCMPEQD,
  173.     _PCMPEQW,
  174.     _PCMPGTB,
  175.     _PCMPGTD,
  176.     _PCMPGTW,
  177.     _PMADDWD,
  178.     _PMULLW,
  179.     _POP,
  180.     _POPA,
  181.     _POPF,
  182.     _POR,
  183.     _PSLLD,
  184.     _PSLLDWQ,
  185.     _PSLLQ,
  186.     _PSLLW,
  187.     _PSRADW,
  188.     _PSRAW,
  189.     _PSRLD,
  190.     _PSRLDWQ,
  191.     _PSRLQ,
  192.     _PSRLW,
  193.     _PSUBB,
  194.     _PSUBD,
  195.     _PSUBSB,
  196.     _PSUBSW,
  197.     _PSUBUSB,
  198.     _PSUBUSW,
  199.     _PSUBW,
  200.     _PUNPCKHBW,
  201.     _PUNPCKHDQ,
  202.     _PUNPCKHWD,
  203.     _PUNPCKLBW,
  204.     _PUNPCKLDQ,
  205.     _PUNPCKLWD,
  206.     _PUSH,
  207.     _PUSHA,
  208.     _PUSHF,
  209.     _PXOR,
  210.     
  211.     _RCL,
  212.     _RCR,
  213.     _RDMSR,
  214.     _RDPMC,
  215.     _RDTSC,
  216.     _RET,
  217.     _RETFAR,
  218.     _ROL,
  219.     _ROR,
  220.     _RSM,
  221.     
  222.     _SAHF,
  223.     _SAR,
  224.     _SBB,
  225.     _SCASB,
  226.     _SCASWD,
  227.     _SETB,
  228.     _SETBE,
  229.     _SETL,
  230.     _SETLE,
  231.     _SETNB,
  232.     _SETNBE,
  233.     _SETNL,
  234.     _SETNLE,
  235.     _SETNO,
  236.     _SETNP,
  237.     _SETNS,
  238.     _SETNZ,
  239.     _SETO,
  240.     _SETP,
  241.     _SETS,
  242.     _SETZ,
  243.     _SGDT,
  244.     _SHL,
  245.     _SHLD,
  246.     _SHR,
  247.     _SHRD,
  248.     _SIDT,
  249.     _SLDT,
  250.     _SMSW,
  251.     _STC,
  252.     _STD,
  253.     _STI,
  254.     _STOSB,
  255.     _STOSWD,
  256.     _STR,
  257.     _SUB,
  258.     
  259.     _TEST,
  260.     
  261.     _VERR,
  262.     _VERW,
  263.     
  264.     _WAIT,
  265.     _WBINVD,
  266.     _WRMSR,
  267.     
  268.     _XADD,
  269.     _XCHG,
  270.     _XLAT,
  271.     _XOR,
  272.     _after_instruction,
  273.  
  274.     // Groups, Escapes
  275.     _UD2,
  276.  
  277.     _ESC,
  278.     _ESCAPE_0F,
  279.     _Grp1,
  280.     _Grp2,
  281.     _Grp3b,
  282.     _Grp3v,
  283.     _Grp4,
  284.     _Grp5,
  285.     _Grp6,
  286.     _Grp7,
  287.     _Grp8,
  288.     _Grp9,
  289.     _GrpA,
  290.  
  291.     // constant
  292.     _before_operand,
  293.     _1,
  294.     
  295.     // registers
  296.     _AL,
  297.     _BL,
  298.     _CL,
  299.     _DL,
  300.     _AH,
  301.     _BH,
  302.     _CH,
  303.     _DH,
  304.  
  305.     _DX,
  306.  
  307.     _EAX,
  308.     _EBX,
  309.     _ECX,
  310.     _EDX,
  311.     _ESP,
  312.     _EBP,
  313.     _ESI,
  314.     _EDI,
  315.  
  316.     _eAX,
  317.     _eBX,
  318.     _eCX,
  319.     _eDX,
  320.  
  321.     _eSP,
  322.     _eBP,
  323.     _eSI,
  324.     _eDI,
  325.  
  326.     _DS,
  327.     _CS,
  328.     _SS,
  329.     _ES,
  330.     _FS,
  331.     _GS,
  332.     
  333.     // byte
  334.     _Eb,
  335.     _Gb,
  336.     _Jb,
  337.     _Ib,
  338.     _Ob,
  339.     _Yb,
  340.     _Xb,
  341.     
  342.     // Double word
  343.     _Cd,
  344.     _Dd,
  345.     _Ed,
  346.     _Pd,
  347.     _Qd,
  348.     _Rd,
  349.     
  350.     // 32-bit or 48 bit pointer
  351.       _Ap,
  352.     _Mp,
  353.     
  354.     // word or dword
  355.     _Av,
  356.     _Ev,
  357.     _Fv,
  358.     _Gv,
  359.     _Jv,
  360.     _Iv,
  361.     _Ov,
  362.     _Xv,
  363.     _Yv,
  364.     
  365.     // word
  366.     _Ew,
  367.     _Gw,
  368.     _Iw,
  369.     _Rw,
  370.     _Sw,
  371.     
  372.     _Dx,
  373.     _Eq,
  374.     _M,
  375.     _Ma,
  376.     _Pq,
  377.     _Qq,
  378.     _Ep,
  379.     _Ms,
  380.     _BMq,
  381.  
  382.     _after_operand
  383. };
  384.  
  385.  
  386. typedef struct
  387. {
  388.     unsigned short opcode;
  389.     unsigned short opnd[3];
  390. }   OpCode;
  391.  
  392.  
  393. extern const OpCode OpCodeMap[256];
  394. extern const OpCode OpCodeMap_0F[256];
  395.  
  396. extern const OpCode OpCodeMap_Grp1[8];
  397. extern const OpCode OpCodeMap_Grp2[8];
  398. extern const OpCode OpCodeMap_Grp3b[8];
  399. extern const OpCode OpCodeMap_Grp3v[8];
  400. extern const OpCode OpCodeMap_Grp4[8];
  401. extern const OpCode OpCodeMap_Grp5[8];
  402. extern const OpCode OpCodeMap_Grp6[8];
  403. extern const OpCode OpCodeMap_Grp7[8];
  404. extern const OpCode OpCodeMap_Grp8[8];
  405. extern const OpCode OpCodeMap_Grp9[8];
  406. extern const OpCode OpCodeMap_GrpA[8];