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; }
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; }
// 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; } }