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; } }