x86(32ビット)逆アセンブルのための表
(1) 1バイトオペコード
00-05 | ADD(パターン1) | | 06 | PUSH ES | | 07 | POP ES | | 08-0D | OR(パターン1) | | 0E | PUSH CS | | 0F | (2バイトオペコード) | | 10-15 | ADC(パターン1) | | 16 | PUSH SS | | 17 | POP SS | | 18-1D | SBB(パターン1) | | 1E | PUSH DS | | 1F | POP DS | | 20-25 | AND(パターン1) | | 26 | CS: | | 27 | DAA | | 28-2D | SUB(パターン1) | | 2E | SS: | | 2F | DAS | | 30-35 | XOR(パターン1) | | 36 | DS: | | 37 | AAA | | 38-3D | CMP(パターン1) | | 3E | ES: | | 3F | AAS | | 40-47 | INC reg32 | 16ビットモードのときはreg16になる | 48-4F | DEC reg32 | 16ビットモードのときはreg16になる | 50-57 | PUSH reg32 | 16ビットモードのときはreg16になる | 58-5F | POP reg32 | 16ビットモードのときはreg16になる | 60 | PUSHAD | 16ビットモードのときはPUSHAになる | 61 | POPAD | 16ビットモードのときはPOPAになる | 62 /r | BOUND reg32,m32&32 | 16ビットモードのときはreg16,m16&16になる | 63 /r | ARPL r/m16,reg16 | | 64 | FS: | | 65 | GS: | | 66 | (opsiz:) | | 67 | (adrsiz:) | | 68 imm32 | PUSH imm32 | 16ビットモードのときはimm16になる | 69 /r imm32 | IMUL reg32,r/m32,imm32 | 16ビットモードのときはreg16,r/m16,imm16になる | 6A imm8 | PUSH imm8 | モードに合わせてimm8は符号拡張される | 6B /r imm8 | IMUL reg32,r/m32,imm8 | 16ビットモードのときはreg16,r/m16,imm8になる | 6C | INSB | | 6D | INSD | 16ビットモードのときはINSW | 6E | OUTSB | | 6F | OUTSD | 16ビットモードのときはOUTSW | 70-7F imm8 | Jcc short | オペコードの下位4ビットがコンディションコード(cc)に対応している | 80 /f imm8 | fff r/m8,imm8 | | 81 /f imm32 | fff r/m32,imm32 | 16ビットモードのときはr/m16,imm16になる | 82 /f imm8 | fff r/m8,imm8 | 80と同じ | 83 /f imm8 | fff r/m32,imm | immはimm8を符号拡張する。16ビットモードのときはr/m32になる | 84 /r | TEST reg8,r/m8 | | 85 /r | TEST reg32,r/m32 | 16ビットモードのときはreg16,r/m16になる | 86 /r | XCHG reg8,r/m8 | | 87 /r | XCHG reg32,r/m32 | 16ビットモードのときはreg16,r/m16になる | 88 /r | MOV r/m8,reg8 | | 89 /r | MOV r/m32,reg32 | 16ビットモードのときはr/m16,reg16になる | 8A /r | MOV reg8,r/m8 | | 8B /r | MOV reg32,r/m32 | 16ビットモードのときはreg16,r/m16になる | 8C /s | MOV r/m16,sreg | /sでsregをエンコードする(32ビットモードの挙動に注意点あり) | 8D /r | LEA reg32,mem | /rでreg32をエンコードする。16ビットモードのときはreg16,memになる | 8E /s | MOV sreg,r/m16 | /sでsregをエンコードする | 8F /0 | POP r/m32 | 16ビットモードのときはr/m16になる | 90 | NOP | | 91-97 | XCHG EAX,reg32 | 16ビットモードのときはAX,reg16になる | 98 | CWDE | 16ビットモードのときはCBWになる | 99 | CDQ | 16ビットモードのときはCWDになる | 9A imm48 | CALL FAR imm48 | 16ビットモードのときはimm32になる | 9B | WAIT | | 9C | PUSHFD | 16ビットモードのときはPUSHFになる | 9D | POPFD | 16ビットモードのときはPOPFになる | 9E | SAHF | | 9F | LAHF | | A0 imm32 | MOV AL,[imm32] | 16ビットモードのときはAL,[imm16]になる | A1 imm32 | MOV EAX,[imm32] | 16ビットモードのときはAX,[imm16]になる | A2 imm32 | MOV [imm32],AL | 16ビットモードのときは[imm16],ALになる | A3 imm32 | MOV [imm32],EAX | 16ビットモードのときは[imm16],EAXになる | A4 | MOVSB | | A5 | MOVSD | 16ビットモードのときはMOVSWになる | A6 | CMPSB | | A7 | CMPSD | 16ビットモードのときはCMPSWになる | A8 imm8 | TEST AL,imm8 | | A9 imm32 | TEST EAX,imm32 | 16ビットモードのときはAX,imm16になる | AA | STOSB | | AB | STOSD | 16ビットモードのときはSTOSWになる | AE | SCASB | | AF | SCASD | 16ビットモードのときはSCASWになる | B0-B7 imm8 | MOV reg8,imm8 | | B8-BF imm32 | MOV reg32,imm32 | 16ビットモードのときはreg16,imm16になる | C0 /S imm8 | SSS r/m8,imm8 | (基本シフト命令) | C1 /S imm8 | SSS r/m32,imm8 | (基本シフト命令)16ビットモードのときはr/m16になる | C2 imm16 | RET imm16 | | C3 | RET | | C4 /r | LES reg32,mem48 | 16ビットモードのときはreg16,mem32になる | C5 /r | LDS reg32,mem48 | 16ビットモードのときはreg16,mem32になる | C6 /0 | MOV r/m8,imm8 | | C7 /0 | MOV r/m32,imm32 | 16ビットモードのときはr/m16,imm16になる | C8 imm16 imm8 | ENTER imm16,imm8 | | C9 | LEAVE | | CA imm16 | RETF imm16 | | CB | RETF | | CC | INT3 | | CD imm8 | INT imm8 | | CE | INTO | | CF | IRETD | 16ビットモードのときはIRETになる | D0 /S | SSS r/m8,1 | (基本シフト命令) | D1 /S | SSS r/m32,1 | (基本シフト命令)16ビットモードのときはr/m16になる | D2 /S | SSS r/m8,CL | (基本シフト命令) | D3 /S | SSS r/m32,CL | (基本シフト命令)16ビットモードのときはr/m16になる | D4 imm8 | imm8=0Aなら、AAMになる | | D5 imm8 | imm8=0Aばら、AADになる | | D6 | 未定義(SETALC) | | D7 | XLATB | | D8-DF | FPU命令 | | E0 imm8 | LOOPNZ short imm8 | | E1 imm8 | LOOPZ short imm8 | | E2 imm8 | LOOP short imm8 | | E3 imm8 | JECXZ short imm8 | | E4 imm8 | IN AL,imm8 | | E5 imm8 | IN EAX,imm8 | 16ビットモードのときはEAX,imm8になる | E6 imm8 | OUT imm8,AL | | E7 imm8 | OUT imm8,EAX | 16ビットモードのときはimm8,EAXになる | E8 imm32 | CALL imm32 | 16ビットモードのときはimm16になる | E9 imm32 | JMP imm32 | 16ビットモードのときはimm16になる | EA imm48 | JMP FAR imm48 | 16ビットモードのときはimm32になる | EB imm8 | JMP short imm8 | | EC | IN AL,DX | | ED | IN EAX,DX | 16ビットモードのときはAX,DXになる | EE | OUT DX,AL | | EF | OUT DX,EAX | 16ビットモードのときはDX,AXになる | F0 | LOCK: | | F1 | INT1 | | F2 | REPNE | | F3 | PEPE/REP | | F4 | HLT | | F5 | CMC | | F6 /0 imm8 | TEST r/m8,imm8 | | F6 /1 imm8 | TEST r/m8,imm8 | F6 /0と同じ | F6 /2 | NOT r/m8 | | F6 /3 | NEG r/m8 | | F6 /4 | MUL r/m8 | | F6 /5 | IMUL r/m8 | | F6 /6 | DIV r/m8 | | F6 /7 | IDIV r/m8 | | F7 /0 imm32 | TEST r/m32,imm32 | | F7 /1 imm32 | TEST r/m32,imm32 | F7 /0と同じ | F7 /2 | NOT r/m32 | | F7 /3 | NEG r/m32 | | F7 /4 | MUL r/m32 | | F7 /5 | IMUL r/m32 | | F7 /6 | DIV r/m32 | | F7 /7 | IDIV r/m32 | | F8 | CLC | | F9 | STC | | FA | CLI | | FB | STI | | FC | CLD | | FD | STD | | FE /0 | INC r/m8 | | FE /1 | DEC r/m8 | | FF /0 | INC r/m32 | | FF /1 | DEC r/m32 | | FF /2 | CALL mem32 | 間接NEARコール | FF /3 | CALL FAR mem48 | 間接FARコール | FF /4 | JMP mem32 | 間接NEARジャンプ | FF /5 | JMP FAR mem48 | 間接FARジャンプ | FF /6 | PUSH r/m32 | |
(2) 2バイトオペコード
0F 00 /0 | SLDT r/m16 | | 0F 00 /1 | STR r/m16 | | 0F 00 /2 | LLDT r/m16 | | 0F 00 /3 | LTR r/m16 | | 0F 00 /4 | VERR r/m16 | | 0F 00 /5 | VERW r/m16 | | 0F 01 /0 | SGDT m48 | | 0F 01 /1 | SIDT m48 | | 0F 01 /2 | LGDT m48 | | 0F 01 /3 | LIDT m48 | | 0F 01 /4 | SMSW r/m16 | | 0F 01 /6 | LMSW r/m16 | | 0F 01 /7 | INVLPG m | | 0F 01 F9 | RDTSCP | | 0F 02 /r | LAR reg16,r/m16 | | 0F 03 /r | LSL reg32,r/m16 | | 0F 06 | CLTS | | 0F 08 | INVD | | 0F 09 | WBINVD | | 0F 20 /n | MOV reg32,CRn | mod=11しか指定できない(reg32-only)。mod_r/mバイトのnnnでCRの番号を指定 | 0F 21 /n | MOV reg32,DRn | mod=11しか指定できない(reg32-only)。mod_r/mバイトのnnnでDRの番号を指定 | 0F 22 /n | MOV CRn,reg32 | mod=11しか指定できない(reg32-only)。mod_r/mバイトのnnnでCRの番号を指定 | 0F 23 /n | MOV DRn,reg32 | mod=11しか指定できない(reg32-only)。mod_r/mバイトのnnnでDRの番号を指定 | 0F 30 | WRMSR | | 0F 31 | RDTSC | | 0F 32 | RDMSR | | 0F 33 | RDPMC | | 0F 34 | SYSENTER | | 0F 35 | SYSEXIT | | 0F 40-4F | CMOVcc reg32,r/m32 | オペコードの下位4ビットがccに対応している | 0F 80-8F | Jcc near imm32 | オペコードの下位4ビットがccに対応している | 0F 90-9F /0 | SETcc r/m8 | オペコードの下位4ビットがccに対応している | 0F A0 | PUSH FS | | 0F A1 | POP FS | | 0F A2 | CPUID | http://softwaretechnique.jp/OS_Development/Tips/IA32_Instructions/CPUID.html のオペコードは間違っている | 0F A3 /r | BT r/m32,reg32 | | 0F A4 /r imm8 | SHLD r/m32,reg32,imm8 | | 0F A5 /r | SHLD r/m32,reg32,CL | | 0F A8 | PUSH GS | | 0F A9 | POP GS | | 0F AB /r | BTS r/m32,reg32 | | 0F AC /r imm8 | SHRD r/m32,reg32,imm8 | | 0F AD /r | SHRD r/m32,reg32,CL | | 0F AF /r | IMUL reg32,r/m32 | | 0F B0 /r | CMPXCHG r/m8,reg8 | | 0F B1 /r | CMPXCHG r/m32,reg32 | | 0F B2 /r | LSS reg32,m48 | | 0F B3 /r | BTR r/m32,reg32 | | 0F B4 /r | LFS reg32,m48 | | 0F B5 /r | LGS reg32,m48 | | 0F B6 /r | MOVZX reg32,r/m8 | | 0F B7 /r | MOVZX reg32,r/m16 | | 0F BA /4 imm8 | BT r/m32,imm8 | | 0F BA /5 imm8 | BTS r/m32,imm8 | | 0F BA /6 imm8 | BTR r/m32,imm8 | | 0F BA /7 imm8 | BTC r/m32,imm8 | | 0F BB /r | BTC r/m32,reg32 | | 0F BC /r | BSF reg32,r/m32 | | 0F BD /r | BSR reg32,r/m32 | | 0F BE /r | MOVSX reg32,r/m8 | | 0F BF /r | MOVSX reg32,r/m16 | | 0F C0 /r | XADD reg8,r/m8 | | 0F C1 /r | XADD reg32,r/m32 | | 0F C7 /1 | CMPXCHG8B mem64 | | 0F C8-CF | BSWAP reg32 | オペコードの下位3ビットがレジスタ番号に対応している |
(3)
- レジスタ番号(32bit)
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | EAX | ECX | EDX | EBX | ESP | EBP | ESI | EDI |
- 典型型の整数演算の機能番号(f)
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ADD | OR | ADC | SBB | AND | SUB | XOR | CMP |
- 条件分岐のコンディションコード(cc)
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | O | NO | B | NB | Z | NZ | BE | NBE | S | NS | P | NP | L | NL | LE | NLE |
- 基本シフト命令(S)
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ROL | ROR | RCL | RCR | SHL | SHR | SAL | SAR |
(4)
- パターン1(00-3D)
00fff000 /r | fff r/m8,reg8 | /rでreg8をエンコードする | 00fff001 /r | fff r/m32,reg32 | /rでreg32をエンコードする。16ビットモードのときはr/m16,reg16になる | 00fff010 /r | fff reg8,r/m8 | /rでreg8をエンコードする | 00fff011 /r | fff reg32,r/m32 | /rでreg32をエンコードする。16ビットモードのときはreg16,r/m16になる | 00fff100 | fff AL,imm8 | | 00fff101 | fff EAXL,imm32 | 16ビットモードのときはAXになる |
(9)
|