AsmResolver.X86.X86Assembler.ComputeRegOrMemSibToken C# (CSharp) Метод

ComputeRegOrMemSibToken() приватный статический Метод

private static ComputeRegOrMemSibToken ( X86Operand operand ) : byte
operand X86Operand
Результат byte
        private static byte ComputeRegOrMemSibToken(X86Operand operand)
        {
            // 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 token = ComputeRegisterToken((X86Register)operand.Value);

            if (operand.ScaledIndex == null)
                token |= 0x20;
            else
            {
                token |= (byte)(ComputeRegisterToken(operand.ScaledIndex.Register) << 3);
                switch (operand.ScaledIndex.Multiplier)
                {
                    case 1:
                        break;
                    case 2:
                        token |= 0x40;
                        break;
                    case 4:
                        token |= 0x80;
                        break;
                    case 8:
                        token |= 0xC0;
                        break;
                    default:
                        throw new ArgumentException("Operand has an invalid scaled index multiplier.", "operand");
                }
            }

            return token;
        }