Documented a case that doesn't work in i386

This commit is contained in:
Pierre Pronchery 2011-04-17 04:52:39 +00:00
parent c48d5cbd39
commit c2783f0528
3 changed files with 14 additions and 0 deletions

View File

@ -138,6 +138,7 @@ static int _write_dregister(ArchPlugin * plugin, uint32_t * i,
&& AO_GET_VALUE(definition) == 8) /* mod r/m, /r */
{
(*i)++; /* skip next operand */
/* FIXME it could as well be an inverted /r */
name = operands[*i].value._register.name;
size = AO_GET_SIZE(definitions[*i]);
if((ar = helper->get_register_by_name_size(helper->arch, name,
@ -288,6 +289,7 @@ static int _write_register(ArchPlugin * plugin, uint32_t * i,
&& AO_GET_VALUE(definition) == 8) /* mod r/m, /r */
{
(*i)++; /* skip next operand */
/* FIXME it could as well be an inverted /r */
name = operands[*i].value._register.name;
size = AO_GET_SIZE(definitions[*i]);
if((ar = helper->get_register_by_name_size(helper->arch, name,

View File

@ -52,6 +52,13 @@
{ "adc", 0x10, OP1F, OP_RM8_D8_R,OP_R8, AOT_NONE },
{ "adc", 0x10, OP1F, OP_RM8_DW_R,OP_R8, AOT_NONE },
{ "adc", 0x10, OP1F, OP_RM8_R8_R,OP_R8, AOT_NONE },
/* ADC 0x12 /r 1 r8 r/m8 */
#if 1 /* FIXME doesn't work at the moment */
{ "adc", 0x12, OP1F, OP_RM8_R8_R,OP_RM8_D0_R,AOT_NONE },
{ "adc", 0x12, OP1F, OP_RM8_R8_R,OP_RM8_D8_R,AOT_NONE },
{ "adc", 0x12, OP1F, OP_RM8_R8_R,OP_RM8_DW_R,AOT_NONE },
{ "adc", 0x12, OP1F, OP_RM8_R8_R,OP_RM8_R8_R,AOT_NONE },
#endif
/* ADC 0x14 ib 1 al imm8 */
{ "adc", 0x14, OP1F, OP_al, OP_U8, AOT_NONE },
/* ADC 0x15 iW 1 AX immW */

View File

@ -8,7 +8,12 @@
aas
/* ADC */
adc [%ecx], %dh /* 10 31 */
adc [%ecx+$0x50], %dh /* 10 71 50 */
adc %bl, %bh /* 10 fb */
#if 1 /* FIXME doesn't work at the moment */
adc %dh, [%ecx] /* 12 */
adc %bl, %bh /* 12 */
#endif
adc %al, $0x40 /* 14 40 */
adc %eax, $0x41424344 /* 15 41 42 43 44 */
adc [%edx], $0x46 /* 80 12 46 */