namespace X86Disassembler.X86.Operands;
///
/// Base class for all memory operands in an x86 instruction
///
public abstract class MemoryOperand : Operand
{
///
/// Gets or sets the segment override (if any)
///
public string? SegmentOverride { get; set; }
///
/// Initializes a new instance of the MemoryOperand class
///
/// The size of the memory access in bits
/// Optional segment override
protected MemoryOperand(int size = 32, string? segmentOverride = null)
{
Size = size;
SegmentOverride = segmentOverride;
}
///
/// Gets the size prefix string for display (e.g., "byte ptr", "word ptr", "dword ptr")
///
/// The size prefix string
protected string GetSizePrefix()
{
string sizePrefix = Size switch
{
8 => "byte ptr ",
16 => "word ptr ",
32 => "dword ptr ",
64 => "qword ptr ",
_ => ""
};
// If we have a segment override, include it in the format "dword ptr es:[reg]"
if (SegmentOverride != null)
{
return $"{sizePrefix}{SegmentOverride}:";
}
return sizePrefix;
}
}