随笔-341  评论-2670  文章-0  trackbacks-0

    为了节省工作量,我打开intel的手册,然后将那些框框里面的字符串复制到一个文本文件里面,最后写一个C++程序用正则表达式处理。流程如下(含代码和文件):

    1、复制格式较混乱的二进制码表。将需要的指令筛选出来之后,可以得到一下文件(完整内容见后面):

 1 14 ib ADC AL,imm8 Add with carry imm8 to AL
 2 15 iw ADC AX,imm16 Add with carry imm16 to AX
 3 15 id ADC EAX,imm32 Add with carry imm32 to EAX
 4 80 /2 ib ADC r/m8,imm8 Add with carry imm8 to r/m8
 5 81 /2 iw ADC r/m16,imm16 Add with carry imm16 to r/m16
 6 81 /2 id ADC r/m32,imm32 Add with CF imm32 to r/m32
 7 83 /2 ib ADC r/m16,imm8 Add with CF sign-extended imm8 to r/m16
 8 83 /2 ib ADC r/m32,imm8 Add with CF sign-extended imm8 into r/m32
 9 10 /r ADC r/m8,r8 Add with carry byte register to r/m8
10 11 /r ADC r/m16,r16 Add with carry r16 to r/m16
11 11 /r ADC r/m32,r32 Add with CF r32 to r/m32
12 12 /r ADC r8,r/m8 Add with carry r/m8 to byte register
13 13 /r ADC r16,r/m16 Add with carry r/m16 to r16
14 13 /r ADC r32,r/m32 Add with CF r/m32 to r32

    2、手工修复一些小问题,譬如intel的某些笔误会让参数imm8写成i mm8,参数后面有星号等等问题。因为这些地方很少,因此手工修复。

    3、写C++代码处理:
  1 #include "..\..\..\..\VL++\Library\Platform\VL_Console.h"
  2 #include "..\..\..\..\VL++\Library\Data\VL_System.h"
  3 #include "..\..\..\..\VL++\Library\Data\VL_Stream.h"
  4 #include "..\..\..\..\VL++\Library\Data\VL_DataAccess.h"
  5 #include "..\..\..\..\VL++\Library\Data\Grammar2\VL_RegTools.h"
  6 
  7 using namespace vl;
  8 using namespace vl::platform;
  9 using namespace vl::system;
 10 using namespace vl::stream;
 11 using namespace vl::grammar;
 12 
 13 VUnicodeString FillStr(VUnicodeString String , VInt Length)
 14 {
 15     while(String.Length()<Length)
 16     {
 17         String+=L" ";
 18     }
 19     return String;
 20 }
 21 
 22 void GenerateProcessed(VUnicodeString In , VUnicodeString Out)
 23 {
 24     VL_FileStream FileIn(In,VL_FileStream::vomRead);
 25     VL_FileStream FileOut(Out,VL_FileStream::vomWrite);
 26     VL_StreamReader Reader(&FileIn,false);
 27     VL_StreamWriter Writer(vceUtf16,true,&FileOut,false);
 28 
 29     VUnicodeString BinCode=L"(?:<#BINCODE>[0-9A-F]{2})(\\s(?:<#BINCODE>[0-9A-F]{2}))*(\\+\\s*(?:<#BINCODE_PLUS>i|rb|rw|rd))?";
 30     VUnicodeString BinExt=L"(?:<#BINCODE_EXT>\\s(/[0-7]|/r))?(?:<#BINCODE_IMM>\\s(ib|iw|id|cb|cw|cd|cp))?";
 31     VUnicodeString Name=L"\\s(?:<#NAME>[A-Z][A-Z0-9]*)";
 32     VUnicodeString Param=L"(?:<#PARAM>AX|AL|EAX|CX|CL|ECX|CS|DS|ES|SS|FS|GS|[0-9]+|rel8|rel16|rel32|ptr16:16|ptr16:32|r8|r16|r32|imm8|imm16|imm32|r/m8|r/m16|r/m32|m2byte|m8|m16|m32|m64|m128|m16:16|m16:32|m16&32|m16&16|m32&32|moffs8|moffs16|moffs32|Sreg|m16int|m32int|m64int|m32fp|m64fp|m80fp|m|ST|ST\\(0\\)|ST\\(i\\))";
 33     VUnicodeString Comment=L"\\s+(?:<#COMMENT>\\.*)";
 34     VUnicodeString Expression=BinCode+BinExt+Name+L"(\\s"+Param+L"(,\\s*"+Param+L")*)?"+Comment;
 35     VL_RegExp Regex(Expression,true);
 36 
 37     while(!Reader.IsEnd())
 38     {
 39         VUnicodeString Line=Reader.ReadLine();
 40         if(Line!=L"")
 41         {
 42             VL_RegExp::ResultPtr MatchResult=Regex.MatchWhole(Line);
 43             if(MatchResult->IsMatched())
 44             {
 45                 VInt ParamOffset=0;
 46                 if(MatchResult->GetStorage(L"COMMENT",0)[0]==L'')
 47                 {
 48                     ParamOffset=1;
 49                 }
 50 
 51                 VUnicodeString BinCode;
 52                 for(VInt i=0;i<MatchResult->GetStorageCount(L"BINCODE");i++)
 53                 {
 54                     BinCode+=MatchResult->GetStorage(L"BINCODE",i);
 55                 }
 56                 if(MatchResult->GetStorageCount(L"BINCODE_PLUS")>0)
 57                 {
 58                     BinCode+=L"+"+MatchResult->GetStorage(L"BINCODE_PLUS",0);
 59                 }
 60                 if(MatchResult->GetStorageCount(L"BINCODE_EXT")>0)
 61                 {
 62                     BinCode+=MatchResult->GetStorage(L"BINCODE_EXT",0);
 63                 }
 64                 if(MatchResult->GetStorageCount(L"BINCODE_IMM")>0)
 65                 {
 66                     BinCode+=MatchResult->GetStorage(L"BINCODE_IMM",0);
 67                 }
 68 
 69                 VUnicodeString Main;
 70                 Main+=MatchResult->GetStorage(L"NAME",0);
 71                 for(VInt i=0;i<MatchResult->GetStorageCount(L"PARAM")-ParamOffset;i++)
 72                 {
 73                     Main+=+L","+MatchResult->GetStorage(L"PARAM",i);
 74                 }
 75 
 76                 VUnicodeString Comment=MatchResult->GetStorage(L"COMMENT",0);
 77                 if(ParamOffset)
 78                 {
 79                     Comment=MatchResult->GetStorage(L"PARAM",MatchResult->GetStorageCount(L"PARAM")-1)+L" "+Comment;
 80                 }
 81                 VUnicodeString NewLine=FillStr(BinCode,20)+FillStr(Main,30)+Comment;
 82                 Writer.WriteLine(NewLine);
 83             }
 84             else
 85             {
 86                 GetConsole()->Write(L"[ERROR]"+Line+L"\r\n");
 87             }
 88         }
 89     }
 90 }
 91 
 92 void vlmain()
 93 {
 94     GetConsole()->SetTitle(L"Vczh Library++ 2.0 Assembler");
 95     GetConsole()->SetTestMemoryLeaks(true);
 96     GetConsole()->SetPauseOnExit(true);
 97 
 98     VUnicodeString WorkData=VFileName(GetConsole()->GetAppPath()).MakeAbsolute(L"..\\..\\TestData\\").GetStrW();
 99 
100     VUnicodeString Original=WorkData+L"Ins_Original.txt";
101     VUnicodeString Processed=WorkData+L"Ins_Processed.txt";
102     GenerateProcessed(Original,Processed);
103     GetConsole()->Write(L"Stop generating\r\n");
104 }

    于是就得到了一个格式完整的文件了。这个文件格式清晰,可以使用更加简单的正则表达式处理。
 1 14 ib               ADC,AL,imm8                   Add with carry imm8 to AL
 2 15 iw               ADC,AX,imm16                  Add with carry imm16 to AX
 3 15 id               ADC,EAX,imm32                 Add with carry imm32 to EAX
 4 80 /2 ib            ADC,r/m8,imm8                 Add with carry imm8 to r/m8
 5 81 /2 iw            ADC,r/m16,imm16               Add with carry imm16 to r/m16
 6 81 /2 id            ADC,r/m32,imm32               Add with CF imm32 to r/m32
 7 83 /2 ib            ADC,r/m16,imm8                Add with CF sign-extended imm8 to r/m16
 8 83 /2 ib            ADC,r/m32,imm8                Add with CF sign-extended imm8 into r/m32
 9 10 /r               ADC,r/m8,r8                   Add with carry byte register to r/m8
10 11 /r               ADC,r/m16,r16                 Add with carry r16 to r/m16
11 11 /r               ADC,r/m32,r32                 Add with CF r32 to r/m32
12 12 /r               ADC,r8,r/m8                   Add with carry r/m8 to byte register
13 13 /r               ADC,r16,r/m16                 Add with carry r/m16 to r16
14 13 /r               ADC,r32,r/m32                 Add with CF r/m32 to r32

    最后一步就是将这些东西变成C++的大常数数组,这个就不写出来了。

    附筛选出来的格式化的完整内容:
  1 14 ib               ADC,AL,imm8                   Add with carry imm8 to AL
  2 15 iw               ADC,AX,imm16                  Add with carry imm16 to AX
  3 15 id               ADC,EAX,imm32                 Add with carry imm32 to EAX
  4 80 /2 ib            ADC,r/m8,imm8                 Add with carry imm8 to r/m8
  5 81 /2 iw            ADC,r/m16,imm16               Add with carry imm16 to r/m16
  6 81 /2 id            ADC,r/m32,imm32               Add with CF imm32 to r/m32
  7 83 /2 ib            ADC,r/m16,imm8                Add with CF sign-extended imm8 to r/m16
  8 83 /2 ib            ADC,r/m32,imm8                Add with CF sign-extended imm8 into r/m32
  9 10 /r               ADC,r/m8,r8                   Add with carry byte register to r/m8
 10 11 /r               ADC,r/m16,r16                 Add with carry r16 to r/m16
 11 11 /r               ADC,r/m32,r32                 Add with CF r32 to r/m32
 12 12 /r               ADC,r8,r/m8                   Add with carry r/m8 to byte register
 13 13 /r               ADC,r16,r/m16                 Add with carry r/m16 to r16
 14 13 /r               ADC,r32,r/m32                 Add with CF r/m32 to r32
 15 04 ib               ADD,AL,imm8                   Add imm8 to AL
 16 05 iw               ADD,AX,imm16                  Add imm16 to AX
 17 05 id               ADD,EAX,imm32                 Add imm32 to EAX
 18 80 /0 ib            ADD,r/m8,imm8                 Add imm8 to r/m8
 19 81 /0 iw            ADD,r/m16,imm16               Add imm16 to r/m16
 20 81 /0 id            ADD,r/m32,imm32               Add imm32 to r/m32
 21 83 /0 ib            ADD,r/m16,imm8                Add sign-extended imm8 to r/m16
 22 83 /0 ib            ADD,r/m32,imm8                Add sign-extended imm8 to r/m32
 23 00 /r               ADD,r/m8,r8                   Add r8 to r/m8
 24 01 /r               ADD,r/m16,r16                 Add r16 to r/m16
 25 01 /r               ADD,r/m32,r32                 Add r32 to r/m32
 26 02 /r               ADD,r8,r/m8                   Add r/m8 to r8
 27 03 /r               ADD,r16,r/m16                 Add r/m16 to r16
 28 03 /r               ADD,r32,r/m32                 Add r/m32 to r32
 29 24 ib               AND,AL,imm8                   AL AND imm8
 30 25 iw               AND,AX,imm16                  AX AND imm16
 31 25 id               AND,EAX,imm32                 EAX AND imm32
 32 80 /4 ib            AND,r/m8,imm8                 r/m8 AND imm8
 33 81 /4 iw            AND,r/m16,imm16               r/m16 AND imm16
 34 81 /4 id            AND,r/m32,imm32               r/m32 AND imm32
 35 83 /4 ib            AND,r/m16,imm8                r/m16 AND imm8 (sign-extended)
 36 83 /4 ib            AND,r/m32,imm8                r/m32 AND imm8 (sign-extended)
 37 20 /r               AND,r/m8,r8                   r/m8 AND r8
 38 21 /r               AND,r/m16,r16                 r/m16 AND r16
 39 21 /r               AND,r/m32,r32                 r/m32 AND r32
 40 22 /r               AND,r8,r/m8                   r8 AND r/m8
 41 23 /r               AND,r16,r/m16                 r16 AND r/m16
 42 23 /r               AND,r32,r/m32                 r32 AND r/m32
 43 62 /r               BOUND,r16,m16&16              Check if r16 (array index) is within bounds specified by m16&16
 44 62 /r               BOUND,r32,m32&32              Check if r32 (array index) is within bounds specified by m32&32
 45 0FBC                BSF,r16,r/m16                 Bit scan forward on r/m16
 46 0FBC                BSF,r32,r/m32                 Bit scan forward on r/m32
 47 0FBD                BSR,r16,r/m16                 Bit scan reverse on r/m16
 48 0FBD                BSR,r32,r/m32                 Bit scan reverse on r/m32
 49 0FC8+rd             BSWAP,r32                     Reverses the byte order of a 32-bit register.
 50 0FA3                BT,r/m16,r16                  Store selected bit in CF flag
 51 0FA3                BT,r/m32,r32                  Store selected bit in CF flag
 52 0FBA /4 ib          BT,r/m16,imm8                 Store selected bit in CF flag
 53 0FBA /4 ib          BT,r/m32,imm8                 Store selected bit in CF flag
 54 0FBB                BTC,r/m16,r16                 Store selected bit in CF flag and complement
 55 0FBB                BTC,r/m32,r32                 Store selected bit in CF flag and complement
 56 0FBA /7 ib          BTC,r/m16,imm8                Store selected bit in CF flag and complement
 57 0FBA /7 ib          BTC,r/m32,imm8                Store selected bit in CF flag and complement
 58 0FB3                BTR,r/m16,r16                 Store selected bit in CF flag and clear
 59 0FB3                BTR,r/m32,r32                 Store selected bit in CF flag and clear
 60 0FBA /6 ib          BTR,r/m16,imm8                Store selected bit in CF flag and clear
 61 0FBA /6 ib          BTR,r/m32,imm8                Store selected bit in CF flag and clear
 62 0FAB                BTS,r/m16,r16                 Store selected bit in CF flag and set
 63 0FAB                BTS,r/m32,r32                 Store selected bit in CF flag and set
 64 0FBA /5 ib          BTS,r/m16,imm8                Store selected bit in CF flag and set
 65 0FBA /5 ib          BTS,r/m32,imm8                Store selected bit in CF flag and set
 66 E8 cw               CALL,rel16                    Call near, relative, displacement relative to next instruction
 67 E8 cd               CALL,rel32                    Call near, relative, displacement relative to next instruction
 68 FF /2               CALL,r/m16                    Call near, absolute indirect, address given in r/m16
 69 FF /2               CALL,r/m32                    Call near, absolute indirect, address given in r/m32
 70 9A cd               CALL,ptr16:16                 Call far, absolute, address given in operand
 71 9A cp               CALL,ptr16:32                 Call far, absolute, address given in operand
 72 FF /3               CALL,m16:16                   Call far, absolute indirect, address given in m16:16
 73 FF /3               CALL,m16:32                   Call far, absolute indirect, address given in m16:32
 74 98                  CBW                           AX ← sign-extend of AL
 75 98                  CWDE                          EAX ← sign-extend of AX
 76 F8                  CLC                           Clear CF flag.
 77 FC                  CLD                           Clear DF flag.
 78 FA                  CLI                           Clear interrupt flag; interrupts disabled when interrupt flag cleared.
 79 F5                  CMC                           Complement CF flag.
 80 0F47 /r             CMOVA,r16,r/m16               Move if above (CF=0 and ZF=0).
 81 0F47 /r             CMOVA,r32,r/m32               Move if above (CF=0 and ZF=0).
 82 0F43 /r             CMOVAE,r16,r/m16              Move if above or equal (CF=0).
 83 0F43 /r             CMOVAE,r32,r/m32              Move if above or equal (CF=0).
 84 0F42 /r             CMOVB,r16,r/m16               Move if below (CF=1).
 85 0F42 /r             CMOVB,r32,r/m32               Move if below (CF=1).
 86 0F46 /r             CMOVBE,r16,r/m16              Move if below or equal (CF=1 or ZF=1).
 87 0F46 /r             CMOVBE,r32,r/m32              Move if below or equal (CF=1 or ZF=1).
 88 0F42 /r             CMOVC,r16,r/m16               Move if carry (CF=1).
 89 0F42 /r             CMOVC,r32,r/m32               Move if carry (CF=1).
 90 0F44 /r             CMOVE,r16,r/m16               Move if equal (ZF=1).
 91 0F44 /r             CMOVE,r32,r/m32               Move if equal (ZF=1).
 92 0F4F /r             CMOVG,r16,r/m16               Move if greater (ZF=0 and SF=OF).
 93 0F4F /r             CMOVG,r32,r/m32               Move if greater (ZF=0 and SF=OF).
 94 0F4D /r             CMOVGE,r16,r/m16              Move if greater or equal (SF=OF).
 95 0F4D /r             CMOVGE,r32,r/m32              Move if greater or equal (SF=OF).
 96 0F4C /r             CMOVL,r16,r/m16               Move if less (SF<>OF).
 97 0F4C /r             CMOVL,r32,r/m32               Move if less (SF<>OF).
 98 0F4E /r             CMOVLE,r16,r/m16              Move if less or equal (ZF=1 or SF<>OF).
 99 0F4E /r             CMOVLE,r32,r/m32              Move if less or equal (ZF=1 or SF<>OF).
100 0F46 /r             CMOVNA,r16,r/m16              Move if not above (CF=1 or ZF=1).
101 0F46 /r             CMOVNA,r32,r/m32              Move if not above (CF=1 or ZF=1).
102 0F42 /r             CMOVNAE,r16,r/m16             Move if not above or equal (CF=1).
103 0F42 /r             CMOVNAE,r32,r/m32             Move if not above or equal (CF=1).
104 0F43 /r             CMOVNB,r16,r/m16              Move if not below (CF=0).
105 0F43 /r             CMOVNB,r32,r/m32              Move if not below (CF=0).
106 0F47 /r             CMOVNBE,r16,r/m16             Move if not below or equal (CF=0 and ZF=0).
107 0F47 /r             CMOVNBE,r32,r/m32             Move if not below or equal (CF=0 and ZF=0).
108 0F43 /r             CMOVNC,r16,r/m16              Move if not carry (CF=0).
109 0F43 /r             CMOVNC,r32,r/m32              Move if not carry (CF=0).
110 0F45 /r             CMOVNE,r16,r/m16              Move if not equal (ZF=0).
111 0F45 /r             CMOVNE,r32,r/m32              Move if not equal (ZF=0).
112 0F4E /r             CMOVNG,r16,r/m16              Move if not greater (ZF=1 or SF<>OF).
113 0F4E /r             CMOVNG,r32,r/m32              Move if not greater (ZF=1 or SF<>OF).
114 0F4C /r             CMOVNGE,r16,r/m16             Move if not greater or equal (SF<>OF.)
115 0F4C /r             CMOVNGE,r32,r/m32             Move if not greater or equal (SF<>OF).
116 0F4D /r             CMOVNL,r16,r/m16              Move if not less (SF=OF).
117 0F4D /r             CMOVNL,r32,r/m32              Move if not less (SF=OF).
118 0F4F /r             CMOVNLE,r16,r/m16             Move if not less or equal (ZF=0 and SF=OF).
119 0F4F /r             CMOVNLE,r32,r/m32             Move if not less or equal (ZF=0 and SF=OF).
120 3C ib               CMP,AL,imm8                   Compare imm8 with AL.
121 3D iw               CMP,AX,imm16                  Compare imm16 with AX.
122 3D id               CMP,EAX,imm32                 Compare imm32 with EAX.
123 80 /7 ib            CMP,r/m8,imm8                 Compare imm8 with r/m8.
124 81 /7 iw            CMP,r/m16,imm16               Compare imm16 with r/m16.
125 81 /7 id            CMP,r/m32,imm32               Compare imm32 with r/m32.
126 83 /7 ib            CMP,r/m16,imm8                Compare imm8 with r/m16.
127 83 /7 ib            CMP,r/m32,imm8                Compare imm8 with r/m32.
128 38 /r               CMP,r/m8,r8                   Compare r8 with r/m8.
129 39 /r               CMP,r/m16,r16                 Compare r16 with r/m16.
130 39 /r               CMP,r/m32,r32                 Compare r32 with r/m32.
131 3A /r               CMP,r8,r/m8                   Compare r/m8 with r8.
132 3B /r               CMP,r16,r/m16                 Compare r/m16 with r16.
133 3B /r               CMP,r32,r/m32                 Compare r/m32 with r32.
134 A6                  CMPSB                         Compares byte at address DS:(E)SI with byte at address ES:(E)DI and sets the status flags accordingly.
135 A7                  CMPSW                         Compares word at address DS:(E)SI with word at address ES:(E)DI and sets the status flags accordingly.
136 A7                  CMPSD                         Compares doubleword at address DS:(E)SI with doubleword at address ES:(E)DI and sets the status flags accordingly.
137 99                  CWD                           DX:AX ← sign-extend of AX
138 99                  CDQ                           EDX:EAX ← sign-extend of EAX
139 FE /1               DEC,r/m8                      Decrement r/m8 by 1.
140 FF /1               DEC,r/m16                     Decrement r/m16 by 1.
141 FF /1               DEC,r/m32                     Decrement r/m32 by 1.
142 48+rw               DEC,r16                       Decrement r16 by 1.
143 48+rd               DEC,r32                       Decrement r32 by 1.
144 F6 /6               DIV,r/m8                      Unsigned divide AX by r/m8, with result stored in AL ← Quotient, AH ← Remainder.
145 F7 /6               DIV,r/m16                     Unsigned divide DX:AX by r/m16, with result stored in AX ← Quotient, DX ← Remainder.
146 F7 /6               DIV,r/m32                     Unsigned divide EDX:EAX by r/m32, with result stored in EAX ← Quotient, EDX ← Remainder.
147 D9E1                FABS                          Replace ST with its absolute value.
148 D8 /0               FADD,m32fp                    Add m32fp to ST(0) and store result in ST(0).
149 DC /0               FADD,m64fp                    Add m64fp to ST(0) and store result in ST(0).
150 D8C0+i              FADD,ST(0),ST(i)              Add ST(0) to ST(i) and store result in ST(0).
151 DCC0+i              FADD,ST(i),ST(0)              Add ST(i) to ST(0) and store result in ST(i).
152 DEC0+i              FADDP,ST(i),ST(0)             Add ST(0) to ST(i), store result in ST(i), and pop the register stack.
153 DEC1                FADDP                         Add ST(0) to ST(1), store result in ST(1), and pop the register stack.
154 DA /0               FIADD,m32int                  Add m32int to ST(0) and store result in ST(0).
155 DE /0               FIADD,m16int                  Add m16int to ST(0) and store result in ST(0).
156 D9E0                FCHS                          Complements sign of ST(0)
157 DAC0+i              FCMOVB,ST(0),ST(i)            Move if below (CF=1).
158 DAC8+i              FCMOVE,ST(0),ST(i)            Move if equal (ZF=1).
159 DAD0+i              FCMOVBE,ST(0),ST(i)           Move if below or equal (CF=1 or ZF=1).
160 DAD8+i              FCMOVU,ST(0),ST(i)            Move if unordered (PF=1).
161 DBC0+i              FCMOVNB,ST(0),ST(i)           Move if not below (CF=0).
162 DBC8+i              FCMOVNE,ST(0),ST(i)           Move if not equal (ZF=0).
163 DBD0+i              FCMOVNBE,ST(0),ST(i)          Move if not below or equal (CF=0 and ZF=0).
164 DBD8+i              FCMOVNU,ST(0),ST(i)           Move if not unordered (PF=0).
165 D8 /2               FCOM,m32fp                    Compare ST(0) with m32fp.
166 DC /2               FCOM,m64fp                    Compare ST(0) with m64fp.
167 D8D0+i              FCOM,ST(i)                    Compare ST(0) with ST(i).
168 D8D1                FCOM                          Compare ST(0) with ST(1).
169 D8 /3               FCOMP,m32fp                   Compare ST(0) with m32fp and pop register stack.
170 DC /3               FCOMP,m64fp                   Compare ST(0) with m64fp and pop register stack.
171 D8D8+i              FCOMP,ST(i)                   Compare ST(0) with ST(i) and pop register stack.
172 D8D9                FCOMP                         Compare ST(0) with ST(1) and pop register stack.
173 DED9                FCOMPP                        Compare ST(0) with ST(1) and pop register stack twice.
174 DBF0+i              FCOMI,ST,ST(i)                Compare ST(0) with ST(i) and set status flags accordingly.
175 DFF0+i              FCOMIP,ST,ST(i)               Compare ST(0) with ST(i), set status flags accordingly, and pop register stack.
176 DBE8+i              FUCOMI,ST,ST(i)               Compare ST(0) with ST(i), check for ordered values, and set status flags accordingly.
177 DFE8+i              FUCOMIP,ST,ST(i)              Compare ST(0) with ST(i), check for ordered values, set status flags accordingly, and pop register stack.
178 D9FF                FCOS                          Replace ST(0) with its cosine.
179 D9F6                FDECSTP                       Decrement TOP field in FPU status word.
180 D8 /6               FDIV,m32fp                    Divide ST(0) by m32fp and store result in ST(0).
181 DC /6               FDIV,m64fp                    Divide ST(0) by m64fp and store result in ST(0).
182 D8F0+i              FDIV,ST(0),ST(i)              Divide ST(0) by ST(i) and store result in ST(0).
183 DCF8+i              FDIV,ST(i),ST(0)              Divide ST(i) by ST(0) and store result in ST(i).
184 DEF8+i              FDIVP,ST(i),ST(0)             Divide ST(i) by ST(0), store result in ST(i), and pop the register stack.
185 DEF9                FDIVP                         Divide ST(1) by ST(0), store result in ST(1), and pop the register stack.
186 DA /6               FIDIV,m32int                  Divide ST(0) by m32int and store result in ST(0).
187 DE /6               FIDIV,m16int                  Divide ST(0) by m64int and store result in ST(0).
188 D8 /7               FDIVR,m32fp                   Divide m32fp by ST(0) and store result in ST(0)
189 DC /7               FDIVR,m64fp                   Divide m64fp by ST(0) and store result in ST(0)
190 D8F8+i              FDIVR,ST(0),ST(i)             Divide ST(i) by ST(0) and store result in ST(0)
191 DCF0+i              FDIVR,ST(i),ST(0)             Divide ST(0) by ST(i) and store result in ST(i)
192 DEF0+i              FDIVRP,ST(i),ST(0)            Divide ST(0) by ST(i), store result in ST(i), and pop the register stack
193 DEF1                FDIVRP                        Divide ST(0) by ST(1), store result in ST(1), and pop the register stack
194 DA /7               FIDIVR,m32int                 Divide m32int by ST(0) and store result in ST(0)
195 DE /7               FIDIVR,m16int                 Divide m16int by ST(0) and store result in ST(0)
196 DE /2               FICOM,m16int                  Compare ST(0) with m16int.
197 DA /2               FICOM,m32int                  Compare ST(0) with m32int.
198 DE /3               FICOMP,m16int                 Compare ST(0) with m16int and pop stack register.
199 DA /3               FICOMP,m32int                 Compare ST(0) with m32int and pop stack register.
200 DF /0               FILD,m16int                   Push m16int onto the FPU register stack.
201 DB /0               FILD,m32int                   Push m32int onto the FPU register stack.
202 DF /5               FILD,m64int                   Push m64int onto the FPU register stack.
203 D9F7                FINCSTP                       Increment the TOP field in the FPU status register.
204 DF /2               FIST,m16int                   Store ST(0in m16int.
205 DB /2               FIST,m32int                   Store ST(0in m32int.
206 DF /3               FISTP,m16int                  Store ST(0in m16int and pop register stack.
207 DB /3               FISTP,m32int                  Store ST(0in m32int and pop register stack.
208 DF /7               FISTP,m64int                  Store ST(0in m64int and pop register stack.
209 DF /1               FISTTP,m16int                 Store ST as a signed integer (truncate) inm16int and pop ST.
210 DB /1               FISTTP,m32int                 Store ST as a signed integer (truncate) inm32int and pop ST.
211 DD /1               FISTTP,m64int                 Store ST as a signed integer(truncate) inm64int and pop ST.
212 D9 /0               FLD,m32fp                     Push m32fp onto the FPU register stack.
213 DD /0               FLD,m64fp                     Push m64fp onto the FPU register stack.
214 DB /5               FLD,m80fp                     Push m80fp onto the FPU register stack.
215 D9C0+i              FLD,ST(i)                     Push ST(i) onto the FPU register stack.
216 D9E8                FLD1                          Push +1.0 onto the FPU register stack.
217 D9E9                FLDL2T                        Push log210 onto the FPU register stack.
218 D9EA                FLDL2E                        Push log2e onto the FPU register stack.
219 D9EB                FLDPI                         Push π onto the FPU register stack.
220 D9EC                FLDLG2                        Push log102 onto the FPU register stack.
221 D9ED                FLDLN2                        Push loge2 onto the FPU register stack.
222 D9EE                FLDZ                          Push +0.0 onto the FPU register stack.
223 D8 /1               FMUL,m32fp                    Multiply ST(0) by m32fp and store result in ST(0)
224 DC /1               FMUL,m64fp                    Multiply ST(0) by m64fp and store result in ST(0)
225 D8C8+i              FMUL,ST(0),ST(i)              Multiply ST(0) by ST(i) and store result in ST(0)
226 DCC8+i              FMUL,ST(i),ST(0)              Multiply ST(i) by ST(0) and store result in ST(i)
227 DEC8+i              FMULP,ST(i),ST(0)             Multiply ST(i) by ST(0), store result in ST(i), and pop the register stack
228 DEC9                FMULP                         Multiply ST(1) by ST(0), store result in ST(1), and pop the register stack
229 DA /1               FIMUL,m32int                  Multiply ST(0) by m32int and store result in ST(0)
230 DE /1               FIMUL,m16int                  Multiply ST(0) by m16int and store result in ST(0)
231 D9F3                FPATAN                        Replace ST(1) with arctan(ST(1)/ST(0)) and pop the register stack.
232 D9FC                FRNDINT                       Round ST(0) to an integer.
233 D9FD                FSCALE                        Scale ST(0) by ST(1).
234 D9FE                FSIN                          Replace ST(0) with its sine.
235 D9FB                FSINCOS                       Compute the sine and cosine of ST(0); replace ST(0) with the sine, and push the cosine onto the register stack.
236 D9FA                FSQRT                         Computes square root of ST(0) and stores the result in ST(0).
237 D9 /2               FST,m32fp                     Copy ST(0) to m32fp.
238 DD /2               FST,m64fp                     Copy ST(0) to m64fp.
239 DDD0+i              FST,ST(i)                     Copy ST(0) to ST(i).
240 D9 /3               FSTP,m32fp                    Copy ST(0) to m32fp and pop register stack.
241 DD /3               FSTP,m64fp                    Copy ST(0) to m64fp and pop register stack.
242 DB /7               FSTP,m80fp                    Copy ST(0) to m80fp and pop register stack.
243 DDD8+i              FSTP,ST(i)                    Copy ST(0) to ST(i) and pop register stack.
244 9BDD /7             FSTSW,m2byte                  Store FPU status word at m2byte after checking forpending unmasked floating-point exceptions.
245 9BDFE0              FSTSW,AX                      Store FPU status word in AX register after checking forpending unmasked floating-point exceptions.
246 DD /7               FNSTSW,m2byte                 Store FPU status word at m2byte without checking forpending unmasked floating-point exceptions.
247 DFE0                FNSTSW,AX                     Store FPU status word in AX register without checking forpending unmasked floating-point exceptions.
248 D8 /4               FSUB,m32fp                    Subtract m32fp from ST(0) and store result in ST(0).
249 DC /4               FSUB,m64fp                    Subtract m64fp from ST(0) and store result in ST(0).
250 D8E0+i              FSUB,ST(0),ST(i)              Subtract ST(i) from ST(0) and store result in ST(0).
251 DCE8+i              FSUB,ST(i),ST(0)              Subtract ST(0) from ST(i) and store result in ST(i).
252 DEE8+i              FSUBP,ST(i),ST(0)             Subtract ST(0) from ST(i), store result in ST(i), and pop register stack.
253 DEE9                FSUBP                         Subtract ST(0) from ST(1), store result in ST(1), and pop register stack.
254 DA /4               FISUB,m32int                  Subtract m32int from ST(0) and store result in ST(0).
255 DE /4               FISUB,m16int                  Subtract m16int from ST(0) and store result in ST(0).
256 D8 /5               FSUBR,m32fp                   Subtract ST(0) from m32fp and store result in ST(0).
257 DC /5               FSUBR,m64fp                   Subtract ST(0) from m64fp and store result in ST(0).
258 D8E8+i              FSUBR,ST(0),ST(i)             Subtract ST(0) from ST(i) and store result in ST(0).
259 DCE0+i              FSUBR,ST(i),ST(0)             Subtract ST(i) from ST(0) and store result in ST(i).
260 DEE0+i              FSUBRP,ST(i),ST(0)            Subtract ST(i) from ST(0), store result in ST(i), and pop register stack.
261 DEE1                FSUBRP                        Subtract ST(1) from ST(0), store result in ST(1), and pop register stack.
262 DA /5               FISUBR,m32int                 Subtract ST(0) from m32int and store result in ST(0).
263 DE /5               FISUBR,m16int                 Subtract ST(0) from m16int and store result in ST(0).
264 D9E4                FTST                          Compare ST(0) with 0.0.
265 DDE0+i              FUCOM,ST(i)                   Compare ST(0) with ST(i).
266 DDE1                FUCOM                         Compare ST(0) with ST(1).
267 DDE8+i              FUCOMP,ST(i)                  Compare ST(0) with ST(i) and pop register stack.
268 DDE9                FUCOMP                        Compare ST(0) with ST(1) and pop register stack.
269 DAE9                FUCOMPP                       Compare ST(0) with ST(1) and pop register stack twice.
270 D9E5                FXAM                          Classify value or number in ST(0).
271 D9C8+i              FXCH,ST(i)                    Exchange the contents of ST(0) and ST(i).
272 D9C9                FXCH                          Exchange the contents of ST(0) and ST(1).
273 D9F1                FYL2X                         Replace ST(1)with (ST(1* log2ST(0)) and pop the register stack.
274 D9F9                FYL2XP1                       Replace ST(1) with ST(1* log2(ST(0+ 1.0) and pop the register stack.
275 F6 /7               IDIV,r/m8                     Signed divide AX by r/m8, with result stored in AL ← Quotient, AH ← Remainder.
276 F7 /7               IDIV,r/m16                    Signed divide DX:AX by r/m16, with result stored in AX ← Quotient, DX ← Remainder.
277 F7 /7               IDIV,r/m32                    Signed divide EDX:EAX by r/m32, with result stored in EAX ← Quotient, EDX ← Remainder.
278 F6 /5               IMUL,r/m8                     AX← AL * r/byte.
279 F7 /5               IMUL,r/m16                    DX:AX ← AX * r/m word.
280 F7 /5               IMUL,r/m32                    EDX:EAX ← EAX * r/m doubleword.
281 0FAF /r             IMUL,r16,r/m16                word register ← word register * r/m word.
282 0FAF /r             IMUL,r32,r/m32                doubleword register ← doubleword register * r/m doubleword.
283 6B /r ib            IMUL,r16,r/m16,imm8           word register ← r/m16 * sign-extended immediate byte.
284 6B /r ib            IMUL,r32,r/m32,imm8           doubleword register ← r/m32 * sign-extended immediate byte.
285 6B /r ib            IMUL,r16,imm8                 word register ← word register * sign-extended immediate byte.
286 6B /r ib            IMUL,r32,imm8                 doubleword register ← doubleword register * signextended immediate byte.
287 69 /r iw            IMUL,r16,r/m16,imm16          word register ← r/m16 * immediate word.
288 69 /r id            IMUL,r32,r/m32,imm32          doubleword register ← r/m32 * immediate doubleword.
289 69 /r iw            IMUL,r16,imm16                word register ← r/m16 * immediate word.
290 69 /r id            IMUL,r32,imm32                doubleword register ← r/m32 * immediate doubleword.
291 FE /0               INC,r/m8                      Increment r/byte by 1.
292 FF /0               INC,r/m16                     Increment r/m word by 1.
293 FF /0               INC,r/m32                     Increment r/m doubleword by 1.
294 40+rw               INC,r16                       Increment word register by 1.
295 40+rd               INC,r32                       Increment doubleword register by 1.
296 CC                  INT,3                         Interrupt 3—trap to debugger.
297 CD ib               INT,imm8                      Interrupt vector number specified by immediate byte.
298 CE                  INTO                          Interrupt 4if overflow flag is 1.
299 77 cb               JA,rel8                       Jump short if above (CF=0 and ZF=0).
300 73 cb               JAE,rel8                      Jump short if above or equal (CF=0).
301 72 cb               JB,rel8                       Jump short if below (CF=1).
302 76 cb               JBE,rel8                      Jump short if below or equal (CF=1 or ZF=1).
303 72 cb               JC,rel8                       Jump short if carry (CF=1).
304 E3 cb               JCXZ,rel8                     Jump short if CX register is 0.
305 E3 cb               JECXZ,rel8                    Jump short if ECX register is 0.
306 74 cb               JE,rel8                       Jump short if equal (ZF=1).
307 7F cb               JG,rel8                       Jump short if greater (ZF=0 and SF=OF).
308 7D cb               JGE,rel8                      Jump short if greater or equal (SF=OF).
309 7C cb               JL,rel8                       Jump short if less (SF<>OF).
310 7E cb               JLE,rel8                      Jump short if less or equal (ZF=1 or SF<>OF).
311 76 cb               JNA,rel8                      Jump short if not above (CF=1 or ZF=1).
312 72 cb               JNAE,rel8                     Jump short if not above or equal (CF=1).
313 73 cb               JNB,rel8                      Jump short if not below (CF=0).
314 77 cb               JNBE,rel8                     Jump short if not below or equal (CF=0 and ZF=0).
315 73 cb               JNC,rel8                      Jump short if not carry (CF=0).
316 75 cb               JNE,rel8                      Jump short if not equal (ZF=0).
317 7E cb               JNG,rel8                      Jump short if not greater (ZF=1 or SF<>OF).
318 7C cb               JNGE,rel8                     Jump short if not greater or equal (SF<>OF).
319 7D cb               JNL,rel8                      Jump short if not less (SF=OF).
320 7F cb               JNLE,rel8                     Jump short if not less or equal (ZF=0 and SF=OF).
321 71 cb               JNO,rel8                      Jump short if not overflow (OF=0).
322 7B cb               JNP,rel8                      Jump short if not parity (PF=0).
323 79 cb               JNS,rel8                      Jump short if not sign (SF=0).
324 75 cb               JNZ,rel8                      Jump short if not zero (ZF=0).
325 70 cb               JO,rel8                       Jump short if overflow (OF=1).
326 7A cb               JP,rel8                       Jump short if parity (PF=1).
327 7A cb               JPE,rel8                      Jump short if parity even (PF=1).
328 7B cb               JPO,rel8                      Jump short if parity odd (PF=0).
329 78 cb               JS,rel8                       Jump short if sign (SF=1).
330 74 cb               JZ,rel8                       Jump short if zero (ZF = 1).
331 0F87 cw             JA,rel16                      Jump near if above (CF=0 and ZF=0).
332 0F83 cw             JAE,rel16                     Jump near if above or equal (CF=0).
333 0F82 cw             JB,rel16                      Jump near if below (CF=1).
334 0F86 cw             JBE,rel16                     Jump near if below or equal (CF=1 or ZF=1).
335 0F82 cw             JC,rel16                      Jump near if carry (CF=1).
336 0F84 cw             JE,rel16                      Jump near if equal (ZF=1).
337 0F84 cw             JZ,rel16                      Jump near if 0 (ZF=1).
338 0F8F cw             JG,rel16                      Jump near if greater (ZF=0 and SF=OF).
339 0F87 cd             JA,rel32                      Jump near if above (CF=0 and ZF=0).
340 0F83 cd             JAE,rel32                     Jump near if above or equal (CF=0).
341 0F82 cd             JB,rel32                      Jump near if below (CF=1).
342 0F86 cd             JBE,rel32                     Jump near if below or equal (CF=1 or ZF=1).
343 0F82 cd             JC,rel32                      Jump near if carry (CF=1).
344 0F84 cd             JE,rel32                      Jump near if equal (ZF=1).
345 0F84 cd             JZ,rel32                      Jump near if 0 (ZF=1).
346 0F8F cd             JG,rel32                      Jump near if greater (ZF=0 and SF=OF).
347 EB cb               JMP,rel8                      Jump short, relative, displacement relative to next instruction.
348 E9 cw               JMP,rel16                     Jump near, relative, displacement relative to next instruction.
349 E9 cd               JMP,rel32                     Jump near, relative, displacement relative to next instruction.
350 FF /4               JMP,r/m16                     Jump near, absolute indirect, address given in r/m16.
351 FF /4               JMP,r/m32                     Jump near, absolute indirect, address given in r/m32.
352 EA cd               JMP,ptr16:16                  Jump far, absolute, address given in operand.
353 EA cp               JMP,ptr16:32                  Jump far, absolute, address given in operand.
354 FF /5               JMP,m16:16                    Jump far, absolute indirect, address given in m16:16.
355 FF /5               JMP,m16:32                    Jump far, absolute indirect, address given in m16:32.
356 8D /r               LEA,r16,m                     Store effective address for m in register r16.
357 8D /r               LEA,r32,m                     Store effective address for m in register r32.
358 AC                  LODSB                         Load byte at address DS:(E)SI into AL.
359 AD                  LODSW                         Load word at address DS:(E)SI into AX.
360 AD                  LODSD                         Load doubleword at address DS:(E)SI into EAX.
361 E2 cb               LOOP,rel8                     Decrement count; jump short if count ≠ 0.
362 E1 cb               LOOPE,rel8                    Decrement count; jump short if count ≠ 0 and ZF=1.
363 E1 cb               LOOPZ,rel8                    Decrement count; jump short if count ≠ 0 and ZF=1.
364 E0 cb               LOOPNE,rel8                   Decrement count; jump short if count ≠ 0 and ZF=0.
365 E0 cb               LOOPNZ,rel8                   Decrement count; jump short if count ≠ 0 and ZF=0.
366 88 /r               MOV,r/m8,r8                   Move r8 to r/m8.
367 89 /r               MOV,r/m16,r16                 Move r16 to r/m16.
368 89 /r               MOV,r/m32,r32                 Move r32 to r/m32.
369 8A /r               MOV,r8,r/m8                   Move r/m8 to r8.
370 8B /r               MOV,r16,r/m16                 Move r/m16 to r16.
371 8B /r               MOV,r32,r/m32                 Move r/m32 to r32.
372 8C /r               MOV,r/m16,Sreg                Move segment register to r/m16.
373 8E /r               MOV,Sreg,r/m16                Move r/m16 to segment register.
374 A0                  MOV,AL,moffs8                 Move byte at (seg:offset) to AL.
375 A1                  MOV,AX,moffs16                Move word at (seg:offset) to AX.
376 A1                  MOV,EAX,moffs32               Move doubleword at (seg:offset) to EAX.
377 A2                  MOV,moffs8,AL                 Move AL to (seg:offset).
378 A3                  MOV,moffs16,AX                Move AX to (seg:offset).
379 A3                  MOV,moffs32,EAX               Move EAX to (seg:offset).
380 B0+rb               MOV,r8,imm8                   Move imm8 to r8.
381 B8+rw               MOV,r16,imm16                 Move imm16 to r16.
382 B8+rd               MOV,r32,imm32                 Move imm32 to r32.
383 C6 /0               MOV,r/m8,imm8                 Move imm8 to r/m8.
384 C7 /0               MOV,r/m16,imm16               Move imm16 to r/m16.
385 C7 /0               MOV,r/m32,imm32               Move imm32 to r/m32.
386 A4                  MOVSB                         Move byte at address DS:(E)SI to address ES:(E)DI.
387 A5                  MOVSW                         Move word at address DS:(E)SI to address ES:(E)DI.
388 A5                  MOVSD                         Move doubleword at address DS:(E)SI to address ES:(E)DI.
389 0FB6 /r             MOVZX,r16,r/m8                Move byte to word with zero-extension.
390 0FB6 /r             MOVZX,r32,r/m8                Move byte to doubleword, zero-extension.
391 0FB7 /r             MOVZX,r32,r/m16               Move word to doubleword, zero-extension.
392 F6 /4               MUL,r/m8                      Unsigned multiply (AX ← AL * r/m8).
393 F7 /4               MUL,r/m16                     Unsigned multiply (DX:AX ← AX * r/m16).
394 F7 /4               MUL,r/m32                     Unsigned multiply (EDX:EAX ← EAX * r/m32).
395 F6 /3               NEG,r/m8                      Two's complement negate r/m8.
396 F7 /3               NEG,r/m16                     Two's complement negate r/m16.
397 F7 /3               NEG,r/m32                     Two's complement negate r/m32.
398 F6 /2               NOT,r/m8                      Reverse each bit of r/m8.
399 F7 /2               NOT,r/m16                     Reverse each bit of r/m16.
400 F7 /2               NOT,r/m32                     Reverse each bit of r/m32.
401 0C ib               OR,AL,imm8                    AL OR imm8.
402 0D iw               OR,AX,imm16                   AX OR imm16.
403 0D id               OR,EAX,imm32                  EAX OR imm32.
404 80 /1 ib            OR,r/m8,imm8                  r/m8 OR imm8.
405 81 /1 iw            OR,r/m16,imm16                r/m16 OR imm16.
406 81 /1 id            OR,r/m32,imm32                r/m32 OR imm32
407 83 /1 ib            OR,r/m16,imm8                 r/m16 OR imm8 (sign-extended).
408 83 /1 ib            OR,r/m32,imm8                 r/m32 OR imm8 (sign-extended).
409 08 /r               OR,r/m8,r8                    r/m8 OR r8.
410 09 /r               OR,r/m16,r16                  r/m16 OR r16.
411 09 /r               OR,r/m32,r32                  r/m32 OR r32.
412 0A /r               OR,r8,r/m8                    r8 OR r/m8.
413 0B /r               OR,r16,r/m16                  r16 OR r/m16.
414 0B /r               OR,r32,r/m32                  r32 OR r/m32.
415 8F /0               POP,r/m16                     Pop top of stack into m16; increment stack pointer.
416 8F /0               POP,r/m32                     Pop top of stack into m32; increment stack pointer.
417 58+rw               POP,r16                       Pop top of stack into r16; increment stack pointer.
418 58+rd               POP,r32                       Pop top of stack into r32; increment stack pointer.
419 1F                  POP,DS                        Pop top of stack into DS; increment stack pointer.
420 07                  POP,ES                        Pop top of stack into ES; increment stack pointer.
421 17                  POP,SS                        Pop top of stack into SS; increment stack pointer.
422 0FA1                POP,FS                        Pop top of stack into FS; increment stack pointer.
423 0FA9                POP,GS                        Pop top of stack into GS; increment stack pointer.
424 61                  POPA                          Pop DI, SI, BP, BX, DX, CX, and AX.
425 61                  POPAD                         Pop EDI, ESI, EBP, EBX, EDX, ECX, and EAX.
426 FF /6               PUSH,r/m16                    Push r/m16.
427 FF /6               PUSH,r/m32                    Push r/m32.
428 50+rw               PUSH,r16                      Push r16.
429 50+rd               PUSH,r32                      Push r32.
430 6A                  PUSH,imm8                     Push imm8.
431 68                  PUSH,imm16                    Push imm16.
432 68                  PUSH,imm32                    Push imm32.
433 0E                  PUSH,CS                       Push CS.
434 16                  PUSH,SS                       Push SS.
435 1E                  PUSH,DS                       Push DS.
436 06                  PUSH,ES                       Push ES.
437 0FA0                PUSH,FS                       Push FS.
438 0FA8                PUSH,GS                       Push GS.
439 60                  PUSHA                         Push AX, CX, DX, BX, original SP, BP, SI, and DI.
440 60                  PUSHAD                        Push EAX, ECX, EDX, EBX, original ESP, EBP, ESI, and EDI.
441 D0 /2               RCL,r/m8,1                    Rotate 9 bits (CF, r/m8) left once.
442 D2 /2               RCL,r/m8,CL                   Rotate 9 bits (CF, r/m8) left CL times.
443 C0 /2 ib            RCL,r/m8,imm8                 Rotate 9 bits (CF, r/m8) left imm8 times.
444 D1 /2               RCL,r/m16,1                   Rotate 17 bits (CF, r/m16) left once.
445 D3 /2               RCL,r/m16,CL                  Rotate 17 bits (CF, r/m16) left CL times.
446 C1 /2 ib            RCL,r/m16,imm8                Rotate 17 bits (CF, r/m16) left imm8 times.
447 D1 /2               RCL,r/m32,1                   Rotate 33 bits (CF, r/m32) left once.
448 D3 /2               RCL,r/m32,CL                  Rotate 33 bits (CF, r/m32) left CL times.
449 C1 /2 ib            RCL,r/m32,imm8                Rotate 33 bits (CF, r/m32) left imm8 times.
450 D0 /3               RCR,r/m8,1                    Rotate 9 bits (CF, r/m8) right once.
451 D2 /3               RCR,r/m8,CL                   Rotate 9 bits (CF, r/m8) right CL times.
452 C0 /3 ib            RCR,r/m8,imm8                 Rotate 9 bits (CF, r/m8) right imm8 times.
453 D1 /3               RCR,r/m16,1                   Rotate 17 bits (CF, r/m16) right once.
454 D3 /3               RCR,r/m16,CL                  Rotate 17 bits (CF, r/m16) right CL times.
455 C1 /3 ib            RCR,r/m16,imm8                Rotate 17 bits (CF, r/m16) right imm8 times.
456 D1 /3               RCR,r/m32,1                   Rotate 33 bits (CF, r/m32) right once.
457 D3 /3               RCR,r/m32,CL                  Rotate 33 bits (CF, r/m32) right CL times.
458 C1 /3 ib            RCR,r/m32,imm8                Rotate 33 bits (CF, r/m32) right imm8 times.
459 D0 /0               ROL,r/m8,1                    Rotate 8 bits r/m8 left once.
460 D2 /0               ROL,r/m8,CL                   Rotate 8 bits r/m8 left CL times.
461 C0 /0 ib            ROL,r/m8,imm8                 Rotate 8 bits r/m8 left imm8 times.
462 D1 /0               ROL,r/m16,1                   Rotate 16 bits r/m16 left once.
463 D3 /0               ROL,r/m16,CL                  Rotate 16 bits r/m16 left CL times.
464 C1 /0 ib            ROL,r/m16,imm8                Rotate 16 bits r/m16 left imm8 times.
465 D1 /0               ROL,r/m32,1                   Rotate 32 bits r/m32 left once.
466 D3 /0               ROL,r/m32,CL                  Rotate 32 bits r/m32 left CL times.
467 C1 /0 ib            ROL,r/m32,imm8                Rotate 32 bits r/m32 left imm8 times.
468 D0 /1               ROR,r/m8,1                    Rotate 8 bits r/m8 right once.
469 D2 /1               ROR,r/m8,CL                   Rotate 8 bits r/m8 right CL times.
470 C0 /1 ib            ROR,r/m8,imm8                 Rotate 8 bits r/m16 right imm8 times.
471 D1 /1               ROR,r/m16,1                   Rotate 16 bits r/m16 right once.
472 D3 /1               ROR,r/m16,CL                  Rotate 16 bits r/m16 right CL times.
473 C1 /1 ib            ROR,r/m16,imm8                Rotate 16 bits r/m16 right imm8 times.
474 D1 /1               ROR,r/m32,1                   Rotate 32 bits r/m32 right once.
475 D3 /1               ROR,r/m32,CL                  Rotate 32 bits r/m32 right CL times.
476 C1 /1 ib            ROR,r/m32,imm8                Rotate 32 bits r/m32 right imm8 times.
477 C3                  RET                           Near return to calling procedure.
478 CB                  RET                           Far return to calling procedure.
479 C2 iw               RET,imm16                     Near return to calling procedure and pop imm16 bytes from stack.
480 CA iw               RET,imm16                     Far return to calling procedure and pop imm16 bytes from stack.
481 9E                  SAHF                          Load SF, ZF, AF, PF, and CF from AH into EFLAGS register.
482 D0 /4               SAL,r/m8                      Multiply r/m8 by 21 time.
483 D2 /4               SAL,r/m8,CL                   Multiply r/m8 by 2, CL times.
484 C0 /4 ib            SAL,r/m8,imm8                 Multiply r/m8 by 2, imm8 times.
485 D1 /4               SAL,r/m16                     Multiply r/m16 by 21 time.
486 D3 /4               SAL,r/m16,CL                  Multiply r/m16 by 2, CL times.
487 C1 /4 ib            SAL,r/m16,imm8                Multiply r/m16 by 2, imm8 times.
488 D1 /4               SAL,r/m32                     Multiply r/m32 by 21 time.
489 D3 /4               SAL,r/m32,CL                  Multiply r/m32 by 2, CL times.
490 C1 /4 ib            SAL,r/m32,imm8                Multiply r/m32 by 2, imm8 times.
491 D0 /7               SAR,r/m8                      Signed divide* r/m8 by 21 times.
492 D2 /7               SAR,r/m8,CL                   Signed divide* r/m8 by 2, CL times.
493 C0 /7 ib            SAR,r/m8,imm8                 Signed divide* r/m8 by 2, imm8 times.
494 D1 /7               SAR,r/m16                     Signed divide* r/m16 by 21 time.
495 D3 /7               SAR,r/m16,CL                  Signed divide* r/m16 by 2, CL times.
496 C1 /7 ib            SAR,r/m16,imm8                Signed divide* r/m16 by 2, imm8 times.
497 D1 /7               SAR,r/m32                     Signed divide* r/m32 by 21 time.
498 D3 /7               SAR,r/m32,CL                  Signed divide* r/m32 by 2, CL times.
499 C1 /7 ib            SAR,r/m32,imm8                Signed divide* r/m32 by 2, imm8 times.
500 D0 /4               SHL,r/m8                      Multiply r/m8 by 21 time.
501 D2 /4               SHL,r/m8,CL                   Multiply r/m8 by 2, CL times.
502 C0 /4 ib            SHL,r/m8,imm8                 Multiply r/m8 by 2, imm8 times.
503 D1 /4               SHL,r/m16                     Multiply r/m16 by 21 time.
504 D3 /4               SHL,r/m16,CL                  Multiply r/m16 by 2, CL times.
505 C1 /4 ib            SHL,r/m16,imm8                Multiply r/m16 by 2, imm8 times.
506 D1 /4               SHL,r/m32                     Multiply r/m32 by 21 time.
507 D3 /4               SHL,r/m32,CL                  Multiply r/m32 by 2, CL times.
508 C1 /4 ib            SHL,r/m32,imm8                Multiply r/m32 by 2, imm8 times.
509 D0 /5               SHR,r/m8                      Unsigned divide r/m8 by 21 time.
510 D2 /5               SHR,r/m8,CL                   Unsigned divide r/m8 by 2, CL times.
511 C0 /5 ib            SHR,r/m8,imm8                 Unsigned divide r/m8 by 2, imm8 times.
512 D1 /5               SHR,r/m16                     Unsigned divide r/m16 by 21 time.
513 D3 /5               SHR,r/m16,CL                  Unsigned divide r/m16 by 2, CL times.
514 C1 /5 ib            SHR,r/m16,imm8                Unsigned divide r/m16 by 2, imm8 times.
515 D1 /5               SHR,r/m32                     Unsigned divide r/m32 by 21 time.
516 D3 /5               SHR,r/m32,CL                  Unsigned divide r/m32 by 2, CL times.
517 C1 /5 ib            SHR,r/m32,imm8                Unsigned divide r/m32 by 2, imm8 times.
518 1C ib               SBB,AL,imm8                   Subtract with borrow imm8 from AL.
519 1D iw               SBB,AX,imm16                  Subtract with borrow imm16 from AX.
520 1D id               SBB,EAX,imm32                 Subtract with borrow imm32 from EAX.
521 80 /3 ib            SBB,r/m8,imm8                 Subtract with borrow imm8 from r/m8.
522 81 /3 iw            SBB,r/m16,imm16               Subtract with borrow imm16 from r/m16.
523 81 /3 id            SBB,r/m32,imm32               Subtract with borrow imm32 from r/m32.
524 83 /3 ib            SBB,r/m16,imm8                Subtract with borrow sign-extended imm8 from r/m16.
525 83 /3 ib            SBB,r/m32,imm8                Subtract with borrow sign-extended imm8 from r/m32.
526 18 /r               SBB,r/m8,r8                   Subtract with borrow r8 from r/m8.
527 19 /r               SBB,r/m16,r16                 Subtract with borrow r16 from r/m16.
528 19 /r               SBB,r/m32,r32                 Subtract with borrow r32 from r/m32.
529 1A /r               SBB,r8,r/m8                   Subtract with borrow r/m8 from r8.
530 1B /r               SBB,r16,r/m16                 Subtract with borrow r/m16 from r16.
531 1B /r               SBB,r32,r/m32                 Subtract with borrow r/m32 from r32.
532 AE                  SCAS,m8                       Compare AL with byte at ES:(E)DI and set status flags.
533 AF                  SCAS,m16                      Compare AX with word at ES:(E)DI and set status flags.
534 AF                  SCAS,m32                      Compare EAX with doubleword at ES(E)DI and set status flags.
535 AE                  SCASB                         Compare AL with byte at ES:(E)DI and set status flags.
536 AF                  SCASW                         Compare AX with word at ES:(E)DI and set status flags.
537 AF                  SCASD                         Compare EAX with doubleword at ES:(E)DI and set status flags.
538 0F97                SETA,r/m8                     Set byte if above (CF=0 and ZF=0).
539 0F93                SETAE,r/m8                    Set byte if above or equal (CF=0).
540 0F92                SETB,r/m8                     Set byte if below (CF=1).
541 0F96                SETBE,r/m8                    Set byte if below or equal (CF=1 or ZF=1).
542 0F92                SETC,r/m8                     Set if carry (CF=1).
543 0F94                SETE,r/m8                     Set byte if equal (ZF=1).
544 0F9F                SETG,r/m8                     Set byte if greater (ZF=0 and SF=OF).
545 0F9D                SETGE,r/m8                    Set byte if greater or equal (SF=OF).
546 0F9C                SETL,r/m8                     Set byte if less (SF<>OF).
547 0F9E                SETLE,r/m8                    Set byte if less or equal (ZF=1 or SF<>OF).
548 0F96                SETNA,r/m8                    Set byte if not above (CF=1 or ZF=1).
549 0F92                SETNAE,r/m8                   Set byte if not above or equal (CF=1).
550 0F93                SETNB,r/m8                    Set byte if not below (CF=0).
551 0F97                SETNBE,r/m8                   Set byte if not below or equal (CF=0 and ZF=0).
552 0F93                SETNC,r/m8                    Set byte if not carry (CF=0).
553 0F95                SETNE,r/m8                    Set byte if not equal (ZF=0).
554 0F9E                SETNG,r/m8                    Set byte if not greater (ZF=1 or SF<>OF).
555 0F9C                SETNGE,r/m8                   Set if not greater or equal (SF<>OF).
556 0F9D                SETNL,r/m8                    Set byte if not less (SF=OF).
557 0F9F                SETNLE,r/m8                   Set byte if not less or equal (ZF=0 and SF=OF).
558 0F91                SETNO,r/m8                    Set byte if not overflow (OF=0).
559 0F9B                SETNP,r/m8                    Set byte if not parity (PF=0).
560 0F99                SETNS,r/m8                    Set byte if not sign (SF=0).
561 0F95                SETNZ,r/m8                    Set byte if not zero (ZF=0).
562 0F90                SETO,r/m8                     Set byte if overflow (OF=1).
563 0F9A                SETP,r/m8                     Set byte if parity (PF=1).
564 0F9A                SETPE,r/m8                    Set byte if parity even (PF=1).
565 0F9B                SETPO,r/m8                    Set byte if parity odd (PF=0).
566 0F98                SETS,r/m8                     Set byte if sign (SF=1).
567 0F94                SETZ,r/m8                     Set byte if zero (ZF=1).
568 F9                  STC                           Set CF flag.
569 FD                  STD                           Set DF flag.
570 FB                  STI                           Set interrupt flag; external, maskable interrupts enabled at the end of the next instruction.
571 AA                  STOS,m8                       Store AL at address ES:(E)DI.
572 AB                  STOS,m16                      Store AX at address ES:(E)DI.
573 AB                  STOS,m32                      Store EAX at address ES:(E)DI.
574 AA                  STOSB                         Store AL at address ES:(E)DI.
575 AB                  STOSW                         Store AX at address ES:(E)DI.
576 AB                  STOSD                         Store EAX at address ES:(E)DI.
577 2C ib               SUB,AL,imm8                   Subtract imm8 from AL.
578 2D iw               SUB,AX,imm16                  Subtract imm16 from AX.
579 2D id               SUB,EAX,imm32                 Subtract imm32 from EAX.
580 80 /5 ib            SUB,r/m8,imm8                 Subtract imm8 from r/m8.
581 81 /5 iw            SUB,r/m16,imm16               Subtract imm16 from r/m16.
582 81 /5 id            SUB,r/m32,imm32               Subtract imm32 from r/m32.
583 83 /5 ib            SUB,r/m16,imm8                Subtract sign-extended imm8 from r/m16.
584 83 /5 ib            SUB,r/m32,imm8                Subtract sign-extended imm8 from r/m32.
585 28 /r               SUB,r/m8,r8                   Subtract r8 from r/m8.
586 29 /r               SUB,r/m16,r16                 Subtract r16 from r/m16.
587 29 /r               SUB,r/m32,r32                 Subtract r32 from r/m32.
588 2A /r               SUB,r8,r/m8                   Subtract r/m8 from r8.
589 2B /r               SUB,r16,r/m16                 Subtract r/m16 from r16.
590 2B /r               SUB,r32,r/m32                 Subtract r/m32 from r32.
591 A8 ib               TEST,AL,imm8                  AND imm8 with AL; set SF, ZF, PF according to result.
592 A9 iw               TEST,AX,imm16                 AND imm16 with AX; set SF, ZF, PF according to result.
593 A9 id               TEST,EAX,imm32                AND imm32 with EAX; set SF, ZF, PF according to result.
594 F6 /0 ib            TEST,r/m8,imm8                AND imm8 with r/m8; set SF, ZF, PF according to result.
595 F7 /0 iw            TEST,r/m16,imm16              AND imm16 with r/m16; set SF, ZF, PF according to result.
596 F7 /0 id            TEST,r/m32,imm32              AND imm32 with r/m32; set SF, ZF, PF according to result.
597 84 /r               TEST,r/m8,r8                  AND r8 with r/m8; set SF, ZF, PF according to result.
598 85 /r               TEST,r/m16,r16                AND r16 with r/m16; set SF, ZF, PF according to result.
599 85 /r               TEST,r/m32,r32                AND r32 with r/m32; set SF, ZF, PF according to result.
600 90+rw               XCHG,AX,16                    Exchange r16 with AX.
601 90+rw               XCHG,r16,AX                   Exchange AX with r16.
602 90+rd               XCHG,EAX,r32                  Exchange r32 with EAX.
603 90+rd               XCHG,r32,EAX                  Exchange EAX with r32.
604 86 /r               XCHG,r/m8,r8                  Exchange r8 (byte register) with byte from r/m8.
605 86 /r               XCHG,r8,r/m8                  Exchange byte from r/m8 with r8 (byte register).
606 87 /r               XCHG,r/m16,r16                Exchange r16 with word from r/m16.
607 87 /r               XCHG,r16,r/m16                Exchange word from r/m16 with r16.
608 87 /r               XCHG,r/m32,r32                Exchange r32 with doubleword from r/m32.
609 87 /r               XCHG,r32,r/m32                Exchange doubleword from r/m32 with r32.
610 34 ib               XOR,AL,imm8                   AL XOR imm8.
611 35 iw               XOR,AX,imm16                  AX XOR imm16.
612 35 id               XOR,EAX,imm32                 EAX XOR imm32.
613 80 /6 ib            XOR,r/m8,imm8                 r/m8 XOR imm8.
614 81 /6 iw            XOR,r/m16,imm16               r/m16 XOR imm16.
615 81 /6 id            XOR,r/m32,imm32               r/m32 XOR imm32.
616 83 /6 ib            XOR,r/m16,imm8                r/m16 XOR imm8 (sign-extended).
617 83 /6 ib            XOR,r/m32,imm8                r/m32 XOR imm8 (sign-extended).
618 30 /r               XOR,r/m8,r8                   r/m8 XOR r8.
619 31 /r               XOR,r/m16,r16                 r/m16 XOR r16.
620 31 /r               XOR,r/m32,r32                 r/m32 XOR r32.
621 32 /r               XOR,r8,r/m8                   r8 XOR r/m8.
622 33 /r               XOR,r16,r/m16                 r16 XOR r/m16.
623 33 /r               XOR,r32,r/m32                 r32 XOR r/m32.
posted on 2009-02-14 20:21 陈梓瀚(vczh) 阅读(3114) 评论(2)  编辑 收藏 引用 所属分类: JIT

评论:
# re: JIT脚本引擎:x86子集汇编二进制码表整理完成 2009-02-15 17:41 | 阿福1
哇!
谢谢楼主,这个东东相当的有用。
记得看云风的《游戏之旅————我的编程感悟》,里面提到一个技巧,就是不规则图形贴到背景上。如果逐个像素的判断,效率怎么也高不起来,于是把每个像素点的操作看成“mov 常数”这样的指令,把一系列的像素点拷贝转化成一系列的MOV指令,然后把这些指令缓存起来,下次再贴这个不规则图形,性能就大大提高了。
如果可以,希望楼主可以封装一下,做成通用的数据转指令的工具,谢谢!  回复  更多评论
  
# re: JIT脚本引擎:x86子集汇编二进制码表整理完成 2009-02-15 23:54 | 宋震华
呵呵,你果然把它筛选出来了.  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理