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

  1. //-----------------------------------------------------------------------------------//
  2. //              Windows Graphics Programming: Win32 GDI and DirectDraw               //
  3. //                             ISBN  0-13-086985-6                                   //
  4. //                                                                                   //
  5. //  Written            by  Yuan, Feng                             www.fengyuan.com   //
  6. //  Copyright (c) 2000 by  Hewlett-Packard Company                www.hp.com         //
  7. //  Published          by  Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com      //
  8. //                                                                                   //
  9. //  FileName   : opcode.cpp                                                           //
  10. //  Description: Intel instruction map                                               //
  11. //  Version    : 1.00.000, May 31, 2000                                              //
  12. //-----------------------------------------------------------------------------------//
  13.  
  14. #include "OpCode.h"
  15.  
  16. // Map for the first byte of Intel instructions
  17. const OpCode OpCodeMap[256] =
  18. {    // 00
  19.     { _ADD,        _Eb,    _Gb    },
  20.     { _ADD,        _Ev,    _Gv    },
  21.     { _ADD,        _Gb,    _Eb },
  22.     { _ADD,        _Gv,    _Ev },
  23.     { _ADD,        _AL,    _Ib },
  24.     { _ADD,        _eAX,    _Iv    },
  25.     { _PUSH,    _ES            },
  26.     { _POP,        _ES            },
  27.  
  28.     // 08
  29.     { _OR,         _Eb,    _Gb    },
  30.     { _OR,         _Ev,    _Gv    },
  31.     { _OR,         _Gb,    _Eb },
  32.     { _OR,         _Gv,    _Ev },
  33.     { _OR,         _AL,    _Ib },
  34.     { _OR,         _eAX,    _Iv    },
  35.     { _PUSH,    _CS            },
  36.     { _ESCAPE_0F            },
  37.  
  38.     // 10
  39.     { _ADC,        _Eb,    _Gb    },
  40.     { _ADC,        _Ev,    _Gv    },
  41.     { _ADC,        _Gb,    _Eb },
  42.     { _ADC,        _Gv,    _Ev },
  43.     { _ADC,        _AL,    _Ib },
  44.     { _ADC,        _eAX,    _Iv    },
  45.     { _PUSH,    _SS            },
  46.     { _POP,        _SS            },
  47.  
  48.     // 18
  49.     { _SBB,        _Eb,    _Gb    },
  50.     { _SBB,        _Ev,    _Gv    },
  51.     { _SBB,        _Gb,    _Eb },
  52.     { _SBB,        _Gv,    _Ev },
  53.     { _SBB,        _AL,    _Ib },
  54.     { _SBB,        _eAX,    _Iv    },
  55.     { _PUSH,    _DS            },
  56.     { _POP,        _DS            },
  57.  
  58.     // 20
  59.     { _AND,        _Eb,    _Gb    },
  60.     { _AND,        _Ev,    _Gv    },
  61.     { _AND,        _Gb,    _Eb },
  62.     { _AND,        _Gv,    _Ev },
  63.     { _AND,        _AL,    _Ib },
  64.     { _AND,        _eAX,    _Iv    },
  65.     { _SEG,     _ES            },
  66.     { _DAA                    },
  67.  
  68.     // 28
  69.     { _SUB,        _Eb,    _Gb    },
  70.     { _SUB,        _Ev,    _Gv    },
  71.     { _SUB,        _Gb,    _Eb },
  72.     { _SUB,        _Gv,    _Ev },
  73.     { _SUB,        _AL,    _Ib },
  74.     { _SUB,        _eAX,    _Iv    },
  75.     { _SEG,     _CS            },
  76.     { _DAS                    },
  77.  
  78.     // 30
  79.     { _XOR,        _Eb,    _Gb    },
  80.     { _XOR,        _Ev,    _Gv    },
  81.     { _XOR,        _Gb,    _Eb },
  82.     { _XOR,        _Gv,    _Ev },
  83.     { _XOR,        _AL,    _Ib },
  84.     { _XOR,        _eAX,    _Iv    },
  85.     { _SEG,     _SS            },
  86.     { _AAA                    },
  87.  
  88.     // 38
  89.     { _CMP,        _Eb,    _Gb    },
  90.     { _CMP,        _Ev,    _Gv    },
  91.     { _CMP,        _Gb,    _Eb },
  92.     { _CMP,        _Gv,    _Ev },
  93.     { _CMP,        _AL,    _Ib },
  94.     { _CMP,        _eAX,    _Iv    },
  95.     { _SEG,     _DS            },
  96.     { _AAS                    },
  97.  
  98.     // 40
  99.     { _INC,        _eAX        },
  100.     { _INC,        _eCX        },
  101.     { _INC,        _eDX        },
  102.     { _INC,        _eBX        },
  103.     { _INC,        _eSP        },
  104.     { _INC,        _eBP        },
  105.     { _INC,        _eSI        },
  106.     { _INC,        _eDI        },
  107.  
  108.     // 48
  109.     { _DEC,        _eAX        },
  110.     { _DEC,        _eCX        },
  111.     { _DEC,        _eDX        },
  112.     { _DEC,        _eBX        },
  113.     { _DEC,        _eSP        },
  114.     { _DEC,        _eBP        },
  115.     { _DEC,        _eSI        },
  116.     { _DEC,        _eDI        },
  117.  
  118.     // 50
  119.     { _PUSH,    _eAX        },
  120.     { _PUSH,    _eCX        },
  121.     { _PUSH,    _eDX        },
  122.     { _PUSH,    _eBX        },
  123.     { _PUSH,    _eSP        },
  124.     { _PUSH,    _eBP        },
  125.     { _PUSH,    _eSI        },
  126.     { _PUSH,    _eDI        },
  127.  
  128.     // 58
  129.     { _POP,     _eAX        },
  130.     { _POP,     _eCX        },
  131.     { _POP,     _eDX        },
  132.     { _POP,     _eBX        },
  133.     { _POP,     _eSP        },
  134.     { _POP,     _eBP        },
  135.     { _POP,     _eSI        },
  136.     { _POP,     _eDI        },
  137.  
  138.     // 60
  139.     { _PUSHA                },
  140.     { _POPA                    },
  141.     { _BOUND,   _Gv,    _Ma    },
  142.     { _ARPL,    _Ew,    _Gw },
  143.     { _SEG,        _FS            },
  144.     { _SEG,        _GS            },
  145.     { _OPNDSIZE                },
  146.     { _ADDRSIZE                },
  147.  
  148.     // 68
  149.     { _PUSH,    _Iv                        },
  150.     { _IMUL,    _Gv,    _Ev,    _Iv        },
  151.     { _PUSH,    _Ib            },
  152.     { _IMUL,    _Gv,    _Ev,    _Iv        },
  153.     { _INSB,    _Yb,    _Dx },
  154.     { _INS,     _Yv,    _Dx    },
  155.     { _OUTSB,    _Dx,    _Xb },
  156.     { _OUT,        _Dx,    _Xv },
  157.  
  158.     // 70
  159.     { _JO,        _Jb            },
  160.     { _JNO,        _Jb            },
  161.     { _JB,        _Jb            },
  162.     { _JNB,        _Jb            },
  163.     { _JZ,        _Jb            },
  164.     { _JNZ,        _Jb            },
  165.     { _JBE,        _Jb            },
  166.     { _JNBE,    _Jb            },
  167.  
  168.     // 78
  169.     { _JS,        _Jb            },
  170.     { _JNS,        _Jb            },
  171.     { _JP,        _Jb            },
  172.     { _JNP,        _Jb            },
  173.     { _JL,        _Jb            },
  174.     { _JNL,        _Jb            },
  175.     { _JLE,        _Jb            },
  176.     { _JNLE,    _Jb            },
  177.  
  178.     // 80
  179.     { _Grp1,    _Eb,    _Ib },
  180.     { _Grp1,    _Ev,    _Iv },
  181.     { _Grp1,    _Ev,    _Ib    },
  182.     { _Grp1,    _Eb,    _Ib },
  183.     { _TEST,    _Eb,    _Gb },
  184.     { _TEST,    _Ev,    _Gv },
  185.     { _XCHG,    _Eb,    _Gb },
  186.     { _XCHG,    _Ev,    _Gv },
  187.  
  188.     // 88
  189.     { _MOV,        _Eb,    _Gb },
  190.     { _MOV,        _Ev,    _Gv    },
  191.     { _MOV,        _Gb,    _Eb },
  192.     { _MOV,        _Gv,    _Ev },
  193.     { _MOV,        _Ew,    _Sw    },
  194.     { _LEA,        _Gv,    _M  },
  195.     { _MOV,        _Sw,    _Ew },
  196.     { _POP,        _Ev            },
  197.  
  198.     // 90
  199.     { _NOP                        },
  200.     { _XCHG,    _eAX,    _eCX    },
  201.     { _XCHG,    _eAX,    _eDX    },
  202.     { _XCHG,    _eAX,    _eBX    },
  203.     { _XCHG,    _eAX,    _eSP    },
  204.     { _XCHG,    _eAX,    _eBP    },
  205.     { _XCHG,    _eAX,    _eSI    },
  206.     { _XCHG,    _eAX,    _eDI    },
  207.  
  208.     // 98
  209.     { _CBW                        },
  210.     { _CWD                        },
  211.     { _CALL,    _Ap                },
  212.     { _WAIT                        },
  213.     { _PUSHF,    _Fv                },
  214.     { _POPF,    _Fv                },
  215.     { _SAHF                        },
  216.     { _LAHF                        },
  217.  
  218.     // A0
  219.     { _MOV,        _AL,    _Ob        },
  220.     { _MOV,        _eAX,    _Ov        },
  221.     { _MOV,        _Ob,    _AL        },
  222.     { _MOV,        _Ov,    _eAX    },
  223.     { _MOVSB,    _Xb,    _Yb        },
  224.     { _MOVSWD,    _Xv,    _Yv        },
  225.     { _CMPSB,    _Xb,    _Yb        },
  226.     { _CMPSWD,    _Xv,    _Yv        },
  227.  
  228.     // A8
  229.     { _TEST,    _AL,    _Ib        },
  230.     { _TEST,    _eAX,    _Iv        },
  231.     { _STOSB,    _Yb,    _AL        },
  232.     { _STOSWD,    _Yv,    _eAX    },
  233.     { _LODSB,    _AL,    _Xb        },
  234.     { _LODSWD,    _eAX,    _Xv        },
  235.     { _SCASB,    _AL,    _Xb        },
  236.     { _SCASWD,    _eAX,    _Xv        },
  237.  
  238.     // B0
  239.     { _MOV,        _AL,    _Ib        },
  240.     { _MOV,        _CL,    _Ib        },
  241.     { _MOV,        _DL,    _Ib        },
  242.     { _MOV,        _BL,    _Ib        },
  243.     { _MOV,        _AH,    _Ib        },
  244.     { _MOV,        _CH,    _Ib        },
  245.     { _MOV,        _DH,    _Ib        },
  246.     { _MOV,        _BH,    _Ib        },
  247.  
  248.     // B8
  249.     { _MOV,        _eAX,    _Iv        },
  250.     { _MOV,        _eCX,    _Iv        },
  251.     { _MOV,        _eDX,    _Iv        },
  252.     { _MOV,        _eBX,    _Iv        },
  253.     { _MOV,        _eSP,    _Iv        },
  254.     { _MOV,        _eBP,    _Iv        },
  255.     { _MOV,        _eSI,    _Iv        },
  256.     { _MOV,        _eDI,    _Iv        },
  257.  
  258.     // C0
  259.     { _Grp2,    _Eb,    _Ib        },
  260.     { _Grp2,    _Ev,    _Ib        },
  261.     { _RET,        _Iw                },
  262.     { _RET                        },
  263.     { _LES,        _Gv,    _Mp        },
  264.     { _LDS,        _Gv,    _Mp        },
  265.     { _MOV,        _Eb,    _Ib        },
  266.     { _MOV,        _Ev,    _Iv        },
  267.  
  268.     // C8
  269.     { _ENTER,    _Iw,    _Ib        },
  270.     { _LEAVE                    },
  271.     { _RETFAR,    _Iw                },
  272.     { _RETFAR                    },
  273.     { _INT3                        },
  274.     { _INT,        _Ib                },
  275.     { _INTO                        },
  276.     { _IRET                        },
  277.  
  278.     // D0
  279.     { _Grp2,    _Eb,    _1        },
  280.     { _Grp2,    _Ev,    _1        },
  281.     { _Grp2,    _Eb,    _CL        },
  282.     { _Grp2,    _Ev,    _CL        },
  283.     { _AAM                        },
  284.     { _AAD                        },
  285.     { _INVALID                    },
  286.     { _XLAT                        },
  287.  
  288.     // D8
  289.     { _ESC                        },
  290.     { _ESC                        },
  291.     { _ESC                        },
  292.     { _ESC                        },
  293.     { _ESC                        },
  294.     { _ESC                        },
  295.     { _ESC                        },
  296.     { _ESC                        },
  297.  
  298.     // E0
  299.     { _LOOPNE,    _Jb                },
  300.     { _LOOPE,    _Jb                },
  301.     { _LOOP,    _Jb                },
  302.     { _JCXZ,    _Jb                },
  303.     { _IN,        _AL,    _Ib        },
  304.     { _IN,        _eAX,    _Iv        },
  305.     { _OUT,        _Ib,    _AL        },
  306.     { _OUT,        _Iv,    _eAX    },
  307.  
  308.     // E8
  309.     { _CALL,    _Jv                },
  310.     { _JMP,        _Jv                },
  311.     { _JMP,        _Ap                },
  312.     { _JMP,        _Jb                },
  313.     { _IN,        _AL,    _DX        },
  314.     { _IN,        _eAX,    _DX        },
  315.     { _OUT,        _DX,    _AL        },
  316.     { _OUT,        _DX,    _eAX    },
  317.  
  318.     // F0
  319.     { _LOCK                        },
  320.     { _INVALID                    },
  321.     { _REPNE                    },
  322.     { _REP                        },
  323.     { _HLT                        },
  324.     { _CMC                        },
  325.     { _Grp3b                    },
  326.     { _Grp3v                    },
  327.  
  328.     // F8
  329.     { _CLC                        },
  330.     { _STC                        },
  331.     { _CLI                        },
  332.     { _STI                        },
  333.     { _CLD                        },
  334.     { _STD                        },
  335.     { _Grp4                        },
  336.     { _Grp5                        }
  337. };
  338.  
  339.  
  340. // Map for instructions start with 0x0F
  341. const OpCode OpCodeMap_0F[256] =
  342. {
  343.     // 0F 00
  344.     { _Grp6                        },
  345.     { _Grp7                        },
  346.     { _LAR,        _Gv,    _Ew        },
  347.     { _LSL,        _Gv,    _Ew        },
  348.     { _INVALID                    },
  349.     { _INVALID                    },
  350.     { _CLTS                        },
  351.     { _INVALID                    },
  352.  
  353.     // 0F 08
  354.     { _INVALID                    },
  355.     { _WBINVD                    },
  356.     { _INVALID                    },
  357.     { _UD2                        },
  358.     { _INVALID                    },
  359.     { _INVALID                    },
  360.     { _INVALID                    },
  361.     { _INVALID                    },
  362.     
  363.     // 0F 10
  364.     { _INVALID                    },
  365.     { _INVALID                    },
  366.     { _INVALID                    },
  367.     { _INVALID                    },
  368.     { _INVALID                    },
  369.     { _INVALID                    },
  370.     { _INVALID                    },
  371.     { _INVALID                    },
  372.  
  373.     // 0F 18
  374.     { _INVALID                    },
  375.     { _INVALID                    },
  376.     { _INVALID                    },
  377.     { _INVALID                    },
  378.     { _INVALID                    },
  379.     { _INVALID                    },
  380.     { _INVALID                    },
  381.     { _INVALID                    },
  382.  
  383.     // 0F 20
  384.     { _MOV,        _Rd,    _Cd        },
  385.     { _MOV,        _Rd,    _Dd        },
  386.     { _MOV,        _Cd,    _Rd        },
  387.     { _MOV,        _Dd,    _Rd        },
  388.     { _INVALID                    },
  389.     { _INVALID                    },
  390.     { _INVALID                    },
  391.     { _INVALID                    },
  392.     
  393.     // 0F 28
  394.     { _INVALID                    },
  395.     { _INVALID                    },
  396.     { _INVALID                    },
  397.     { _INVALID                    },
  398.     { _INVALID                    },
  399.     { _INVALID                    },
  400.     { _INVALID                    },
  401.     { _INVALID                    },
  402.  
  403.     // 0F 30
  404.     { _WRMSR                    },
  405.     { _RDTSC                    },
  406.     { _RDMSR                    },
  407.     { _RDPMC                    },
  408.     { _INVALID                    },
  409.     { _INVALID                    },
  410.     { _INVALID                    },
  411.     { _INVALID                    },
  412.  
  413.     // 0F 38
  414.     { _INVALID                    },
  415.     { _INVALID                    },
  416.     { _INVALID                    },
  417.     { _INVALID                    },
  418.     { _INVALID                    },
  419.     { _INVALID                    },
  420.     { _INVALID                    },
  421.     { _INVALID                    },
  422.  
  423.     // 0F 40
  424.     { _CMOVO,    _Gv,    _Ev        },
  425.     { _CMOVNO,    _Gv,    _Ev        },
  426.     { _CMOVB,    _Gv,    _Ev        },
  427.     { _CMOVAE,    _Gv,    _Ev        },
  428.     { _CMOVE,    _Gv,    _Ev        },
  429.     { _CMOVNE,    _Gv,    _Ev        },
  430.     { _CMOVBE,    _Gv,    _Ev        },
  431.     { _CMOVA,    _Gv,    _Ev        },
  432.  
  433.     // 0F 48
  434.     { _CMOVS,    _Gv,    _Ev        },
  435.     { _CMOVNS,    _Gv,    _Ev        },
  436.     { _CMOVP,    _Gv,    _Ev        },
  437.     { _CMOVNP,    _Gv,    _Ev        },
  438.     { _CMOVL,    _Gv,    _Ev        },
  439.     { _CMOVGE,    _Gv,    _Ev        },
  440.     { _CMOVLE,    _Gv,    _Ev        },
  441.     { _CMOVG,    _Gv,    _Ev        },
  442.     
  443.     // 0F 50
  444.     { _INVALID                    },
  445.     { _INVALID                    },
  446.     { _INVALID                    },
  447.     { _INVALID                    },
  448.     { _INVALID                    },
  449.     { _INVALID                    },
  450.     { _INVALID                    },
  451.     { _INVALID                    },
  452.  
  453.     // 0F 58
  454.     { _INVALID                    },
  455.     { _INVALID                    },
  456.     { _INVALID                    },
  457.     { _INVALID                    },
  458.     { _INVALID                    },
  459.     { _INVALID                    },
  460.     { _INVALID                    },
  461.     { _INVALID                    },
  462.  
  463.     // 0F 60
  464.     { _PUNPCKLBW,    _Pq,    _Qd        },
  465.     { _PUNPCKLWD,    _Pq,    _Qd        },
  466.     { _PUNPCKLDQ,    _Pq,    _Qd        },
  467.     { _PACKUSDW,    _Pq,    _Qd        },
  468.     { _PCMPGTB,        _Pq,    _Qd        },
  469.     { _PCMPGTW,        _Pq,    _Qd        },
  470.     { _PCMPGTD,        _Pq,    _Qd        },
  471.     { _PACKSSWB,    _Pq,    _Qd        },
  472.  
  473.     // 0F 68
  474.     { _PUNPCKHBW,    _Pq,    _Qd        },
  475.     { _PUNPCKHWD,    _Pq,    _Qd        },
  476.     { _PUNPCKHDQ,    _Pq,    _Qd        },
  477.     { _PACKSSDW,    _Pq,    _Qd        },
  478.     { _INVALID                        },
  479.     { _INVALID                        },
  480.     { _MOVD,        _Pq,    _Qd        },
  481.     { _MOVQ,        _Pq,    _Qd        },
  482.  
  483.     // 0F 70
  484.     { _INVALID                        },
  485.     { _GrpA                            },
  486.     { _GrpA                            },
  487.     { _GrpA                            },
  488.     { _PCMPEQB,        _Pq,    _Qd        },
  489.     { _PCMPEQW,        _Pq,    _Qd        },
  490.     { _PCMPEQD,        _Pd,    _Qd        },
  491.     { _EMMS                            },
  492.  
  493.     // 0F 78
  494.     { _INVALID                        },
  495.     { _INVALID                        },
  496.     { _INVALID                        },
  497.     { _INVALID                        },
  498.     { _INVALID                        },
  499.     { _INVALID                        },
  500.     { _MOVD,        _Pd,    _Ed        },
  501.     { _MOVQ,        _Pq,    _Eq        },
  502.  
  503.     // 0F 80
  504.     { _JO,            _Jv                },
  505.     { _JNO,            _Jv                },
  506.     { _JB,            _Jv                },
  507.     { _JNB,            _Jv                },
  508.     { _JZ,            _Jv                },
  509.     { _JNZ,            _Jv                },
  510.     { _JBE,            _Jv                },
  511.     { _JNBE,        _Jv                },
  512.  
  513.     // 0F 88
  514.     { _JS,            _Jv                },
  515.     { _JNS,            _Jv                },
  516.     { _JP,            _Jv                },
  517.     { _JNP,            _Jv                },
  518.     { _JL,            _Jv                },
  519.     { _JNL,            _Jv                },
  520.     { _JLE,            _Jv                },
  521.     { _JNLE,        _Jv                },
  522.  
  523.     // 0F 90
  524.     { _SETO,        _Eb                },
  525.     { _SETNO,        _Eb                },
  526.     { _SETB,        _Eb                },
  527.     { _SETNB,        _Eb                },
  528.     { _SETZ,        _Eb                },
  529.     { _SETNZ,        _Eb                },
  530.     { _SETBE,        _Eb                },
  531.     { _SETNBE,        _Eb                },
  532.  
  533.     // 0F 98
  534.     { _SETS,        _Eb                },
  535.     { _SETNS,        _Eb                },
  536.     { _SETP,        _Eb                },
  537.     { _SETNP,        _Eb                },
  538.     { _SETL,        _Eb                },
  539.     { _SETNL,        _Eb                },
  540.     { _SETLE,        _Eb                },
  541.     { _SETNLE,        _Eb                },
  542.  
  543.     // 0F A0
  544.     { _PUSH,        _FS                },
  545.     { _POP,            _FS                },
  546.     { _CPUID                        },
  547.     { _BT,            _Ev,    _Gv        },
  548.     { _SHLD,        _Ev,    _Gv,    _Ib    },
  549.     { _SHLD,        _Ev,    _Gv,    _CL    },
  550.     { _INVALID                        },
  551.     { _INVALID                        },
  552.  
  553.     // 0F A8
  554.     { _PUSH,        _GS                },
  555.     { _POP,            _GS                },
  556.     { _RSM                            },
  557.     { _BTS,            _Ev,    _Gv        },
  558.     { _SHRD,        _Ev,    _Gv,    _Ib },
  559.     { _SHRD,        _Ev,    _Gv,    _CL },
  560.     { _INVALID                        },
  561.     { _IMUL,        _Gv,    _Ev        },
  562.  
  563.     // 0F B0
  564.     { _CMPXCHG,        _Eb,    _Gb        },
  565.     { _CMPXCHG,        _Ev,    _Gv        },
  566.     { _LSS,            _Mp                },
  567.     { _BTR,            _Ev,    _Gv        },
  568.     { _LFS,            _Mp                },
  569.     { _LGS,            _Mp                },
  570.     { _MOVZX,        _Gv,    _Eb        },
  571.     { _MOVZX,        _Gv,    _Ew        },
  572.  
  573.     // 0F B8
  574.     { _INVALID                        },
  575.     { _INVALID                        },
  576.     { _Grp8,        _Ev,    _Ib        },
  577.     { _BTC,            _Ev,    _Gv        },
  578.     { _BSF,            _Gv,    _Ev        },
  579.     { _BSR,            _Gv,    _Ev        },
  580.     { _MOVSX,        _Gv,    _Eb        },
  581.     { _MOVSX,        _Gv,    _Ew        },
  582.  
  583.     // 0F C0
  584.     { _XADD,        _Eb,    _Gb        },
  585.     { _XADD,        _Ev,    _Gv        },
  586.     { _INVALID                        },
  587.     { _INVALID                        },
  588.     { _INVALID                        },
  589.     { _INVALID                        },
  590.     { _INVALID                        },
  591.     { _Grp9,                          },
  592.  
  593.     // 0F C8
  594.     { _BSWAP,        _EAX            },
  595.     { _BSWAP,        _ECX            },
  596.     { _BSWAP,        _EDX            },
  597.     { _BSWAP,        _EBX            },
  598.     { _BSWAP,        _ESP            },
  599.     { _BSWAP,        _EBP            },
  600.     { _BSWAP,        _ESI            },
  601.     { _BSWAP,        _EDI            },
  602.     
  603.     // 0F D0
  604.     { _INVALID                        },
  605.     { _PSRLW,        _Pq,    _Qd        },
  606.     { _PSRLD,        _Pq,    _Qd        },
  607.     { _PSRLQ,        _Pq,    _Qd        },
  608.     { _INVALID                        },
  609.     { _PMULLW,        _Pq,    _Qd        },
  610.     { _INVALID                        },
  611.     { _INVALID                        },
  612.  
  613.     // 0F D8
  614.     { _PSUBUSB,        _Pq,    _Qq        },
  615.     { _PSUBUSW,        _Pq,    _Qq        },
  616.     { _INVALID                        },
  617.     { _PAND,        _Pq,    _Qq        },
  618.     { _PADDUSB,        _Pq,    _Qq        },
  619.     { _PADDUSW,        _Pq,    _Qq        },
  620.     { _INVALID                        },
  621.     { _PANDN,        _Pq,    _Qq        },
  622.  
  623.     // 0F E0
  624.     { _INVALID                        },
  625.     { _PSRAW,        _Pq,    _Qd        },
  626.     { _PSRLD,        _Pq,    _Qd        },
  627.     { _PSRLQ,        _Pq,    _Qd        },
  628.     { _INVALID                        },
  629.     { _PMULLW,        _Pq,    _Qd        },
  630.     { _INVALID                        },
  631.     { _INVALID                        },
  632.  
  633.     // 0F E8
  634.     { _PSUBSB,        _Pq,    _Qq        },
  635.     { _PSUBSW,        _Pq,    _Qq        },
  636.     { _INVALID                        },
  637.     { _POR,            _Pq,    _Qq        },
  638.     { _PADDSB,        _Pq,    _Qq        },
  639.     { _PADDSW,        _Pq,    _Qq        },
  640.     { _INVALID                        },
  641.     { _PXOR,        _Pq,    _Qq        },
  642.  
  643.     // 0F F0
  644.     { _INVALID                        },
  645.     { _PSLLW,        _Pq,    _Qd        },
  646.     { _PSLLD,        _Pq,    _Qd        },
  647.     { _PSLLQ,        _Pq,    _Qd        },
  648.     { _INVALID                        },
  649.     { _PMADDWD,        _Pq,    _Qd        },
  650.     { _INVALID                        },
  651.     { _INVALID                        },
  652.  
  653.     // 0F F8
  654.     { _PSUBB,        _Pq,    _Qq        },
  655.     { _PSUBW,        _Pq,    _Qq        },
  656.     { _PSUBD,        _Pq,    _Qq        },
  657.     { _INVALID                        },
  658.     { _PADDB,        _Pq,    _Qq        },
  659.     { _PADDW,        _Pq,    _Qq        },
  660.     { _PADDD,        _Pq,    _Qq        }
  661. };
  662.  
  663.  
  664. // Group 1 opcode
  665. const OpCode OpCodeMap_Grp1[8] =
  666. {
  667.     { _ADD                        },
  668.     { _OR                        },
  669.     { _ADC                        },
  670.     { _SBB                        },
  671.     { _AND                        },
  672.     { _SUB                        },
  673.     { _XOR                        },
  674.     { _CMP                        }
  675. };
  676.  
  677.  
  678. // Group 2 opcode
  679. const OpCode OpCodeMap_Grp2[8] = 
  680. {
  681.     { _ROL                        },
  682.     { _ROR                        },
  683.     { _RCL                        },
  684.     { _RCR                        },
  685.     { _SHL                        },
  686.     { _SHR                        },
  687.     { _INVALID                    },
  688.     { _SAR                        }
  689. };
  690.  
  691.  
  692. // Group 3b opcode
  693. const OpCode OpCodeMap_Grp3b[8] =
  694. {
  695.     { _TEST,    _Eb,    _Ib        },
  696.     { _INVALID                    },
  697.     { _NOT                        },
  698.     { _NEG                        },
  699.     { _MUL,        _AL                },
  700.     { _IMUL,    _AL                },
  701.     { _DIV,        _AL                },
  702.     { _IDIV,    _AL                }
  703. };
  704.  
  705.  
  706. // Group 3v opcode
  707. const OpCode OpCodeMap_Grp3v[8] =
  708. {
  709.     { _TEST,    _Ev,    _Iv        },
  710.     { _INVALID                    },
  711.     { _NOT                        },
  712.     { _NEG                        },
  713.     { _MUL,        _eAX            },
  714.     { _IMUL,    _eAX            },
  715.     { _DIV,        _eAX            },
  716.     { _IDIV,    _eAX            }
  717. };
  718.  
  719.  
  720. // Group 4 opcode
  721. const OpCode OpCodeMap_Grp4[8] =
  722. {
  723.     { _INC,        _Eb                },
  724.     { _DEC,        _Eb                },
  725.     { _INVALID                    },
  726.     { _INVALID                    },
  727.     { _INVALID                    },
  728.     { _INVALID                    },
  729.     { _INVALID                    },
  730.     { _INVALID                    }
  731. };
  732.  
  733.  
  734. // Group 5 opcode
  735. const OpCode OpCodeMap_Grp5[8] =
  736. {
  737.     { _INC,        _Ev                },
  738.     { _DEC,        _Ev                },
  739.     { _CALL,    _Ev                },
  740.     { _CALL,    _Ep                },
  741.     { _JMP,        _Ev                },
  742.     { _JMP,        _Ep                },
  743.     { _PUSH,    _Ev                },
  744.     { _INVALID                    }
  745. };
  746.  
  747.  
  748. // group 6 opcode
  749. const OpCode OpCodeMap_Grp6[8] =
  750. {
  751.     { _SLDT,    _Ew                },
  752.     { _STR,        _Ew                },
  753.     { _LLDT,    _Ew                },
  754.     { _LTR,        _Ew                },
  755.     { _VERR,    _Ew                },
  756.     { _VERW,    _Ew                },
  757.     { _INVALID                    },
  758.     { _INVALID                    }
  759. };
  760.  
  761.  
  762. // group 7 opcode
  763. const OpCode OpCodeMap_Grp7[8] =
  764. {
  765.     { _SGDT,    _Ms                },
  766.     { _SIDT,    _Ms                },
  767.     { _LGDT,    _Ms                },
  768.     { _LIDT,    _Ms                },
  769.     { _SMSW,    _Ew                },
  770.     { _INVALID                    },
  771.     { _LMSW,    _Ew                },
  772.     { _INVLPG                    }
  773. };
  774.  
  775.  
  776. // group 8 opcode
  777. const OpCode OpCodeMap_Grp8[8] =
  778. {
  779.     { _INVALID                    },
  780.     { _INVALID                    },
  781.     { _INVALID                    },
  782.     { _INVALID                    },
  783.     { _BT                        },
  784.     { _BTS                        },
  785.     { _BTR                        },
  786.     { _BTC                        }
  787. };
  788.  
  789.  
  790. // group 9 opcode
  791. const OpCode OpCodeMap_Grp9[8] =
  792. {
  793.     { _INVALID                    },
  794.     { _CMPXCH8,    _BMq            },
  795.     { _INVALID                    },
  796.     { _INVALID                    },
  797.     { _INVALID                    },
  798.     { _INVALID                    },
  799.     { _INVALID                    },
  800.     { _INVALID                    }
  801. };    
  802.  
  803.  
  804. // group A opcode
  805. const OpCode OpCodeMap_GrpA[8] =
  806. {
  807.     { _INVALID                    },
  808.     { _INVALID                    },
  809.     { _PSRLDWQ,    _Pq,    _Ib        },
  810.     { _INVALID                    },
  811.     { _PSRADW,    _Pq,    _Ib        },
  812.     { _INVALID                    },
  813.     { _PSLLDWQ,    _Pq,    _Ib        },
  814.     { _INVALID                    }
  815. };
  816.  
  817.