Exemplo n.º 1
0
 public Instruction(Chip chip, int relativePos, int actualPos, TestPrefix testPrefix)
 {
     Chip        = chip;
     RelativePos = relativePos;
     ActualPos   = actualPos;
     TestPrefix  = testPrefix;
 }
Exemplo n.º 2
0
 public MulInstruction(Chip chip, string[] args, int relativePos, int actualPos, TestPrefix testPrefix) : base(chip, relativePos, actualPos, testPrefix)
 {
     arg = new RIArg(args, chip);
 }
Exemplo n.º 3
0
 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);
 }
Exemplo n.º 4
0
        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");
            }
        }
Exemplo n.º 5
0
 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);
 }
Exemplo n.º 6
0
 public TestPrefixAttribute(TestPrefix _)
 {
 }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
 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");
     }
 }
Exemplo n.º 9
0
        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];
        }