protected void TwoByteOpcode(TargetReader reader)
{
byte opcode = reader.ReadByte ();
if (TwoByte_Has_ModRM [opcode] != 0)
DecodeModRM (reader);
if ((opcode >= 0x80) && (opcode <= 0x8f)) {
if ((RexPrefix & X86_REX_Prefix.REX_W) != 0) {
long offset = reader.BinaryReader.ReadInt32 ();
long long_target = Address.Address + offset + 5;
CallTarget = new TargetAddress (
Address.Domain, long_target);
} else if ((Prefix & X86_Prefix.ADDR) != 0) {
short offset = reader.BinaryReader.ReadInt16 ();
int short_target = (short)Address.Address + offset + 3;
CallTarget = new TargetAddress (
Address.Domain, short_target);
} else {
int offset = reader.BinaryReader.ReadInt32 ();
CallTarget = Address + offset + 5;
}
type = Type.ConditionalJump;
}
}