private void WriteOperandValue(X86OperandType method, X86OperandSize size, X86Operand operand)
{
switch (method)
{
case X86OperandType.MemoryAddress:
case X86OperandType.DirectAddress:
case X86OperandType.ImmediateData:
{
WriteNumber(operand.Value, size);
break;
}
case X86OperandType.RegisterOrMemoryAddress:
{
if ((operand.ScaledIndex != null) ||
(operand.OperandUsage != X86OperandUsage.Normal && operand.Value is X86Register &&
(X86Register)operand.Value == X86Register.Esp))
_writer.WriteByte(ComputeRegOrMemSibToken(operand));
else if (!(operand.Value is X86Register))
WriteNumber(operand.Value, X86OperandSize.Dword);
break;
}
case X86OperandType.RelativeOffset:
{
WriteNumber(Convert.ToUInt32(operand.Value) - (_writer.Position + sizeof (sbyte)), size);
break;
}
}
}