namespace X86Disassembler.X86.Operands;
///
/// Factory class for creating operand objects
///
public static class OperandFactory
{
///
/// Creates a register operand
///
/// The register
/// The size of the register in bits
/// A register operand
public static RegisterOperand CreateRegisterOperand(RegisterIndex register, int size = 32)
{
return new RegisterOperand(register, size);
}
///
/// Creates an immediate value operand
///
/// The immediate value
/// The size of the value in bits
/// An immediate value operand
public static ImmediateOperand CreateImmediateOperand(long value, int size = 32)
{
return new ImmediateOperand(value, size);
}
///
/// Creates a direct memory operand
///
/// The memory address
/// The size of the memory access in bits
/// Optional segment override
/// A direct memory operand
public static DirectMemoryOperand CreateDirectMemoryOperand(long address, int size = 32, string? segmentOverride = null)
{
return new DirectMemoryOperand(address, size, segmentOverride);
}
///
/// Creates a base register memory operand
///
/// The base register
/// The size of the memory access in bits
/// Optional segment override
/// A base register memory operand
public static BaseRegisterMemoryOperand CreateBaseRegisterMemoryOperand(RegisterIndex baseRegister, int size = 32, string? segmentOverride = null)
{
return new BaseRegisterMemoryOperand(baseRegister, size, segmentOverride);
}
///
/// Creates a displacement memory operand
///
/// The base register
/// The displacement value
/// The size of the memory access in bits
/// Optional segment override
/// A displacement memory operand
public static DisplacementMemoryOperand CreateDisplacementMemoryOperand(RegisterIndex baseRegister, long displacement, int size = 32, string? segmentOverride = null)
{
return new DisplacementMemoryOperand(baseRegister, displacement, size, segmentOverride);
}
///
/// Creates a scaled index memory operand
///
/// The index register
/// The scale factor (1, 2, 4, or 8)
/// The optional base register
/// The displacement value
/// The size of the memory access in bits
/// Optional segment override
/// A scaled index memory operand
public static ScaledIndexMemoryOperand CreateScaledIndexMemoryOperand(RegisterIndex indexRegister, int scale, RegisterIndex? baseRegister = null,
long displacement = 0, int size = 32, string? segmentOverride = null)
{
return new ScaledIndexMemoryOperand(indexRegister, scale, baseRegister, displacement, size, segmentOverride);
}
///
/// Creates a relative offset operand
///
/// The target address
/// The size of the offset in bits (8 or 32)
/// A relative offset operand
public static RelativeOffsetOperand CreateRelativeOffsetOperand(ulong targetAddress, int size = 32)
{
return new RelativeOffsetOperand(targetAddress, size);
}
///
/// Creates an FPU register operand
///
/// The FPU register index (RegisterIndex.A to RegisterIndex.Di)
/// An FPU register operand
public static FPURegisterOperand CreateFPURegisterOperand(FpuRegisterIndex registerIndex)
{
return new FPURegisterOperand(registerIndex);
}
}