* 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

リロード   新規 編集 差分 添付   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS