AsmResolver.X86.X86Disassembler.ReadOperand C# (CSharp) Метод

ReadOperand() приватный Метод

private ReadOperand ( X86OperandType method, X86OperandSize size, byte opcode, byte registerToken ) : X86Operand
method X86OperandType
size X86OperandSize
opcode byte
registerToken byte
Результат X86Operand
        private X86Operand ReadOperand(X86OperandType method, X86OperandSize size, byte opcode, byte registerToken)
        {
            switch (method)
            {
                case X86OperandType.OpCodeRegister:
                    return new X86Operand(GetRegisterFromToken((byte)(opcode & 7), GetRegisterSize(size)));

                case X86OperandType.Register:
                    return new X86Operand(GetRegisterFromToken((byte)((registerToken >> 3) & 7),
                        GetRegisterSize(size)));

                case X86OperandType.RegisterOrMemoryAddress:
                    return GetRegOrMemOperand32(registerToken, size);

                case X86OperandType.ImmediateData:
                    return new X86Operand(ReadImmediateData(size));

                case X86OperandType.MemoryAddress:
                    return new X86Operand(GetOperandType(size), _reader.ReadUInt32());

                case X86OperandType.RegisterAl:
                    return new X86Operand(X86Register.Al);

                case X86OperandType.RegisterCl:
                    return new X86Operand(X86Register.Cl);

                case X86OperandType.RegisterDx:
                    return new X86Operand(X86Register.Dx);

                case X86OperandType.RegisterEax:
                    return new X86Operand(X86Register.Eax);

                case X86OperandType.ImmediateOne:
                    return new X86Operand(1);

                case X86OperandType.RelativeOffset:
                    return new X86Operand((ulong)(Convert.ToInt64(ReadSignedImmediateData(size)) + BaseAddress + _reader.Position));

                case X86OperandType.None:
                    return null;

            }
            throw new NotSupportedException("Unrecognized or unsupported addressing method.");
        }