Mono.Debugger.Architectures.X86_Instruction.OneByteOpcode C# (CSharp) Method

OneByteOpcode() protected method

protected OneByteOpcode ( TargetReader reader, byte opcode ) : void
reader Mono.Debugger.Backend.TargetReader
opcode byte
return void
        protected void OneByteOpcode(TargetReader reader, byte opcode)
        {
            if (OneByte_Has_ModRM [opcode] != 0)
                DecodeModRM (reader);

            if ((opcode >= 0x70) && (opcode <= 0x7f)) {
                CallTarget = Address + reader.BinaryReader.ReadSByte () + 2;
                type = Type.ConditionalJump;
            } else if ((opcode >= 0xe0) && (opcode <= 0xe3)) {
                CallTarget = Address + reader.BinaryReader.ReadSByte () + 2;
                type = Type.ConditionalJump;
            } else if ((opcode == 0xe8) || (opcode == 0xe9)) {
                if ((RexPrefix & X86_REX_Prefix.REX_W) != 0) {
                    long offset = reader.BinaryReader.ReadInt32 ();
                    long long_target = Address.Address + offset + 5;
                    CallTarget = new TargetAddress (
                        Address.Domain, long_target);
                } else if ((Prefix & X86_Prefix.ADDR) != 0) {
                    short offset = reader.BinaryReader.ReadInt16 ();
                    int short_target = (short)Address.Address + offset + 3;
                    CallTarget = new TargetAddress (
                        Address.Domain, short_target);
                } else {
                    int offset = reader.BinaryReader.ReadInt32 ();
                    CallTarget = Address + offset + 5;
                }
                type = (opcode == 0xe8) ? Type.Call : Type.Jump;
            } else if (opcode == 0xeb) {
                CallTarget = Address + reader.BinaryReader.ReadSByte () + 2;
                type = Type.Jump;
            } else if (opcode == 0xc3) {
                type = Type.Ret;
            } else if (opcode == 0x55) { /* push %rbp */
                type = Type.Interpretable;
            } else if (opcode == 0xc2) {
                Displacement = reader.BinaryReader.ReadInt16 ();
                type = Type.Ret;
            } else if (opcode == 0xff) {
                DecodeGroup5 (reader);
            } else if (opcode == 0x90) {
                type = Type.Interpretable;
            }
        }