Пример #1
0
        public InstructionDef(EnumValue code, string opCodeString, string instructionString, EnumValue mnemonic,
                              EnumValue mem, EnumValue bcst, EnumValue decoderOption, InstructionDefFlags1 flags1, InstructionDefFlags2 flags2,
                              InstructionDefFlags3 flags3, InstrStrFmtOption instrStrFmtOption, InstructionStringFlags instrStrFlags,
                              InstrStrImpliedOp[] instrStrImpliedOps,
                              MandatoryPrefix mandatoryPrefix, OpCodeTableKind table, OpCodeL lBit, OpCodeW wBit, uint opCode, int opCodeLength,
                              int groupIndex, int rmGroupIndex, CodeSize operandSize, CodeSize addressSize, TupleType tupleType, OpCodeOperandKind[] opKinds,
                              PseudoOpsKind?pseudoOp, EnumValue encoding, EnumValue flowControl, ConditionCode conditionCode,
                              BranchKind branchKind, RflagsBits read, RflagsBits undefined, RflagsBits written, RflagsBits cleared, RflagsBits set,
                              EnumValue[] cpuid, OpInfo[] opInfo,
                              FastFmtInstructionDef fast, FmtInstructionDef gas, FmtInstructionDef intel, FmtInstructionDef masm, FmtInstructionDef nasm)
        {
            Code               = code;
            OpCodeString       = opCodeString;
            InstructionString  = instructionString;
            Mnemonic           = mnemonic;
            Memory             = mem;
            MemoryBroadcast    = bcst;
            DecoderOption      = decoderOption;
            EncodingValue      = encoding;
            Flags1             = flags1;
            Flags2             = flags2;
            Flags3             = flags3;
            InstrStrFmtOption  = instrStrFmtOption;
            InstrStrFlags      = instrStrFlags;
            InstrStrImpliedOps = instrStrImpliedOps;

            MandatoryPrefix = mandatoryPrefix;
            Table           = table;
            LBit            = lBit;
            WBit            = wBit;
            OpCode          = opCode;
            OpCodeLength    = opCodeLength;
            GroupIndex      = groupIndex;
            RmGroupIndex    = rmGroupIndex;
            TupleType       = tupleType;
            OperandSize     = operandSize;
            AddressSize     = addressSize;
            OpKinds         = opKinds;

            PseudoOp        = pseudoOp;
            ControlFlow     = flowControl;
            ConditionCode   = conditionCode;
            BranchKind      = branchKind;
            RflagsRead      = read;
            RflagsUndefined = undefined;
            RflagsWritten   = written;
            RflagsCleared   = cleared;
            RflagsSet       = set;
            RflagsInfo      = null;
            Cpuid           = cpuid;
            CpuidInternal   = null;
            OpInfo          = opInfo;
            OpInfoEnum      = new EnumValue[opInfo.Length];

            Fast  = fast;
            Gas   = gas;
            Intel = intel;
            Masm  = masm;
            Nasm  = nasm;
        }
Пример #2
0
        static bool ParseRflags(string value, ref RflagsBits rflags)
        {
            foreach (var c in value)
            {
                switch (c)
                {
                case RflagsBitsConstants.AF:
                    rflags |= RflagsBits.AF;
                    break;

                case RflagsBitsConstants.CF:
                    rflags |= RflagsBits.CF;
                    break;

                case RflagsBitsConstants.OF:
                    rflags |= RflagsBits.OF;
                    break;

                case RflagsBitsConstants.PF:
                    rflags |= RflagsBits.PF;
                    break;

                case RflagsBitsConstants.SF:
                    rflags |= RflagsBits.SF;
                    break;

                case RflagsBitsConstants.ZF:
                    rflags |= RflagsBits.ZF;
                    break;

                case RflagsBitsConstants.IF:
                    rflags |= RflagsBits.IF;
                    break;

                case RflagsBitsConstants.DF:
                    rflags |= RflagsBits.DF;
                    break;

                case RflagsBitsConstants.AC:
                    rflags |= RflagsBits.AC;
                    break;

                default:
                    return(false);
                }
            }

            return(true);
        }
Пример #3
0
 public InstrInfo(EnumValue code, CodeInfo codeInfo, EnumValue encoding, EnumValue flowControl, RflagsBits read, RflagsBits undefined, RflagsBits written, RflagsBits cleared, RflagsBits set, EnumValue[] cpuid, OpInfo[] opInfo, InstrInfoFlags flags)
 {
     Code            = code;
     CodeInfo        = codeInfo;
     Encoding        = encoding;
     FlowControl     = flowControl;
     RflagsRead      = read;
     RflagsUndefined = undefined;
     RflagsWritten   = written;
     RflagsCleared   = cleared;
     RflagsSet       = set;
     RflagsInfo      = null;
     Cpuid           = cpuid;
     CpuidInternal   = null;
     OpInfo          = opInfo;
     OpInfoEnum      = new EnumValue[opInfo.Length];
     Flags           = flags;
 }
Пример #4
0
 /// <summary>
 /// Creates a new x86 flag register variable.
 /// </summary>
 /// <param name="flag">The flag.</param>
 public X86FlagsRegister(RflagsBits flag)
 {
     Flag = flag;
 }
Пример #5
0
 /// <summary>
 /// Gets a flag variable by its identifier.
 /// </summary>
 /// <param name="flag">The flag identifier.</param>
 /// <returns>The flag variable.</returns>
 public X86FlagsRegister GetFlag(RflagsBits flag) => _flags[flag];