diff --git a/src/arch/i386.ins b/src/arch/i386.ins index bf9fe91..c27a0e8 100644 --- a/src/arch/i386.ins +++ b/src/arch/i386.ins @@ -588,6 +588,49 @@ { "fwait", 0x9b, OP1F, AOT_NONE, AOT_NONE, AOT_NONE }, /* NOP 0x90 1 */ { "nop", 0x90, OP1F, AOT_NONE, AOT_NONE, AOT_NONE }, +/* OR 0x0c ib 1 al imm8 */ +{ "or", 0x0c, OP1F, OP_al, OP_S8, AOT_NONE }, +/* OR 0x0d iW 1 AX immW */ +{ "or", 0x0d, OP1F, OP_AX, OP_SW, AOT_NONE }, +/* OR 0x80 /r 1 r/m8 r8 */ +{ "or", 0x08, OP1F, OP_RM8_D0_R,OP_R8, AOT_NONE }, +{ "or", 0x08, OP1F, OP_RM8_D8_R,OP_R8, AOT_NONE }, +{ "or", 0x08, OP1F, OP_RM8_DW_R,OP_R8, AOT_NONE }, +{ "or", 0x08, OP1F, OP_RM8_R8_R,OP_R8, AOT_NONE }, +/* OR 0x09 /r 1 r/mW rW */ +{ "or", 0x09, OP1F, OP_RMW_D0_R,OP_RW, AOT_NONE }, +{ "or", 0x09, OP1F, OP_RMW_D8_R,OP_RW, AOT_NONE }, +{ "or", 0x09, OP1F, OP_RMW_DW_R,OP_RW, AOT_NONE }, +{ "or", 0x09, OP1F, OP_RMW_RW_R,OP_RW, AOT_NONE }, +/* OR 0x32 /r 1 r8 r/m8 */ +#if 1 /* FIXME doesn't work at the moment */ +{ "or", 0x0a, OP1F, OP_RM8_R8_R,OP_RM8_D0_R,AOT_NONE }, +{ "or", 0x0a, OP1F, OP_RM8_R8_R,OP_RM8_D8_R,AOT_NONE }, +{ "or", 0x0a, OP1F, OP_RM8_R8_R,OP_RM8_DW_R,AOT_NONE }, +{ "or", 0x0a, OP1F, OP_RM8_R8_R,OP_RM8_R8_R,AOT_NONE }, +#endif +/* OR 0x0b /r 1 rW r/mW */ +#if 1 /* FIXME doesn't work at the moment */ +{ "or", 0x0b, OP1F, OP_RMW_RW_R,OP_RMW_D0_R,AOT_NONE }, +{ "or", 0x0b, OP1F, OP_RMW_RW_R,OP_RMW_D8_R,AOT_NONE }, +{ "or", 0x0b, OP1F, OP_RMW_RW_R,OP_RMW_DW_R,AOT_NONE }, +{ "or", 0x0b, OP1F, OP_RMW_RW_R,OP_RMW_RW_R,AOT_NONE }, +#endif +/* OR 0x80 /1 ib 1 r/m8 imm8 */ +{ "orb", 0x80, OP1F, OP_RM8_D0+1,OP_S8, AOT_NONE }, +{ "orb", 0x80, OP1F, OP_RM8_D8+1,OP_S8, AOT_NONE }, +{ "orb", 0x80, OP1F, OP_RM8_DW+1,OP_S8, AOT_NONE }, +{ "or", 0x80, OP1F, OP_RM8_R8+1,OP_S8, AOT_NONE }, +/* OR 0x81 /1 iW 1 r/mW immW */ +{ "or", 0x81, OP1F, OP_RMW_D0+1,OP_SW, AOT_NONE }, +{ "or", 0x81, OP1F, OP_RMW_D8+1,OP_SW, AOT_NONE }, +{ "or", 0x81, OP1F, OP_RMW_DW+1,OP_SW, AOT_NONE }, +{ "or", 0x81, OP1F, OP_RMW_RW+1,OP_SW, AOT_NONE }, +/* OR 0x83 /1 ib 1 r/mW imm8 */ +{ "orb", 0x83, OP1F, OP_RMW_D0+1,OP_S8, AOT_NONE }, +{ "orb", 0x83, OP1F, OP_RMW_D8+1,OP_S8, AOT_NONE }, +{ "orb", 0x83, OP1F, OP_RMW_DW+1,OP_S8, AOT_NONE }, +{ "or", 0x83, OP1F, OP_RMW_RW+1,OP_S8, AOT_NONE }, /* OUT 0xe6 1 imm8 al */ { "out", 0xe6, OP1F, OP_U8, OP_al, AOT_NONE }, /* OUT 0xe7 1 imm8 AX */ diff --git a/test/i386.S b/test/i386.S index 7d44a9b..33ac3a3 100644 --- a/test/i386.S +++ b/test/i386.S @@ -241,6 +241,29 @@ fninit fwait nop /* 90 */ + /* OR */ + or [%ecx], %dh + or [%ecx+$0x50], %dh + or %bl, %bh + or %eax, %eax + or [%eax], %eax +#if 1 /* FIXME doesn't work at the moment */ + or %dh, [%ecx] + or %bl, %bh + or %edx, [%ecx] + or %ebx, %ebx +#endif + or %al, $0x40 + or %eax, $0x41424344 + or [%edx], $0x46 + or [%ebx + $0x15], $0x47 + or [%ebx + $0x16171819], $0x48 + or %cl, $0x45 + or [%edx], $0x46474849 + or [%ebx + $0x14], $0x4748494a + or [%ebx + $0x16171819], $0x48494a4b + or %ecx, $0x45464748 + or [%eax], -$0x02 out $0xa8, %al out $0xa8, %eax out %dx, %al