AsmResolver.X86.X86Disassembler.MakeScaledIndexOperandFromToken C# (CSharp) Method

MakeScaledIndexOperandFromToken() private static method

private static MakeScaledIndexOperandFromToken ( X86Operand operand, byte token ) : void
operand X86Operand
token byte
return void
        private static void MakeScaledIndexOperandFromToken(X86Operand operand, byte token)
        {
            // Mechanism:
            // http://ref.x86asm.net/coder32.html#sib_byte_32

            // SIB-byte:
            //  mul | scaled_reg | reg
            // -----+------------+-------
            //  7 6 |   5 4 3    | 2 1 0

            var scaledIndex = new X86ScaledIndex
            {
                Register = GetRegisterFromToken((byte)((token >> 3) & 7), X86RegisterSize.Dword),
                Multiplier = 1 << ((token >> 6) & 3),
            };

            // ESP scales are ignored.
            if (scaledIndex.Register != X86Register.Esp)
                operand.ScaledIndex = scaledIndex;

            operand.Value = GetRegisterFromToken((byte)(token & 0x7), X86RegisterSize.Dword);
        }