Пример #1
0
 public DataAccess(ECondition condition, bool load, bool preIndex, bool unsigned, bool writeBack, EDataSize dataSize, ERegister rn, ERegister rd, short immediate)
 {
     Offset    = EOffset.Immediate;
     Condition = condition;
     Load      = load;
     PreIndex  = preIndex;
     Up        = unsigned;
     WriteBack = writeBack;
     DataSize  = dataSize;
     Rn        = rn;
     Rd        = rd;
     Immediate = immediate;
     Decoded   = true;
     Linked    = true;
 }
Пример #2
0
 public DataAccess(ECondition condition, bool load, bool preIndex, bool unsigned, bool writeBack, EDataSize dataSize, ERegister rn, ERegister rd, byte shiftCount, EShiftInstruction shiftInst, ERegister rm)
 {
     Offset     = EOffset.ImmediateShiftRm;
     Condition  = condition;
     Load       = load;
     PreIndex   = preIndex;
     Up         = unsigned;
     WriteBack  = writeBack;
     DataSize   = dataSize;
     Rn         = rn;
     Rd         = rd;
     ShiftCount = shiftCount;
     ShiftInst  = shiftInst;
     Rm         = rm;
     Decoded    = true;
     Linked     = true;
 }
Пример #3
0
        // Preindex!
        private void ParseSource([NotNull] string sourceString)
        {
            var source = sourceString.Split(',');

            if (source.Length > 3)
            {
                throw new TargetParameterCountException();
            }

            Rn = Parser.ParseRegister(source[0]);
            if (source.Length == 1)
            {
                return;
            }

            // User wants to use an immediate offset
            if (source[1].StartsWith("#", StringComparison.Ordinal))
            {
                Immediate = Parser.ParseImmediate <short>(source[1]);
                if (Immediate < 0)
                {
                    Up         = false;
                    Immediate *= -1;
                }

                if (Immediate > 4096)
                {
                    throw new ArgumentOutOfRangeException();
                }

                Offset = EOffset.Immediate;
            }
            // User wants to use a register value offset
            else
            {
                Rm = Parser.ParseRegister(source[1]);
                if (source.Length > 2)
                {
                    Parser.ParseShiftInstruction(source[2], ref ShiftInst, ref ShiftCount);
                }

                Offset = EOffset.ImmediateShiftRm;
            }
        }