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 8-bit register operand using RegisterIndex8 enum /// /// The 8-bit register /// A register operand for 8-bit registers public static Register8Operand CreateRegisterOperand8(RegisterIndex8 register8) { // Create a new Register8Operand with the 8-bit register return new Register8Operand(register8); } /// /// Creates an immediate value operand /// /// The immediate value /// The size of the value in bits /// An immediate value operand public static ImmediateOperand CreateImmediateOperand(uint 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(uint 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); } }