public Instruction(Chip chip, int relativePos, int actualPos, TestPrefix testPrefix) { Chip = chip; RelativePos = relativePos; ActualPos = actualPos; TestPrefix = testPrefix; }
public MulInstruction(Chip chip, string[] args, int relativePos, int actualPos, TestPrefix testPrefix) : base(chip, relativePos, actualPos, testPrefix) { arg = new RIArg(args, chip); }
public TcpInstruction(Chip chip, string[] args, int relativePos, int actualPos, TestPrefix testPrefix) : base(chip, relativePos, actualPos, testPrefix) { if (args.Length != 2) { throw new InstructionValidationException("TCP must take two arguments"); } firstArg = new RIArg(args[0], chip); secondArg = new RIArg(args[1], chip); }
public static Instruction CreateInstruction(string[] input, Chip chip, int relativePos, int actualPos, TestPrefix testPrefix) { var command = input[0]; var args = input.Skip(1).ToArray(); switch (command) { case "add": return(new AddInstruction(chip, args, relativePos, actualPos, testPrefix)); case "sub": return(new SubInstruction(chip, args, relativePos, actualPos, testPrefix)); case "mul": return(new MulInstruction(chip, args, relativePos, actualPos, testPrefix)); case "div": return(new DivInstruction(chip, args, relativePos, actualPos, testPrefix)); case "not": return(new NotInstruction(chip, args, relativePos, actualPos, testPrefix)); case "dgt": return(new DgtInstruction(chip, args, relativePos, actualPos, testPrefix)); case "dst": return(new DstInstruction(chip, args, relativePos, actualPos, testPrefix)); case "nop": return(new NopInstruction(chip, args, relativePos, actualPos, testPrefix)); case "mov": return(new MovInstruction(chip, args, relativePos, actualPos, testPrefix)); case "jmp": return(new JmpInstruction(chip, args, relativePos, actualPos, testPrefix)); case "slp": return(new SlpInstruction(chip, args, relativePos, actualPos, testPrefix)); case "slx": throw new NotImplementedException(); case "teq": return(new TeqInstruction(chip, args, relativePos, actualPos, testPrefix)); case "tgt": return(new TgtInstruction(chip, args, relativePos, actualPos, testPrefix)); case "tlt": return(new TltInstruction(chip, args, relativePos, actualPos, testPrefix)); case "tcp": return(new TcpInstruction(chip, args, relativePos, actualPos, testPrefix)); default: throw new InstructionValidationException("Unknown command"); } }
public MovInstruction(Chip chip, string[] args, int relativePos, int actualPos, TestPrefix testPrefix) : base(chip, relativePos, actualPos, testPrefix) { if (args.Length != 2) { throw new InstructionValidationException("mov must take 2 args"); } src = new RIArg(args[0], chip); dst = new RArg(args[1], chip); }
public TestPrefixAttribute(TestPrefix _) { }
public DstInstruction(Chip chip, string[] args, int relativePos, int actualPos, TestPrefix testPrefix) : base(chip, relativePos, actualPos, testPrefix) { if (args.Length != 2) { throw new InstructionValidationException("dst requires 2 args"); } firstArg = new RIArg(args[0], chip); secondArg = new RIArg(args[1], chip); }
public NopInstruction(Chip chip, string[] args, int relativePos, int actualPos, TestPrefix testPrefix) : base(chip, relativePos, actualPos, testPrefix) { if (args.Length != 0) { throw new InstructionValidationException("nop takes no args"); } }
public JmpInstruction(Chip chip, string[] args, int relativePos, int actualPos, TestPrefix testPrefix) : base(chip, relativePos, actualPos, testPrefix) { if (args.Length != 1) { throw new InstructionValidationException("Must take a single label arg"); } if (!chip.HasLabel(args[0])) { throw new InstructionValidationException($"The label {args[0]} does not exist."); } label = args[0]; }