* x86(32ビット)逆アセンブルのための表 -(by [[K]], 2018.10.23) ** (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) -レジスタ番号(8bit) |0|1|2|3|4|5|6|7| |AL|CL|DL|BL|AH|CH|DH|BH| ~ -レジスタ番号(32bit) |0|1|2|3|4|5|6|7| |EAX|ECX|EDX|EBX|ESP|EBP|ESI|EDI| ~ -レジスタ番号(sreg) |0|1|2|3|4|5| |ES|CS|SS|DS|FS|GS| ~ -典型型の整数演算の機能番号(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) -リンク --http://softwaretechnique.jp/OS_Development/Tips/IA32_instructions.html --http://ref.x86asm.net/coder32.html